]> granicus.if.org Git - clang/commitdiff
When checking the base object of a member access expression (b.foo,
authorDouglas Gregor <dgregor@apple.com>
Fri, 20 Nov 2009 19:58:21 +0000 (19:58 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 20 Nov 2009 19:58:21 +0000 (19:58 +0000)
b->foo), don't look through pointers unless we have an -> operator.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89480 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprCXX.cpp
test/SemaTemplate/destructor-template.cpp

index 5962466023d27545030d6fe344d73d3962748e50..be9375c495b761d5bef9792e56838550d3d504d2 100644 (file)
@@ -2160,10 +2160,10 @@ Sema::ActOnStartCXXMemberReference(Scope *S, ExprArg Base, SourceLocation OpLoc,
         return ExprError();
       }
     }
-  }
 
-  if (BaseType->isPointerType())
-    BaseType = BaseType->getPointeeType();
+    if (BaseType->isPointerType())
+      BaseType = BaseType->getPointeeType();
+  }
 
   // We could end up with various non-record types here, such as extended
   // vector types or Objective-C interfaces. Just return early and let
index a7c8d247f021ad9a844c2463dd666b8ea240e66e..afe2cfc30019d80fe44109fe28c55461dcac5459 100644 (file)
@@ -9,4 +9,11 @@ template<typename A> class s0 {
 
 };
 
+struct Incomplete;
 
+template<typename T>
+void destroy_me(T me) {
+  me.~T();
+}
+
+template void destroy_me(Incomplete*);