summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-11-09 22:22:12 +0000
committerJohn McCall <rjmccall@apple.com>2010-11-09 22:22:12 +0000
commit18a2c2c0b9d2a9109e2abefed8426bc9ff2d0aab (patch)
tree0e77ba3066c8f9868ba4f89aac6ebf9fb27d7ee9 /clang/test
parentb332ba3a51747cf5f0fad83dda43dc4b42b560de (diff)
downloadbcm5719-llvm-18a2c2c0b9d2a9109e2abefed8426bc9ff2d0aab.tar.gz
bcm5719-llvm-18a2c2c0b9d2a9109e2abefed8426bc9ff2d0aab.zip
Split out -Wconversion warnings about constant precision into their
own subcategory, -Wconstant-conversion, which is on by default. Tweak the constant folder to give better results in the invalid case of a negative shift amount. Implements rdar://problem/6792488 llvm-svn: 118636
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Lexer/constants.c8
-rw-r--r--clang/test/Preprocessor/pushable-diagnostics.c6
-rw-r--r--clang/test/Sema/constant-conversion.c9
-rw-r--r--clang/test/Sema/conversion.c32
4 files changed, 32 insertions, 23 deletions
diff --git a/clang/test/Lexer/constants.c b/clang/test/Lexer/constants.c
index de0962e97d2..3d2da2c764e 100644
--- a/clang/test/Lexer/constants.c
+++ b/clang/test/Lexer/constants.c
@@ -15,7 +15,7 @@ float Y = 08.123456;
#endif
-char c[] = {
+int c[] = {
'df', // expected-warning {{multi-character character constant}}
'\t',
'\\
@@ -34,12 +34,12 @@ int m3 = '\\\
#pragma clang diagnostic ignored "-Wmultichar"
-char d = 'df'; // no warning.
-char e = 'abcd'; // still warn: expected-warning {{multi-character character constant}}
+int d = 'df'; // no warning.
+int e = 'abcd'; // still warn: expected-warning {{multi-character character constant}}
#pragma clang diagnostic ignored "-Wfour-char-constants"
-char f = 'abcd'; // ignored.
+int f = 'abcd'; // ignored.
// rdar://problem/6974641
float t0[] = {
diff --git a/clang/test/Preprocessor/pushable-diagnostics.c b/clang/test/Preprocessor/pushable-diagnostics.c
index 567a866fa33..877eaaa0b36 100644
--- a/clang/test/Preprocessor/pushable-diagnostics.c
+++ b/clang/test/Preprocessor/pushable-diagnostics.c
@@ -4,14 +4,14 @@
#pragma clang diagnostic puhs // expected-warning {{pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'}}
-char a = 'df'; // expected-warning{{multi-character character constant}}
+int a = 'df'; // expected-warning{{multi-character character constant}}
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
-char b = 'df'; // no warning.
+int b = 'df'; // no warning.
#pragma clang diagnostic pop
-char c = 'df'; // expected-warning{{multi-character character constant}}
+int c = 'df'; // expected-warning{{multi-character character constant}}
#pragma clang diagnostic pop // expected-warning{{pragma diagnostic pop could not pop, no matching push}}
diff --git a/clang/test/Sema/constant-conversion.c b/clang/test/Sema/constant-conversion.c
new file mode 100644
index 00000000000..cacd5968dc0
--- /dev/null
+++ b/clang/test/Sema/constant-conversion.c
@@ -0,0 +1,9 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-apple-darwin %s
+
+// This file tests -Wconstant-conversion, a subcategory of -Wconversion
+// which is on by default.
+
+// rdar://problem/6792488
+void test_6792488(void) {
+ int x = 0x3ff0000000000000U; // expected-warning {{implicit conversion from 'unsigned long' to 'int' changes value from 4607182418800017408 to 0}}
+}
diff --git a/clang/test/Sema/conversion.c b/clang/test/Sema/conversion.c
index 411ca32b5a6..e78902332eb 100644
--- a/clang/test/Sema/conversion.c
+++ b/clang/test/Sema/conversion.c
@@ -40,17 +40,17 @@ void test0(char c, short s, int i, long l, long long ll) {
l = (long) 0;
c = (char) BIG;
- c = (short) BIG; // expected-warning {{implicit conversion loses integer precision}}
- c = (int) BIG; // expected-warning {{implicit conversion loses integer precision}}
- c = (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ c = (short) BIG; // expected-warning {{implicit conversion from 'short' to 'char' changes value}}
+ c = (int) BIG; // expected-warning {{implicit conversion from 'int' to 'char' changes value}}
+ c = (long) BIG; // expected-warning {{implicit conversion from 'long' to 'char' changes value}}
s = (char) BIG;
s = (short) BIG;
- s = (int) BIG; // expected-warning {{implicit conversion loses integer precision}}
- s = (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ s = (int) BIG; // expected-warning {{implicit conversion from 'int' to 'short' changes value}}
+ s = (long) BIG; // expected-warning {{implicit conversion from 'long' to 'short' changes value}}
i = (char) BIG;
i = (short) BIG;
i = (int) BIG;
- i = (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ i = (long) BIG; // expected-warning {{implicit conversion from 'long' to 'int' changes value}}
l = (char) BIG;
l = (short) BIG;
l = (int) BIG;
@@ -63,10 +63,10 @@ char test1(long long ll) {
return (int) ll; // expected-warning {{implicit conversion loses integer precision}}
return (short) ll; // expected-warning {{implicit conversion loses integer precision}}
return (char) ll;
- return (long long) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (int) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (short) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ return (long long) BIG; // expected-warning {{implicit conversion from 'long long' to 'char' changes value}}
+ return (long) BIG; // expected-warning {{implicit conversion from 'long' to 'char' changes value}}
+ return (int) BIG; // expected-warning {{implicit conversion from 'int' to 'char' changes value}}
+ return (short) BIG; // expected-warning {{implicit conversion from 'short' to 'char' changes value}}
return (char) BIG;
}
@@ -76,9 +76,9 @@ short test2(long long ll) {
return (int) ll; // expected-warning {{implicit conversion loses integer precision}}
return (short) ll;
return (char) ll;
- return (long long) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (int) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ return (long long) BIG; // expected-warning {{implicit conversion from 'long long' to 'short' changes value}}
+ return (long) BIG; // expected-warning {{implicit conversion from 'long' to 'short' changes value}}
+ return (int) BIG; // expected-warning {{implicit conversion from 'int' to 'short' changes value}}
return (short) BIG;
return (char) BIG;
}
@@ -89,8 +89,8 @@ int test3(long long ll) {
return (int) ll;
return (short) ll;
return (char) ll;
- return (long long) BIG; // expected-warning {{implicit conversion loses integer precision}}
- return (long) BIG; // expected-warning {{implicit conversion loses integer precision}}
+ return (long long) BIG; // expected-warning {{implicit conversion from 'long long' to 'int' changes value}}
+ return (long) BIG; // expected-warning {{implicit conversion from 'long' to 'int' changes value}}
return (int) BIG;
return (short) BIG;
return (char) BIG;
@@ -277,7 +277,7 @@ unsigned char test19(unsigned long u64) {
// <rdar://problem/7631400>
void test_7631400(void) {
// This should show up despite the caret being inside a macro substitution
- char s = LONG_MAX; // expected-warning {{implicit conversion loses integer precision: 'long' to 'char'}}
+ char s = LONG_MAX; // expected-warning {{implicit conversion from 'long' to 'char' changes value}}
}
// <rdar://problem/7676608>: assertion for compound operators with non-integral RHS
OpenPOWER on IntegriCloud