summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp2
-rw-r--r--clang/test/SemaCXX/warn-global-constructors.cpp12
2 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 63acdb5f1cc..7205abdbc21 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -5622,7 +5622,7 @@ void Sema::AddCXXDirectInitializerToDecl(Decl *RealDecl,
if (!VDecl->isInvalidDecl() &&
!VDecl->getDeclContext()->isDependentContext() &&
- VDecl->hasGlobalStorage() &&
+ VDecl->hasGlobalStorage() && !VDecl->isStaticLocal() &&
!VDecl->getInit()->isConstantInitializer(Context,
VDecl->getType()->isReferenceType()))
Diag(VDecl->getLocation(), diag::warn_global_constructor)
diff --git a/clang/test/SemaCXX/warn-global-constructors.cpp b/clang/test/SemaCXX/warn-global-constructors.cpp
index 107bbe129f6..e14117eaf3b 100644
--- a/clang/test/SemaCXX/warn-global-constructors.cpp
+++ b/clang/test/SemaCXX/warn-global-constructors.cpp
@@ -77,5 +77,15 @@ namespace test6 {
void f2() {
static A& a = *new A;
}
+}
+
+namespace pr8095 {
+ struct Foo {
+ int x;
+ Foo(int x1) : x(x1) {}
+ };
-} \ No newline at end of file
+ void bar() {
+ static Foo a(0);
+ }
+}
OpenPOWER on IntegriCloud