summaryrefslogtreecommitdiff
path: root/test/Sema/unused-expr.c
diff options
context:
space:
mode:
authorMatt Beaumont-Gay <matthewbg@google.com>2013-01-17 02:06:08 +0000
committerMatt Beaumont-Gay <matthewbg@google.com>2013-01-17 02:06:08 +0000
commit87b73ba920f523ef13f2420cbdb958a281aa6f33 (patch)
tree89cf50e0cf548bfc8eb5f7f434cf68e03329a02b /test/Sema/unused-expr.c
parent6987e8d59ca1bde58e90f2df9486679c1943b862 (diff)
downloadclang-87b73ba920f523ef13f2420cbdb958a281aa6f33.tar.gz
Suppress all -Wunused-value warnings from macro body expansions.
This is inspired by a number of false positives in real code, including PR14968. I've added test cases reduced from these false positives to test/Sema/unused-expr.c, as well as corresponding test cases that pass the offending expressions as arguments to a no-op macro to ensure that we do warn there. This also removes my previous tweak from r166522/r166534, so that we warn on unused cast expressions in macro arguments. There were several test cases that were using -Wunused-value to test general diagnostic emission features; I changed those to use other warnings or warn on a macro argument expression. I stared at the test case for PR14399 for a while with Richard Smith and we believe the new test case exercises the same codepaths as before. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172696 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Sema/unused-expr.c')
-rw-r--r--test/Sema/unused-expr.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/test/Sema/unused-expr.c b/test/Sema/unused-expr.c
index aa81febdbb..0786ede676 100644
--- a/test/Sema/unused-expr.c
+++ b/test/Sema/unused-expr.c
@@ -123,13 +123,30 @@ void f(int i, ...) {
// PR8371
int fn5() __attribute__ ((__const));
-// OpenSSL has some macros like this; we shouldn't warn on the cast.
+// Don't warn for unused expressions in macro bodies; however, do warn for
+// unused expressions in macro arguments. Macros below are reduced from code
+// found in the wild.
+#define NOP(a) (a)
#define M1(a, b) (long)foo((a), (b))
-// But, we should still warn on other subexpressions of casts in macros.
#define M2 (long)0;
+#define M3(a) (t3(a), fn2())
+#define M4(a, b) (foo((a), (b)) ? 0 : t3(a), 1)
+#define M5(a, b) (foo((a), (b)), 1)
void t11(int i, int j) {
M1(i, j); // no warning
- M2; // expected-warning {{expression result unused}}
+ NOP((long)foo(i, j)); // expected-warning {{expression result unused}}
+ M2; // no warning
+ NOP((long)0); // expected-warning {{expression result unused}}
+ M3(i); // no warning
+ NOP((t3(i), fn2())); // expected-warning {{ignoring return value}}
+ M4(i, j); // no warning
+ NOP((foo(i, j) ? 0 : t3(i), 1)); // expected-warning {{expression result unused}}
+ M5(i, j); // no warning
+ NOP((foo(i, j), 1)); // expected-warning {{expression result unused}}
}
+#undef NOP
#undef M1
#undef M2
+#undef M3
+#undef M4
+#undef M5