[clang] 442f67c - [Sema][test] Split format attribute test cases for _Float16

Lu Haocong via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 8 01:31:03 PST 2024


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 at +1{{format specifies type 'int *' but the argument has type 'short *'}}
     scan("%hhi %i %li", &b.ss, &b.ss, &b.ss);
 
-    // expected-warning at +4{{format specifies type 'float *' but the argument has type '__fp16 *'}}
-    // expected-warning at +3{{format specifies type 'float *' but the argument has type '_Float16 *'}}
+    // expected-warning at +3{{format specifies type 'float *' but the argument has type '__fp16 *'}}
     // expected-warning at +2{{format specifies type 'float *' but the argument has type 'double *'}}
     // expected-warning at +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 at +4{{format specifies type 'double *' but the argument has type '__fp16 *'}}
-    // expected-warning at +3{{format specifies type 'double *' but the argument has type '_Float16 *'}}
+    // expected-warning at +3{{format specifies type 'double *' but the argument has type '__fp16 *'}}
     // expected-warning at +2{{format specifies type 'double *' but the argument has type 'float *'}}
     // expected-warning at +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 at +4{{format specifies type 'long double *' but the argument has type '__fp16 *'}}
-    // expected-warning at +3{{format specifies type 'long double *' but the argument has type '_Float16 *'}}
+    // expected-warning at +3{{format specifies type 'long double *' but the argument has type '__fp16 *'}}
     // expected-warning at +2{{format specifies type 'long double *' but the argument has type 'float *'}}
     // expected-warning at +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);
 }


        


More information about the cfe-commits mailing list