Author: Lu Haocong Date: 2024-01-08T17:24:51+08:00 New Revision: 442f67c8702a792a135d61765909b732827d6bf2
URL: https://github.com/llvm/llvm-project/commit/442f67c8702a792a135d61765909b732827d6bf2 DIFF: https://github.com/llvm/llvm-project/commit/442f67c8702a792a135d61765909b732827d6bf2.diff LOG: [Sema][test] Split format attribute test cases for _Float16 Fixes https://github.com/llvm/llvm-project/pull/74439#issuecomment-1880528376 Added: clang/test/Sema/attr-format-Float16.c clang/test/SemaCXX/attr-format-Float16.cpp Modified: clang/test/Sema/attr-format.c clang/test/SemaCXX/attr-format.cpp clang/test/SemaCXX/format-strings-scanf.cpp Removed: ################################################################################ diff --git a/clang/test/Sema/attr-format-Float16.c b/clang/test/Sema/attr-format-Float16.c new file mode 100644 index 00000000000000..6c3dfe14cec3c7 --- /dev/null +++ b/clang/test/Sema/attr-format-Float16.c @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-pc -target-feature +sse2 %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-linux-pc %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple spir-unknown-unknown %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple armv7a-linux-gnu %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple aarch64-linux-gnu %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple riscv32 %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple riscv64 %s + +void a(const char *a, ...) __attribute__((format(printf, 1, 2))); // no-error + +void b(char *a, _Float16 b) __attribute__((format(printf, 1, 2))); // expected-warning {{GCC requires a function with the 'format' attribute to be variadic}} + +void call_no_default_promotion(void) { + a("%f", (_Float16)1.0); // expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} + b("%f", (_Float16)1.0); // expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} +} diff --git a/clang/test/Sema/attr-format.c b/clang/test/Sema/attr-format.c index bdfd8425c4e9a5..1f4c864d4f78bd 100644 --- a/clang/test/Sema/attr-format.c +++ b/clang/test/Sema/attr-format.c @@ -16,8 +16,6 @@ typedef const char *xpto; void j(xpto c, va_list list) __attribute__((format(printf, 1, 0))); // no-error void k(xpto c) __attribute__((format(printf, 1, 0))); // no-error -void l(char *a, _Float16 b) __attribute__((format(printf, 1, 2))); // expected-warning {{GCC requires a function with the 'format' attribute to be variadic}} - void y(char *str) __attribute__((format(strftime, 1, 0))); // no-error void z(char *str, int c, ...) __attribute__((format(strftime, 1, 2))); // expected-error {{strftime format attribute requires 3rd parameter to be 0}} @@ -95,11 +93,6 @@ void call_nonvariadic(void) { d3("%s", 123); // expected-warning{{format specifies type 'char *' but the argument has type 'int'}} } -void call_no_default_promotion(void) { - a("%f", (_Float16)1.0); // expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} - l("%f", (_Float16)1.0); // expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} -} - __attribute__((format(printf, 1, 2))) void forward_fixed(const char *fmt, _Bool b, char i, short j, int k, float l, double m) { // expected-warning{{GCC requires a function with the 'format' attribute to be variadic}} forward_fixed(fmt, b, i, j, k, l, m); diff --git a/clang/test/SemaCXX/attr-format-Float16.cpp b/clang/test/SemaCXX/attr-format-Float16.cpp new file mode 100644 index 00000000000000..c61611d6b6a049 --- /dev/null +++ b/clang/test/SemaCXX/attr-format-Float16.cpp @@ -0,0 +1,24 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -triple i686-linux-pc -target-feature +sse2 %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple x86_64-linux-pc %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple spir-unknown-unknown %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple armv7a-linux-gnu %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple aarch64-linux-gnu %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple riscv32 %s +// RUN: %clang_cc1 -fsyntax-only -verify -triple riscv64 %s + +template <typename... Args> +__attribute__((format(printf, 1, 2))) +void format(const char *fmt, Args &&...args); // expected-warning{{GCC requires a function with the 'format' attribute to be variadic}} + +template<typename... Args> +__attribute__((format(scanf, 1, 2))) +int scan(const char *fmt, Args &&...args); // expected-warning{{GCC requires a function with the 'format' attribute to be variadic}} + +void do_format() { + format("%f", (_Float16)123.f); // expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} + + _Float16 Float16; + scan("%f", &Float16); // expected-warning{{format specifies type 'float *' but the argument has type '_Float16 *'}} + scan("%lf", &Float16); // expected-warning{{format specifies type 'double *' but the argument has type '_Float16 *'}} + scan("%Lf", &Float16); // expected-warning{{format specifies type 'long double *' but the argument has type '_Float16 *'}} +} diff --git a/clang/test/SemaCXX/attr-format.cpp b/clang/test/SemaCXX/attr-format.cpp index 4509c3a95e8efa..adc05fc46776ca 100644 --- a/clang/test/SemaCXX/attr-format.cpp +++ b/clang/test/SemaCXX/attr-format.cpp @@ -81,7 +81,6 @@ void do_format() { format("%c %c %hhd %hd %d\n", (char)'a', 'a', 'a', (short)123, (int)123); format("%f %f %f\n", (__fp16)123.f, 123.f, 123.); - format("%f", (_Float16)123.f);// expected-warning{{format specifies type 'double' but the argument has type '_Float16'}} format("%Lf", (__fp16)123.f); // expected-warning{{format specifies type 'long double' but the argument has type '__fp16'}} format("%Lf", 123.f); // expected-warning{{format specifies type 'long double' but the argument has type 'float'}} format("%hhi %hhu %hi %hu %i %u", b, b, b, b, b, b); diff --git a/clang/test/SemaCXX/format-strings-scanf.cpp b/clang/test/SemaCXX/format-strings-scanf.cpp index 406c2069e28ca7..25fe5346791a0d 100644 --- a/clang/test/SemaCXX/format-strings-scanf.cpp +++ b/clang/test/SemaCXX/format-strings-scanf.cpp @@ -22,7 +22,6 @@ union bag { unsigned long long ull; signed long long sll; __fp16 f16; - _Float16 Float16; float ff; double fd; long double fl; @@ -52,21 +51,18 @@ void test(void) { // expected-warning@+1{{format specifies type 'int *' but the argument has type 'short *'}} scan("%hhi %i %li", &b.ss, &b.ss, &b.ss); - // expected-warning@+4{{format specifies type 'float *' but the argument has type '__fp16 *'}} - // expected-warning@+3{{format specifies type 'float *' but the argument has type '_Float16 *'}} + // expected-warning@+3{{format specifies type 'float *' but the argument has type '__fp16 *'}} // expected-warning@+2{{format specifies type 'float *' but the argument has type 'double *'}} // expected-warning@+1{{format specifies type 'float *' but the argument has type 'long double *'}} - scan("%f %f %f %f", &b.f16, &b.Float16, &b.fd, &b.fl); + scan("%f %f %f", &b.f16, &b.fd, &b.fl); - // expected-warning@+4{{format specifies type 'double *' but the argument has type '__fp16 *'}} - // expected-warning@+3{{format specifies type 'double *' but the argument has type '_Float16 *'}} + // expected-warning@+3{{format specifies type 'double *' but the argument has type '__fp16 *'}} // expected-warning@+2{{format specifies type 'double *' but the argument has type 'float *'}} // expected-warning@+1{{format specifies type 'double *' but the argument has type 'long double *'}} - scan("%lf %lf %lf %lf", &b.f16, &b.Float16, &b.ff, &b.fl); + scan("%lf %lf %lf", &b.f16, &b.ff, &b.fl); - // expected-warning@+4{{format specifies type 'long double *' but the argument has type '__fp16 *'}} - // expected-warning@+3{{format specifies type 'long double *' but the argument has type '_Float16 *'}} + // expected-warning@+3{{format specifies type 'long double *' but the argument has type '__fp16 *'}} // expected-warning@+2{{format specifies type 'long double *' but the argument has type 'float *'}} // expected-warning@+1{{format specifies type 'long double *' but the argument has type 'double *'}} - scan("%Lf %Lf %Lf %Lf", &b.f16, &b.Float16, &b.ff, &b.fd); + scan("%Lf %Lf %Lf", &b.f16, &b.ff, &b.fd); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits