<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>Also note that once the parent map has been built, it will not
update even if the AST changes. Do you maybe call getParents
before finalizing the AST?<br>
</p>
<p>This was an issue for me when using the ASTImporter
(Analyzer+CrossTU). See <a class="moz-txt-link-freetext" href="https://reviews.llvm.org/D46940">https://reviews.llvm.org/D46940</a><br>
</p>
<p>In that review Richard also brought up that it might be better to
move getParents from the ASTContext to libTooling.</p>
<p>-Rafael<br>
</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 05.11.18 17:59, Kevin Choi via
cfe-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:d2468bc5-26ac-cf3e-6562-474098038329@gmail.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p>I did some digging and it looks like it builds the "Map" on
demand, storing it in ASTContext (PointerParents, OtherParents).
I thought it might be a buggy implementation of
ParentMapASTVisitor, so I tried writing my own ASTVisitor.
However, after doing so, both my own and ParentMapASTVisitor
reported the TranslationUnitDecl traversing only one
user-defined FunctionDecl and not all of them (there are 4 in my
test). The root cause appears to be TUDecl missing some of the
function decls. I think all that needs to repro this is calling
"getContext().getParents<Stmt>(*E)" inside
CodeGenFunction::EmitArraySubscriptExpr(). DAE know if there is
any specific reason why I can't getParents from CGExpr.cpp?<br>
</p>
<p>Best,</p>
<p>Kevin<br>
</p>
<br>
<div class="moz-cite-prefix">On 2018-10-23 1:21 PM, David Blaikie
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAENS6EsZeNKSQTj81XWuyJPn3Kiep8_p97oKegJ0kCnC-f0LbQ@mail.gmail.com">
<div dir="ltr">I believe the parent map that powers getParents
is not populated by default (it's not used by Clang proper -
so it doesn't want to pay that cost) - not sure where/when/how
you call to populate it - but hopefully that gives you some
hints for what to look for.</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Tue, Oct 23, 2018 at 3:49 AM Kevin Choi via
cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org"
moz-do-not-send="true">cfe-dev@lists.llvm.org</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0

.8ex;border-left:1px #ccc solid;padding-left:1ex">Hi clang
developers,<br>
<br>
I wasn't sure if this was the relevant channel to ask this,
and I <br>
apologize if so.<br>
<br>
I've hit a puzzle with an out-of-tree build based on 6.0.0
and was <br>
wondering if anyone could share their wisdom on it.<br>
ASTContext::getParents seems to be returning an empty list
in a <br>
particular case:<br>
Run on ArraySubscriptExpr node looking for Stmt parents.<br>
<br>
I have four ArraySubscriptExprs in my AST dump, the faulty
one being:<br>
<br>
|-FunctionDecl 0x6190f58 <line:33:1, line:35:1>
line:33:5 used fib 'int <br>
(int)'$<br>
| |-ParmVarDecl 0x6190ec8 <col:9, col:13> col:13 used
n 'int'$<br>
| `-CompoundStmt 0x61915d8 <col:16, line:35:1>$<br>
| `-ReturnStmt 0x6191518 <line:34:3, col:13>$<br>
| `-ImplicitCastExpr 0x6191460 <col:10, col:13>
'int' <LValueToRValue>$<br>
| `-ArraySubscriptExpr 0x6191390 <col:10,
col:13> 'int' lvalue$<br>
| |-ImplicitCastExpr 0x6191220 <col:10> 'int
*' <br>
<ArrayToPointerDecay>$<br>
| | `-DeclRefExpr 0x6191080 <col:10> 'int
[16]' lvalue Var <br>
0x618c780 'b' 'int [16]'$<br>
| `-ImplicitCastExpr 0x61912d8 <col:12> 'int'
<LValueToRValue>$<br>
| `-DeclRefExpr 0x6191150 <col:12> 'int'
lvalue ParmVar <br>
0x6190ec8 'n' 'int'$<br>
<br>
In this case, getParents returns empty list even though
ImplicitCastExpr <br>
is clearly a parent and is a Stmt. My modification simply
calls "const <br>
auto Parents = getContext().getParents<Stmt>(ERef);"
in <br>
EmitArraySubscriptExpr. Has anyone run into a similar
problem before?<br>
<br>
Best,<br>
<br>
Kevin<br>
<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank"
moz-do-not-send="true">cfe-dev@lists.llvm.org</a><br>
<a
href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev"
rel="noreferrer" target="_blank" moz-do-not-send="true">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote>
</div>
</blockquote>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
</body>
</html>