<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/138911>138911</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Missing diagnostic of access private component outside of the module
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:frontend
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          DanielCChen
      </td>
    </tr>
</table>

<pre>
    Consider the following code:
```
module m
    type Base
        private
 procedure(integer), nopass, pointer :: pp1
        procedure(type(Base)), nopass, pointer :: pp2
    end type
end module

program declaration003
use m
    type(Base) :: b1
    b1%pp1 => null()
    b1%pp2 => null()
end
```

Both `pp1` and `pp2` are private components. They shall not be accessible outside of module `m`. 
This usage should be diagnosed. 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEk8GOpDgMhp_GXKxGwSko6sCBrtq67a1fIBAXZBUSlIRe9duPQtHq6ZmRBiERQ_zb_4ejYjSTY-6gfoX6VqgtzT50N-UM2-t1ZlcMXn90V--i0RwwzYwPb63_37gJR68ZZA-ih0Yct-gXrzfLuIDoERHTx8r4qiIfcb7WYN5V2t-swY-st8BArXGJJw5AF6ArOr-qGPNq9flLwFxL9riu1TetL4FcC6jdq2WRv-nQocNO732C6PPy6SDbEv0a_BTUgppHq4JKxjshJIh-i989ftX91B8-2xwqoHpdKwR5A_kPus1aoDb3920D_XEDO_0LYRD9q08zQiMyi0agcvoZ0R4F_kSMo19W79ilWOLbzB8YZ2UtOp9wYFTjyDGawTL6LeV_jP5x-M-CCzSiRBD922wiblFNjHH2m9U5Wxs1OR9Zl1joTuqLvKiCu-p8ahrZtJUs5k6dtG5Eq-miaZCCZFtVTOJxOlOtR30pTEeCalGLc9XUUsqy5cegdTtW5xOphkY4CV6UsaW170vpw1SYGDfuKtleqqqwamAb9wkmeljlJpD9I3iXMjiiPNehy7kvwzZFOAlrYopfaskku5-AZ3J9w39NjHm-D3_JjJnKk9XvYH8ml8_Hk16xBdvNKa0xTwPdge6TSfM2lKNfgO65_PF4WYP_j8cEdN-dRaD7Ye69ox8BAAD__59MH70">