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

Reply via email to