I’ve been digging into a bug that appears when call-style initializers are used for builtin types. For example:
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?
See this thread:
Thanks for the context on this Richard. It's a somewhat larger can of worms
than I was expecting. I see you agreed with the CXXDirectInitExpr proposal
from John McCall, but I have a suspicion it might be a fair bit of work to
implement, integrate and test? That said, this is a fairly ugly problem for
code refactoring currently - but not unsurmountable (I hope).
The workarounds I have for this issue are ugly and I fear more than a little unreliable. Okay if I file a bug for this just to ensure it doesn’t get forgotten about?
Incidentally, I did try bypassing the code that removes the ParenListExpr and things just worked - so perhaps transitioning to a CXXDirectInitExpr may not be too painful if the approach is similar.