[cfe-commits] r114269 - in /cfe/trunk: lib/Sema/SemaDeclCXX.cpp test/SemaCXX/warn-global-constructors.cpp
John McCall
rjmccall at apple.com
Fri Sep 17 22:25:11 PDT 2010
Author: rjmccall
Date: Sat Sep 18 00:25:11 2010
New Revision: 114269
URL: http://llvm.org/viewvc/llvm-project?rev=114269&view=rev
Log:
static local variables with destructors don't require a global destructor
unless we're on a platform without __cxa_atexit (or use thereof has been
disabled). This patch actually just disables the check completely for
static locals, but I've filed http://llvm.org/bugs/show_bug.cgi?id=8176 to
track the platform-specific fix.
Modified:
cfe/trunk/lib/Sema/SemaDeclCXX.cpp
cfe/trunk/test/SemaCXX/warn-global-constructors.cpp
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=114269&r1=114268&r2=114269&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Sat Sep 18 00:25:11 2010
@@ -5519,7 +5519,8 @@
<< VD->getDeclName()
<< VD->getType());
- if (!VD->isInvalidDecl() && VD->hasGlobalStorage())
+ // TODO: this should be re-enabled for static locals by !CXAAtExit
+ if (!VD->isInvalidDecl() && VD->hasGlobalStorage() && !VD->isStaticLocal())
Diag(VD->getLocation(), diag::warn_global_destructor);
}
}
Modified: cfe/trunk/test/SemaCXX/warn-global-constructors.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-global-constructors.cpp?rev=114269&r1=114268&r2=114269&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-global-constructors.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-global-constructors.cpp Sat Sep 18 00:25:11 2010
@@ -72,7 +72,7 @@
struct A { ~A(); };
void f1() {
- static A a; // expected-warning {{global destructor}}
+ static A a;
}
void f2() {
static A& a = *new A;
@@ -84,8 +84,14 @@
int x;
Foo(int x1) : x(x1) {}
};
+ void foo() {
+ static Foo a(0);
+ }
+ struct Bar {
+ ~Bar();
+ };
void bar() {
- static Foo a(0);
+ static Bar b;
}
}
More information about the cfe-commits
mailing list