<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Richard,<br>
<br>
EnterDtorCleanups does exactly what I need!<br>
<br>
Thanks!<br>
Vladimir.<br>
<br>
<div class="moz-cite-prefix">On 03/17/2015 01:47 AM, Richard Smith
wrote:<br>
</div>
<blockquote
cite="mid:CAOfiQqmmr_MnQL8g_KeHqKAbuA9XpxNFrwa24smfV71YVVrCmA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Mon, Mar 16, 2015 at 3:30 PM,
Vladimir Voskresensky <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:vladimir.voskresensky@oracle.com"
target="_blank">vladimir.voskresensky@oracle.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Richard,<br>
<br>
Thanks for the quick reply. <br>
May be you can point me to the code in LLVM where I can
find the logic I need (find fields which must be
implicitly created/destroyed)?<br>
As destructors have to be called for fields, I assume
there is such logic. <br>
May be somewhere at AST-of-destructor => IR
conversion layer?<br>
</div>
</blockquote>
<div><br>
</div>
<div><a moz-do-not-send="true"
href="http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp">http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp</a><br>
</div>
<div><br>
</div>
<div>Search for "EnterDtorCleanups".</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> Thanks!<span
class=""><font color="#888888"><br>
Vladimir.</font></span>
<div>
<div class="h5"><br>
<br>
<div>On 03/16/2015 09:46 PM, Richard Smith wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Mon, Mar 16, 2015
at 7:31 AM, Vladimir Voskresensky <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:voskresensky.vladimir@gmail.com"
target="_blank">voskresensky.vladimir@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">
<div>
<div>Hello,<br>
<br>
How can I find by AST visitor for
which fields destructors are called?<br>
<br>
for the following code:<br>
struct WithDestr {<br>
int *i;<br>
<br>
WithDestr() : i(nullptr) { }<br>
<br>
virtual ~WithDestr() { delete i;
}<br>
};<br>
<br>
struct Other {<br>
WithDestr d;<br>
long *ptr;<br>
Other() { }<br>
virtual ~Other() { delete ptr; }<br>
};<br>
<br>
</div>
In AST I see only the construction of
field d, but do not see anywhere
destruction of d.<br>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>We do not model the implicit member and
base destruction actions performed by a
destructor in the AST.</div>
<div> </div>
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr">
<div>|-CXXRecordDecl 0x9130050
<line:13:3, line:18:3>
line:13:10 struct Other definition<br>
| |-CXXRecordDecl 0x9130100 <col:3,
col:10> col:10 implicit referenced
struct Other<br>
| |-FieldDecl 0x9130160 <line:14:5,
col:15> col:15 d 'struct WithDestr'<br>
| |-FieldDecl 0x91301c0 <line:15:5,
col:11> col:11 referenced ptr 'long
* '<br>
| |-CXXConstructorDecl 0x9130240
<line:16:5, col:15> col:5 Other
'void (void) __attribute__((cdecl))'<br>
| | |-CXXCtorInitializer Field
0x9130160 'd' 'struct WithDestr'<br>
| | | `-CXXConstructExpr 0x9176ae8
<col:5> 'struct WithDestr' 'void
(void) __attribute__((cdecl))'<br>
| | `-CompoundStmt 0x9176b30
<col:13, col:15><br>
| |-CXXDestructorDecl 0x9176850
<line:17:5, col:36> col:13 used
~Other 'void (void)
__attribute__((cdecl)) noexcept'
virtual<br>
| | `-CompoundStmt 0x9176b98
<col:22, col:36><br>
| | `-CXXDeleteExpr 0x9176b80
<col:24, col:31> 'void'<br>
| | `-ImplicitCastExpr 0x9176b70
<col:31> 'long * '
<LValueToRValue><br>
| | `-MemberExpr 0x9176b50
<col:31> 'long * ' lvalue
->ptr 0x91301c0<br>
| | `-CXXThisExpr 0x9176b40
<col:31> 'struct Other * ' this<br>
<br>
<br>
<br>
</div>
Thanks!<span><font color="#888888"><br>
<div>Vladimir.<br>
</div>
</font></span></div>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:cfe-dev@cs.uiuc.edu"
target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev"
target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
cfe-dev mailing list
<a moz-do-not-send="true" href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a>
<a moz-do-not-send="true" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</div>
</div>
</div>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev"
target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
cfe-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a>
</pre>
</blockquote>
<br>
</body>
</html>