From 9d338d04e2271b5defeafcb52b9b297dcdf7e420 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 26 Mar 2014 15:58:20 +0000 Subject: [PATCH] -Wglobal-constructors: Don't warn on trivial defaulted dtors Fixes PR19253. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204825 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 2 +- test/SemaCXX/warn-global-constructors.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 1a5a4edfc5..919c74324a 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -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); } diff --git a/test/SemaCXX/warn-global-constructors.cpp b/test/SemaCXX/warn-global-constructors.cpp index f57f0de708..b57a9c215f 100644 --- a/test/SemaCXX/warn-global-constructors.cpp +++ b/test/SemaCXX/warn-global-constructors.cpp @@ -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}} +} -- 2.40.0