summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2011-08-17 09:34:37 +0000
committerChandler Carruth <chandlerc@gmail.com>2011-08-17 09:34:37 +0000
commite2669397f1cfd2b444bef9c6ab875367e0a63d75 (patch)
treec5dc4c6f084eec67a2d9008d11a720c9989eb6d6 /clang/test
parent29027b9352c418d93e42dd029a77d6c41a7db552 (diff)
downloadbcm5719-llvm-e2669397f1cfd2b444bef9c6ab875367e0a63d75.tar.gz
bcm5719-llvm-e2669397f1cfd2b444bef9c6ab875367e0a63d75.zip
Treating the unused equality comparisons as something other than part of
-Wunused was a mistake. It resulted in duplicate warnings and lots of other hacks. Instead, this should be a special sub-category to -Wunused-value, much like -Wunused-result is. Moved to -Wunused-comparison, moved the implementation to piggy back on the -Wunused-value implementation instead of rolling its own, different mechanism for catching all of the "interesting" statements. I like the unused-value mechanism for this better, but its currently missing several top-level statements. For now, I've FIXME-ed out those test cases. I'll enhance the generic infrastructure to catch these statements in a subsequent patch. This patch also removes the cast-to-void fixit hint. This hint isn't available on any of the other -Wunused-value diagnostics, and if we want it to be, we should add it generically rather than in one specific case. llvm-svn: 137822
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Sema/unused-expr.c20
-rw-r--r--clang/test/SemaCXX/warn-top-level-comparison.cpp92
-rw-r--r--clang/test/SemaCXX/warn-unused-comparison.cpp72
-rw-r--r--clang/test/SemaTemplate/resolve-single-template-id.cpp10
4 files changed, 88 insertions, 106 deletions
diff --git a/clang/test/Sema/unused-expr.c b/clang/test/Sema/unused-expr.c
index 9949887b23e..97611168f1a 100644
--- a/clang/test/Sema/unused-expr.c
+++ b/clang/test/Sema/unused-expr.c
@@ -7,11 +7,11 @@ double sqrt(double X); // implicitly const because of no -fmath-errno!
void bar(volatile int *VP, int *P, int A,
_Complex double C, volatile _Complex double VC) {
- VP == P; // expected-warning {{expression result unused}}
+ VP < P; // expected-warning {{expression result unused}}
(void)A;
(void)foo(1,2); // no warning.
- A == foo(1, 2); // expected-warning {{expression result unused}}
+ A < foo(1, 2); // expected-warning {{expression result unused}}
foo(1,2)+foo(4,3); // expected-warning {{expression result unused}}
@@ -54,23 +54,23 @@ void t4(int a) {
int b = 0;
if (a)
- b == 1; // expected-warning{{expression result unused}}
+ b < 1; // expected-warning{{expression result unused}}
else
- b == 2; // expected-warning{{expression result unused}}
+ b < 2; // expected-warning{{expression result unused}}
while (1)
- b == 3; // expected-warning{{expression result unused}}
+ b < 3; // expected-warning{{expression result unused}}
do
- b == 4; // expected-warning{{expression result unused}}
+ b < 4; // expected-warning{{expression result unused}}
while (1);
for (;;)
- b == 5; // expected-warning{{expression result unused}}
+ b < 5; // expected-warning{{expression result unused}}
- for (b == 1;;) {} // expected-warning{{expression result unused}}
- for (;b == 1;) {}
- for (;;b == 1) {} // expected-warning{{expression result unused}}
+ for (b < 1;;) {} // expected-warning{{expression result unused}}
+ for (;b < 1;) {}
+ for (;;b < 1) {} // expected-warning{{expression result unused}}
}
// rdar://7186119
diff --git a/clang/test/SemaCXX/warn-top-level-comparison.cpp b/clang/test/SemaCXX/warn-top-level-comparison.cpp
deleted file mode 100644
index dad21aeedc0..00000000000
--- a/clang/test/SemaCXX/warn-top-level-comparison.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -Wtop-level-comparison -Wno-unused %s
-
-struct A {
- bool operator==(const A&);
- bool operator!=(const A&);
- A operator|=(const A&);
- operator bool();
-};
-
-void test() {
- int x, *p;
- A a, b;
-
- x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- x != 7; // expected-warning {{inequality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '|=' to turn this inequality comparison into an or-assignment}}
- 7 == x; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}}
- p == p; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}} \
- // expected-warning {{self-comparison always evaluates to true}}
- a == a; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- a == b; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- a != b; // expected-warning {{inequality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '|=' to turn this inequality comparison into an or-assignment}}
- A() == b; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}}
- if (42) x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- else if (42) x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- else x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- do x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- while (false);
- while (false) x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- for (x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- x == 7; // No warning -- result is used
- x == 7) // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- switch (42) default: x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- switch (42) case 42: x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- switch (42) {
- case 1:
- case 2:
- default:
- case 3:
- case 4:
- x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- }
-
- (void)(x == 7);
- (void)(p == p); // expected-warning {{self-comparison always evaluates to true}}
- { bool b = x == 7; }
-
- { bool b = ({ x == 7; // expected-warning {{equality comparison as an unused top-level statement}} \
- // expected-note {{cast this comparison to void to silence this warning}} \
- // expected-note {{use '=' to turn this equality comparison into an assignment}}
- x == 7; }); } // no warning on the second, its result is used!
-
-#define EQ(x,y) (x) == (y)
- EQ(x, 5);
-#undef EQ
-}
diff --git a/clang/test/SemaCXX/warn-unused-comparison.cpp b/clang/test/SemaCXX/warn-unused-comparison.cpp
new file mode 100644
index 00000000000..79a644cefc0
--- /dev/null
+++ b/clang/test/SemaCXX/warn-unused-comparison.cpp
@@ -0,0 +1,72 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wno-unused -Wunused-comparison %s
+
+struct A {
+ bool operator==(const A&);
+ bool operator!=(const A&);
+ A operator|=(const A&);
+ operator bool();
+};
+
+void test() {
+ int x, *p;
+ A a, b;
+
+ x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ x != 7; // expected-warning {{inequality comparison result unused}} \
+ // expected-note {{use '|=' to turn this inequality comparison into an or-assignment}}
+ 7 == x; // expected-warning {{equality comparison result unused}}
+ p == p; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}} \
+ // expected-warning {{self-comparison always evaluates to true}}
+ a == a; // FIXME: missing-warning {{equality comparison result unused}} \
+ // FIXME: missing-note {{use '=' to turn this equality comparison into an assignment}}
+ a == b; // FIXME: missing-warning {{equality comparison result unused}} \
+ // FIXME: missing-note {{use '=' to turn this equality comparison into an assignment}}
+ a != b; // FIXME: missing-warning {{inequality comparison result unused}} \
+ // FIXME: missing-note {{use '|=' to turn this inequality comparison into an or-assignment}}
+ A() == b; // FIXME: missing-warning {{equality comparison result unused}}
+ if (42) x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ else if (42) x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ else x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ do x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ while (false);
+ while (false) x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ for (x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ x == 7; // No warning -- result is used
+ x == 7) // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ switch (42) default: x == 7; // FIXME: missing-warning {{equality comparison result unused}} \
+ // FIXME: missing-note {{use '=' to turn this equality comparison into an assignment}}
+ switch (42) case 42: x == 7; // FIXME: missing-warning {{equality comparison result unused}} \
+ // FIXME: missing-note {{use '=' to turn this equality comparison into an assignment}}
+ switch (42) {
+ case 1:
+ case 2:
+ default:
+ case 3:
+ case 4:
+ x == 7; // FIXME: missing-warning {{equality comparison result unused}} \
+ // FIXME: missing-note {{use '=' to turn this equality comparison into an assignment}}
+ }
+
+ (void)(x == 7);
+ (void)(p == p); // expected-warning {{self-comparison always evaluates to true}}
+ { bool b = x == 7; }
+
+ { bool b = ({ x == 7; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ x == 7; }); } // no warning on the second, its result is used!
+
+#define EQ(x,y) (x) == (y)
+ EQ(x, 5);
+#undef EQ
+}
diff --git a/clang/test/SemaTemplate/resolve-single-template-id.cpp b/clang/test/SemaTemplate/resolve-single-template-id.cpp
index ef0a7630767..0c4656a8bc1 100644
--- a/clang/test/SemaTemplate/resolve-single-template-id.cpp
+++ b/clang/test/SemaTemplate/resolve-single-template-id.cpp
@@ -44,9 +44,10 @@ int main()
!oneT<int>; // expected-warning {{expression result unused}}
+oneT<int>; // expected-warning {{expression result unused}}
-oneT<int>; //expected-error {{invalid argument type}}
- oneT<int> == 0; // expected-warning {{expression result unused}}
- 0 == oneT<int>; // expected-warning {{expression result unused}}
- 0 != oneT<int>; // expected-warning {{expression result unused}}
+ oneT<int> == 0; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
+ 0 == oneT<int>; // expected-warning {{equality comparison result unused}}
+ 0 != oneT<int>; // expected-warning {{inequality comparison result unused}}
(false ? one : oneT<int>); // expected-warning {{expression result unused}}
void (*p1)(int); p1 = oneT<int>;
@@ -67,7 +68,8 @@ int main()
two < two; //expected-error {{cannot resolve overloaded function 'two' from context}}
twoT<int> < twoT<int>; //expected-error {{cannot resolve overloaded function 'twoT' from context}}
- oneT<int> == 0; // expected-warning {{expression result unused}}
+ oneT<int> == 0; // expected-warning {{equality comparison result unused}} \
+ // expected-note {{use '=' to turn this equality comparison into an assignment}}
}
OpenPOWER on IntegriCloud