]> granicus.if.org Git - clang/commitdiff
Allow vector types in pseudo-destructor expressions. Fixes PR13798.
authorDouglas Gregor <dgregor@apple.com>
Mon, 10 Sep 2012 14:57:06 +0000 (14:57 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 10 Sep 2012 14:57:06 +0000 (14:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163514 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprCXX.cpp
test/SemaCXX/vector.cpp

index 4efab1b83b73dad59535b0c8a40697cb06f9497c..0905607e7205a2cd9290f761d7a7a89f22ee5c43 100644 (file)
@@ -5045,7 +5045,8 @@ ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base,
   if (CheckArrow(*this, ObjectType, Base, OpKind, OpLoc))
     return ExprError();
 
-  if (!ObjectType->isDependentType() && !ObjectType->isScalarType()) {
+  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() &&
+      !ObjectType->isVectorType()) {
     if (getLangOpts().MicrosoftMode && ObjectType->isVoidType())
       Diag(OpLoc, diag::ext_pseudo_dtor_on_void) << Base->getSourceRange();
     else
index 82245ac29bbd8b10793c931f59ee940d5d14684e..4d2d064b32f1806ec9f5447ae09840920d043423 100644 (file)
@@ -267,3 +267,14 @@ void test_mixed_vector_types(fltx4 f, intx4 n, flte4 g, flte4 m) {
   (void)(n *= m);
   (void)(n /= m);
 }
+
+template<typename T> void test_pseudo_dtor_tmpl(T *ptr) {
+  ptr->~T();
+  (*ptr).~T();
+}
+
+void test_pseudo_dtor(fltx4 *f) {
+  f->~fltx4();
+  (*f).~fltx4();
+  test_pseudo_dtor_tmpl(f);
+}