<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0);">
<p style="margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="font-size: 14.6667px;">Hi,</span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt"> </span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt">"I would like to check when inside BlockData if a symbol is a derived type being defined."<br>
<br>
Can you use the declaration visitor for DerivedTypeDef and check if the scope is BlockData?<br>
bool DeclarationVisitor::Pre(const parser::DerivedTypeDef &x) {</span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt"> </span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt">"I can see there is a method:</span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt">void ConstructVisitor::Post(const parser::TypeGuardStmt::Guard &x)</span></p>
<p style="font-size: 12pt; margin: 0cm 0cm 0.0001pt; color: rgb(50, 49, 48); background-color: rgb(255, 255, 255); font-family: Calibri, sans-serif;">
<span style="margin:0px; font-size:11pt">Is this one checking when a derived type is being defined?"<br>
<br>
This function in resolve-name.cc is creating a symbol and adding some type information for each type guard statement in a select type construct if there is an association. Hence I believe this is not checking for a derived type definition.<br>
<br>
--Kiran</span></p>
</div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> flang-dev <flang-dev-bounces@lists.llvm.org> on behalf of Caroline Concatto via flang-dev <flang-dev@lists.llvm.org><br>
<b>Sent:</b> 20 December 2019 11:22<br>
<b>To:</b> flang-dev@lists.llvm.org <flang-dev@lists.llvm.org>; tkeith@nvidia.com <tkeith@nvidia.com><br>
<b>Subject:</b> [flang-dev] How to check when a Derived type is being defined inside resolve-names.cc</font>
<div> </div>
</div>
<div lang="EN-GB">
<div class="x_WordSection1">
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">Hey you all,</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">Me again, this time I have problem to check when a derived type is being defined.</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">I would like to check when inside BlockData if a symbol is a derived type being defined.</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">The function CheckDerivedTypeDefinition should check if a new declaration type is being defined.</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">void ResolveNamesVisitor::CheckDerivedTypeDefinition() {</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">  for (auto &pair : currScope()) {</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">    auto &symbol{*pair.second};</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">    if (currScope().kind() == Scope::Kind::BlockData){</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">      if (symbol.has<AssocEntityDetails>() || GetDeclTypeSpec()){ 
</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">           Say(symbol.name(),</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">            "'%s' is declaration type definition"_err_en_US);</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">       }</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">    }</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">  }</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">}</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">I image these ones only check if the type is a derived type or if it has a type defined</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">currScope().IsDerivedType() || symbol.GetType()</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">but not a derived type declaration</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">I can see there is a method:</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">void ConstructVisitor::Post(const parser::TypeGuardStmt::Guard &x)</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">Is this one checking when a derived type is being defined?</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">I believe this is allowed inside BlockData:</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">block data bdderivedtype</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">type mytype</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">   integer:: i</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">end type mytype</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">  type (mytype)  var</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">end block data</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">PS.: I’ve created the Scope::Kind::BlockData, as it was not defined yet and I needed to make the semantic checks.</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">Thank you,</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt">Carol</span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
<p class="x_MsoNormal" style="margin-top: 0px; margin-bottom: 0px;margin-top:0px; margin-bottom:0px; margin:0cm 0cm 0.0001pt; font-size:12pt; font-family:Calibri,sans-serif">
<span style="font-size:11.0pt"> </span></p>
</div>
</div>
</body>
</html>