diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Sema/format-strings.c | 5 | ||||
-rw-r--r-- | clang/test/SemaOpenCL/printf-format-strings.cl | 34 |
2 files changed, 39 insertions, 0 deletions
diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c index 5cfa5b4747a..a9af8ce5dee 100644 --- a/clang/test/Sema/format-strings.c +++ b/clang/test/Sema/format-strings.c @@ -613,6 +613,11 @@ void pr12761(char c) { printf("%hhx", c); } +void test_opencl_vector_format(int x) { + printf("%v4d", x); // expected-warning{{invalid conversion specifier 'v'}} + printf("%vd", x); // expected-warning{{invalid conversion specifier 'v'}} + printf("%0vd", x); // expected-warning{{invalid conversion specifier 'v'}} +} // Test that we correctly merge the format in both orders. extern void test14_foo(const char *, const char *, ...) diff --git a/clang/test/SemaOpenCL/printf-format-strings.cl b/clang/test/SemaOpenCL/printf-format-strings.cl new file mode 100644 index 00000000000..d5748e18ede --- /dev/null +++ b/clang/test/SemaOpenCL/printf-format-strings.cl @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -cl-std=CL1.2 -fsyntax-only -verify %s + +typedef __attribute__((ext_vector_type(2))) float float2; +typedef __attribute__((ext_vector_type(4))) float float4; +typedef __attribute__((ext_vector_type(4))) int int4; + +int printf(__constant const char* st, ...) __attribute__((format(printf, 1, 2))); + +kernel void format_v4f32(float4 arg) +{ + printf("%v4f\n", arg); // expected-no-diagnostics +} + +kernel void format_v4f32_wrong_num_elts(float2 arg) +{ + printf("%v4f\n", arg); // expected-no-diagnostics +} + +kernel void vector_precision_modifier_v4f32(float4 arg) +{ + printf("%.2v4f\n", arg); // expected-no-diagnostics +} + +// FIXME: This should warn +kernel void format_missing_num_elts(float4 arg) +{ + printf("%vf\n", arg); // expected-no-diagnostics +} + +// FIXME: This should warn +kernel void vector_precision_modifier_v4i32(int4 arg) +{ + printf("%.2v4f\n", arg); // expected-no-diagnostics +} |