r182436 - Fix crash-on-invalid: only use TransformAddressOfOperand when transforming the
Richard Smith
richard-llvm at metafoo.co.uk
Tue May 21 16:29:46 PDT 2013
Author: rsmith
Date: Tue May 21 18:29:46 2013
New Revision: 182436
URL: http://llvm.org/viewvc/llvm-project?rev=182436&view=rev
Log:
Fix crash-on-invalid: only use TransformAddressOfOperand when transforming the
operand of a unary address-of expression, not for *all* expressions!
Modified:
cfe/trunk/lib/Sema/TreeTransform.h
cfe/trunk/test/SemaTemplate/instantiate-expr-5.cpp
Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=182436&r1=182435&r2=182436&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Tue May 21 18:29:46 2013
@@ -6320,7 +6320,11 @@ TreeTransform<Derived>::TransformAddress
template<typename Derived>
ExprResult
TreeTransform<Derived>::TransformUnaryOperator(UnaryOperator *E) {
- ExprResult SubExpr = TransformAddressOfOperand(E->getSubExpr());
+ ExprResult SubExpr;
+ if (E->getOpcode() == UO_AddrOf)
+ SubExpr = TransformAddressOfOperand(E->getSubExpr());
+ else
+ SubExpr = TransformExpr(E->getSubExpr());
if (SubExpr.isInvalid())
return ExprError();
Modified: cfe/trunk/test/SemaTemplate/instantiate-expr-5.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/instantiate-expr-5.cpp?rev=182436&r1=182435&r2=182436&view=diff
==============================================================================
--- cfe/trunk/test/SemaTemplate/instantiate-expr-5.cpp (original)
+++ cfe/trunk/test/SemaTemplate/instantiate-expr-5.cpp Tue May 21 18:29:46 2013
@@ -36,3 +36,13 @@ namespace PR5880 {
template void test_anon_union<int>();
}
+
+namespace AddrOfClassMember {
+ template <typename T> struct S {
+ int n;
+ static void f() {
+ +T::n; // expected-error {{invalid use of member}}
+ }
+ };
+ void g() { S<S<int> >::f(); } // expected-note {{in instantiation of}}
+}
More information about the cfe-commits
mailing list