[cfe-dev] BUG: VarDecl::getSourceRange() incorrect if CallInit style used for builtin type.

Richard Smith richard at metafoo.co.uk
Tue Jan 29 15:19:32 PST 2013


See this thread:

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120709/060344.html

and particularly:

http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20120709/060465.html

On Tue, Jan 29, 2013 at 2:53 PM, Will Wilson <will at indefiant.com> wrote:
> Hi All,
>
> I've been digging into a bug that appears when call-style initializers are
> used for builtin types. For example:
>
>     int g_foo(1);
>
> Results in an initializer that is solely an IntegerLiteral - the
> ParenListExpr that originally surrounded it is lost during
> Sema::AddInitializerToDecl(). This unfortunately also loses the end location
> for the final ')' and leads the VarDecl::getSourceRange() returning the
> location of the IntegerLiteral for the end location.
>
> What should be the correct approach here? Surely the ParenListExpr should be
> preserved in the AST? Or if it really is supposed to be folded away at this
> stage than how can we retain the end location for the expression?

Using ParenListExpr is not appropriate -- that AST node is only
intended for transient use, to represent a syntactic construct which
we have not yet resolved to the right semantic node.



More information about the cfe-dev mailing list