diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-08-14 04:50:34 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-08-14 04:50:34 +0000 |
commit | 0be3970804a4c4db7be3fe08cd30072c8cee125d (patch) | |
tree | 02efd7953289b6eccc0d55f87ff7dd253a8c32e8 /clang | |
parent | 00c7e6ceb1826baab50c02f8547e97bfcaf9641c (diff) | |
download | bcm5719-llvm-0be3970804a4c4db7be3fe08cd30072c8cee125d.tar.gz bcm5719-llvm-0be3970804a4c4db7be3fe08cd30072c8cee125d.zip |
Fix r137086 to actually work properly in general. PR10650.
llvm-svn: 137574
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/reference-cast.cpp | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 4038be27926..f4a2695ec9d 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -344,8 +344,7 @@ public: // C++ Value *VisitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *E) { - RValue RV = CGF.EmitLoadOfLValue(CGF.EmitLValue(E->GetTemporaryExpr())); - return RV.getScalarVal(); + return EmitLoadOfLValue(E); } Value *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) { diff --git a/clang/test/CodeGenCXX/reference-cast.cpp b/clang/test/CodeGenCXX/reference-cast.cpp index 549434e9414..1d08b2b2e4b 100644 --- a/clang/test/CodeGenCXX/reference-cast.cpp +++ b/clang/test/CodeGenCXX/reference-cast.cpp @@ -181,3 +181,14 @@ unsigned pr10592(const int &v) { // CHECK-NEXT: ret i32 [[VVAL_I]] return static_cast<const unsigned &>(v); } + +namespace PR10650 { + struct Helper { + unsigned long long id(); + }; + unsigned long long test(Helper *obj) { + return static_cast<const unsigned long long&>(obj->id()); + } + // CHECK: define i64 @_ZN7PR106504testEPNS_6HelperE + // CHECK: store i64 +} |