Address Richard's comments.
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 18 Jul 2014 19:53:21 +0000 (19:53 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 18 Jul 2014 19:53:21 +0000 (19:53 +0000)
llvm-svn: 213402

clang/lib/CodeGen/CGExprCXX.cpp
clang/test/CodeGenCXX/typeid-should-throw.cpp

index f09c279..8cadd6c 100644 (file)
@@ -1618,6 +1618,9 @@ void CodeGenFunction::EmitCXXDeleteExpr(const CXXDeleteExpr *E) {
 static bool isGLValueFromPointerDeref(const Expr *E) {
   E = E->IgnoreParenCasts();
 
+  if (isa<ArraySubscriptExpr>(E))
+    return true;
+
   if (const auto *UO = dyn_cast<UnaryOperator>(E))
     if (UO->getOpcode() == UO_Deref)
       return true;
index e3cbea8..66abf4c 100644 (file)
@@ -42,3 +42,13 @@ void f7(A *x) { typeid((*x)); }
 // CHECK-LABEL: define void @_Z2f7P1A
 // CHECK:       icmp eq {{.*}}, null
 // CHECK-NEXT:  br i1
+
+void f8(A *x) { typeid(x[0]); }
+// CHECK-LABEL: define void @_Z2f8P1A
+// CHECK:       icmp eq {{.*}}, null
+// CHECK-NEXT:  br i1
+
+void f9(A *x) { typeid(0[x]); }
+// CHECK-LABEL: define void @_Z2f9P1A
+// CHECK:       icmp eq {{.*}}, null
+// CHECK-NEXT:  br i1