summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/FixIt/format.m4
-rw-r--r--clang/test/Sema/format-strings-enum-fixed-type.cpp8
-rw-r--r--clang/test/Sema/format-strings-pedantic.c10
-rw-r--r--clang/test/Sema/format-strings.c4
4 files changed, 17 insertions, 9 deletions
diff --git a/clang/test/FixIt/format.m b/clang/test/FixIt/format.m
index 40655a0e808..ef27b1bac35 100644
--- a/clang/test/FixIt/format.m
+++ b/clang/test/FixIt/format.m
@@ -205,9 +205,7 @@ void test_percent_C() {
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:11-[[@LINE-1]]:13}:"%f"
// CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-2]]:16-[[@LINE-2]]:16}:"(unichar)"
- NSLog(@"%C", (char)0x260300); // expected-warning{{format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'char'}}
- // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:11-[[@LINE-1]]:13}:"%c"
- // CHECK-NOT: fix-it:"{{.*}}":{[[@LINE-2]]:16-[[@LINE-2]]:22}:"(unichar)"
+ NSLog(@"%C", (char)0x260300);
NSLog(@"%C", 'a'); // expected-warning{{format specifies type 'unichar' (aka 'unsigned short') but the argument has type 'char'}}
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:11-[[@LINE-1]]:13}:"%c"
diff --git a/clang/test/Sema/format-strings-enum-fixed-type.cpp b/clang/test/Sema/format-strings-enum-fixed-type.cpp
index 0022ccbc66b..de22f093780 100644
--- a/clang/test/Sema/format-strings-enum-fixed-type.cpp
+++ b/clang/test/Sema/format-strings-enum-fixed-type.cpp
@@ -79,10 +79,10 @@ void testChar(CharEnum input) {
printf("%hhd", input); // no-warning
printf("%hhd", CharConstant); // no-warning
- // This is not correct but it is safe. We warn because '%hd' shows intent.
- printf("%hd", input); // expected-warning{{format specifies type 'short' but the argument has underlying type 'char'}}
- printf("%hd", CharConstant); // expected-warning{{format specifies type 'short'}}
-
+ // This is not correct, but it is safe. Only warned in pedantic mode because '%hd' shows intent.
+ printf("%hd", input);
+ printf("%hd", CharConstant);
+
// This is not correct but it matches the promotion rules (and is safe).
printf("%d", input); // no-warning
printf("%d", CharConstant); // no-warning
diff --git a/clang/test/Sema/format-strings-pedantic.c b/clang/test/Sema/format-strings-pedantic.c
new file mode 100644
index 00000000000..8fb298ab799
--- /dev/null
+++ b/clang/test/Sema/format-strings-pedantic.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -Wformat -Wformat-pedantic -isystem %S/Inputs %s
+
+int printf(const char *restrict, ...);
+
+typedef unsigned char uint8_t;
+
+void print_char_as_short() {
+ printf("%hu\n", (unsigned char)1); // expected-warning{{format specifies type 'unsigned short' but the argument has type 'unsigned char'}}
+ printf("%hu\n", (uint8_t)1); // expected-warning{{format specifies type 'unsigned short' but the argument has type 'uint8_t' (aka 'unsigned char')}}
+}
diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c
index 45bf26053a9..11acfcd1b9a 100644
--- a/clang/test/Sema/format-strings.c
+++ b/clang/test/Sema/format-strings.c
@@ -277,8 +277,8 @@ typedef unsigned char uint8_t;
void should_understand_small_integers() {
printf("%hhu", (short) 10); // expected-warning{{format specifies type 'unsigned char' but the argument has type 'short'}}
- printf("%hu\n", (unsigned char) 1); // expected-warning{{format specifies type 'unsigned short' but the argument has type 'unsigned char'}}
- printf("%hu\n", (uint8_t)1); // expected-warning{{format specifies type 'unsigned short' but the argument has type 'uint8_t'}}
+ printf("%hu\n", (unsigned char)1); // warning with -Wformat-pedantic only
+ printf("%hu\n", (uint8_t)1); // warning with -Wformat-pedantic only
}
void test11(void *p, char *s) {
OpenPOWER on IntegriCloud