25.10.2012, 15:50, "Konstantin Tokarev" <[email protected]>:
> Hi all,
>
> This patch fixes http://llvm.org/bugs/show_bug.cgi?id=13127.
> Could anyone review it?
+cfe-dev
--
Regards,
Konstantin
From a2f1462d00d9fdcb0b3ee22da32e258270ca90a2 Mon Sep 17 00:00:00 2001
From: Konstantin Tokarev <[email protected]>
Date: Fri, 26 Oct 2012 13:26:23 +0400
Subject: [PATCH] Fixed warning about uninitialized field when calling static
methods (PR13127)
---
lib/Sema/SemaDeclCXX.cpp | 9 +++++++++
test/SemaCXX/uninitialized.cpp | 17 +++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index f0bd810..580e573 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -1812,6 +1812,15 @@ namespace {
Inherited::VisitImplicitCastExpr(E);
}
+ void VisitMemberExpr(MemberExpr *E) {
+ // Skip X in X->A if A is static method (PR 13127)
+ CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(E->getMemberDecl());
+ if (MD && MD->isStatic())
+ return;
+
+ Inherited::VisitMemberExpr(E);
+ }
+
void VisitCXXMemberCallExpr(CXXMemberCallExpr *E) {
Expr *Callee = E->getCallee();
if (isa<MemberExpr>(Callee))
diff --git a/test/SemaCXX/uninitialized.cpp b/test/SemaCXX/uninitialized.cpp
index f55f10f..28b7299 100644
--- a/test/SemaCXX/uninitialized.cpp
+++ b/test/SemaCXX/uninitialized.cpp
@@ -496,3 +496,20 @@ namespace references {
int &b;
};
}
+
+namespace PR13127 {
+ struct S1 {
+ void foo();
+ static S1* bar() { return new S1; }
+ };
+ struct S2 {
+ S1 *d;
+ S2() : d(d->bar()) // No-warning.
+ {}
+ };
+ void func() {
+ S1 *s; // expected-note {{initialize the variable 's' to silence this warning}}
+ s->foo(); // expected-warning {{variable 's' is uninitialized when used here}}
+ s->bar(); // No-warning.
+ }
+}
--
1.7.9.2
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits