[cfe-dev] Bug? CXXCtorInitializer::getInit()

Julian Mueller via cfe-dev cfe-dev at lists.llvm.org
Fri Dec 21 02:46:18 PST 2018


Hello,

I am using *CXXCtorInitializer*'s method *getInit()* to retrieve its *Init*
 Stmt*.
The *CXXCtorInitializer::Init* field is described as followed:

*"The argument used to initialize the base or member, which may end up
> constructing an object (when multiple arguments are involved)."*


In my usecase I actually want to retrieve the underlying source text, that
is represented by *Init.*

This works fine for simple Initializers using declRefExpr or
integerLiterals.
Retrieving the source's text for the *Init* expr returns *i *and *10* for
the following CXXCtorInitializer:

*SomeConstructor(int i):m_foo(i), m_bar(10){}*

I haven't figured out what exactly is the problem, but as far as I can tell
the *Init* pointer appears faulty in some cases when there is a
*CXXConstructExpr
involved.*

Given:


> *struct T {};*
> *struct Foo{**    Foo(T t): t0(new T()),  t1({}),   t2(t){}*
>
> *    T * t0;*
> *    T t1;*
> *    T t2;**};*


Retrieving the *Init* and it's underlying source text returns:
for t0: "*new T()*"    <----- as expected :)
for t1: "*t1({})*"        <----- expected: "*{}*"
for t2: "*t2(t)*"          <---- expected: "*t*"

Since the Docu states, the *Init* gives the* "**argument used to initialize
the [...] member"* I think this might be a bug? Maybe I don't retrieve the
source code correctly, but in any other case it appears to work just fine.
I use the Lexer to get to the* Init*'s source like this, where expr is
*cxxCtorInitializer->getInit()*:

*Lexer::getSourceText(CharSourceRange::getCharRange(expr->getSourceRange()),
> ctxt.getSourceManager(), ctxt.getLangOpts());*


So is this expected behavior? If so why? And how can I get to the actual
'Initializer' in those cases?

Any help appreciated!

-- 
Mit freundlichen Grüßen,
Julian Müller
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20181221/4eccb006/attachment.html>


More information about the cfe-dev mailing list