]> granicus.if.org Git - clang/commitdiff
-Wglobal-constructors: Don't warn on trivial defaulted dtors
authorReid Kleckner <reid@kleckner.net>
Wed, 26 Mar 2014 15:58:20 +0000 (15:58 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 26 Mar 2014 15:58:20 +0000 (15:58 +0000)
Fixes PR19253.

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

lib/Sema/SemaDeclCXX.cpp
test/SemaCXX/warn-global-constructors.cpp

index 1a5a4edfc505694b187445570a20a4ff73dd47bf..919c74324a04a759c2bb552cc490fd5457352b8d 100644 (file)
@@ -10470,7 +10470,7 @@ void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
   Diag(VD->getLocation(), diag::warn_exit_time_destructor);
 
   // TODO: this should be re-enabled for static locals by !CXAAtExit
-  if (!VD->isStaticLocal())
+  if (!Destructor->isTrivial() && !VD->isStaticLocal())
     Diag(VD->getLocation(), diag::warn_global_destructor);
 }
 
index f57f0de70812aab02bcf4b337b7426cfcf059887..b57a9c215f42d286dfb7a2123c755018f1c9f953 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -Wglobal-constructors %s -verify
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wglobal-constructors %s -verify
 
 int opaque_int();
 
@@ -101,3 +101,11 @@ namespace referencemember {
   int a;
   A b = { a };
 }
+
+namespace pr19253 {
+  struct A { ~A() = default; };
+  A a;
+  struct B { ~B() {} };
+  struct C : B { ~C() = default; };
+  C c; // expected-warning {{global destructor}}
+}