[cfe-commits] r126098 - in /cfe/trunk: lib/Sema/SemaStmt.cpp test/SemaCXX/warn-unused-result.cpp test/SemaCXX/warn-unused-variables.cpp

Chandler Carruth chandlerc at gmail.com
Sun Feb 20 16:56:56 PST 2011


Author: chandlerc
Date: Sun Feb 20 18:56:56 2011
New Revision: 126098

URL: http://llvm.org/viewvc/llvm-project?rev=126098&view=rev
Log:
Clean up the tests for warning about unused function results given the
appropriate attribute. Add a bit more testing that finds a pretty bad
regression (since ~forever) in this warning. Fix it with a nice 2 line
change. =]

Added:
    cfe/trunk/test/SemaCXX/warn-unused-result.cpp
Modified:
    cfe/trunk/lib/Sema/SemaStmt.cpp
    cfe/trunk/test/SemaCXX/warn-unused-variables.cpp

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=126098&r1=126097&r2=126098&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Sun Feb 20 18:56:56 2011
@@ -92,6 +92,8 @@
   unsigned DiagID = diag::warn_unused_expr;
   if (const ExprWithCleanups *Temps = dyn_cast<ExprWithCleanups>(E))
     E = Temps->getSubExpr();
+  if (const CXXBindTemporaryExpr *TempExpr = dyn_cast<CXXBindTemporaryExpr>(E))
+    E = TempExpr->getSubExpr();
 
   E = E->IgnoreParenImpCasts();
   if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {

Added: cfe/trunk/test/SemaCXX/warn-unused-result.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-result.cpp?rev=126098&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unused-result.cpp (added)
+++ cfe/trunk/test/SemaCXX/warn-unused-result.cpp Sun Feb 20 18:56:56 2011
@@ -0,0 +1,44 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+int f() __attribute__((warn_unused_result));
+
+struct S {
+  void t() const;
+};
+S g1() __attribute__((warn_unused_result));
+S *g2() __attribute__((warn_unused_result));
+S &g3() __attribute__((warn_unused_result));
+
+void test() {
+  f(); // expected-warning {{ignoring return value}}
+  g1(); // expected-warning {{ignoring return value}}
+  g2(); // expected-warning {{ignoring return value}}
+  g3(); // expected-warning {{ignoring return value}}
+
+  (void)f();
+  (void)g1();
+  (void)g2();
+  (void)g3();
+
+  if (f() == 0) return;
+
+  g1().t();
+  g2()->t();
+  g3().t();
+
+  int i = f();
+  S s1 = g1();
+  S *s2 = g2();
+  S &s3 = g3();
+  const S &s4 = g1();
+}
+
+struct X {
+ int foo() __attribute__((warn_unused_result));
+};
+
+void bah() {
+  X x, *x2;
+  x.foo(); // expected-warning {{ignoring return value}}
+  x2->foo(); // expected-warning {{ignoring return value}}
+}

Modified: cfe/trunk/test/SemaCXX/warn-unused-variables.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unused-variables.cpp?rev=126098&r1=126097&r2=126098&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unused-variables.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-unused-variables.cpp Sun Feb 20 18:56:56 2011
@@ -32,17 +32,6 @@
   }
 }
 
-
-struct X {
- int foo() __attribute__((warn_unused_result));
-};
-
-void bah() {
-  X x, *x2;
-  x.foo(); // expected-warning {{ignoring return value of function declared with warn_unused_result attribute}}
-  x2->foo(); // expected-warning {{ignoring return value of function declared with warn_unused_result attribute}}
-}
-
 template<typename T>
 struct X0 { };
 





More information about the cfe-commits mailing list