This is an archive of the discontinued LLVM Phabricator instance.

Make CastExpr::getSubExprAsWritten look through implicit temporary under CK_ConstructorConversion
ClosedPublic

Authored by sberg on Jul 8 2016, 4:13 AM.

Details

Summary

With

struct S1 {};
struct S2 { operator S1(); };
S1 f(S2 s) { return static_cast<S1>(s); }

the static_cast expr is

CXXStaticCastExpr 0x... 'struct S1' static_cast<struct S1> <ConstructorConversion>
`-CXXConstructExpr 0x... 'struct S1' 'void (struct S1 &&) noexcept' elidable

`-MaterializeTemporaryExpr 0x... 'struct S1' xvalue
  `-ImplicitCastExpr 0x... 'struct S1' <UserDefinedConversion>
    `-CXXMemberCallExpr 0x... 'struct S1'
      `-MemberExpr 0x... '<bound member function type>' .operator S1 0x...
        `-DeclRefExpr 0x... 'struct S2' lvalue ParmVar 0x... 's' 'struct S2'

getSubExprAsWritten used to return the MaterializeTemporaryExpr (of type S1) under the CXXConstructExpr, instead of unwinding further to the DeclRefExpr (of type S2) at the bottom.

Diff Detail

Repository
rL LLVM

Event Timeline

sberg updated this revision to Diff 63197.Jul 8 2016, 4:13 AM
sberg retitled this revision from to Make CastExpr::getSubExprAsWritten look through implicit temporary under CK_ConstructorConversion.
sberg updated this object.
sberg added a reviewer: rsmith.
sberg added a subscriber: cfe-commits.
sberg added a comment.Jul 8 2016, 4:14 AM

(I'm not sure where and how to add a test for this?)

sberg updated this revision to Diff 103449.Jun 21 2017, 1:25 PM

added test

This revision was automatically updated to reflect the committed changes.