Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.dg/format/proto.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* PR c/93812 - ICE on redeclaration of an attribute format function without | |
2 protoype | |
3 It's not clear that attribute format should be accepted on functions | |
4 without a prototype. If it's decided that it shouldn't be the tests | |
5 here will need to be adjusted. | |
6 { dg-do compile } | |
7 { dg-options "-Wall" } */ | |
8 | |
9 #define FMT(n1, n2) __attribute__((__format__(__printf__, n1, n2))) | |
10 | |
11 // Exercise function declarations. | |
12 FMT (1, 2) void print1 (); | |
13 | |
14 FMT (2, 3) void print2 (); | |
15 void print2 (); | |
16 | |
17 FMT (3, 4) void print3 (); | |
18 FMT (3, 4) void print3 (); | |
19 | |
20 FMT (1, 2) void print4 (); | |
21 void print4 (void); // { dg-warning "'format' attribute cannot be applied to a function that does not take variable arguments" } | |
22 | |
23 void print5 (); | |
24 FMT (1, 2) void print5 (void); // { dg-warning "\\\[-Wattributes" } | |
25 | |
26 FMT (1, 2) void print6 (); | |
27 void print6 (const char*, ...); // { dg-error "conflicting types" } | |
28 | |
29 void print7 (const char*, ...); | |
30 FMT (1, 2) void print7 (); // { dg-error "conflicting types" } | |
31 | |
32 | |
33 // Exercise function calls. | |
34 void test_print (void) | |
35 { | |
36 print1 ("%i %s", 123, ""); | |
37 print1 ("%s %i", 123, 123); // { dg-warning "\\\[-Wformat" } | |
38 | |
39 print2 (0, "%s %i", "", 123); | |
40 print2 (1, "%i %s", "", 123); // { dg-warning "\\\[-Wformat" } | |
41 | |
42 print3 (0, 1, "%s %i", "", 123); | |
43 print3 (1, 2, "%i %s", "", 123); // { dg-warning "\\\[-Wformat" } | |
44 | |
45 // Just verify there's no ICE. | |
46 print4 (); | |
47 print5 (); | |
48 print6 ("%i %s", 123, ""); | |
49 } | |
50 | |
51 | |
52 // Exercise declarations of pointers to functions. | |
53 FMT (1, 2) void (*pfprint1)(); | |
54 | |
55 FMT (2, 3) void (*pfprint2)(); | |
56 void (*pfprint2)(); | |
57 | |
58 FMT (3, 4) void (*pfprint3)(); | |
59 FMT (3, 4) void (*pfprint3)(); | |
60 | |
61 FMT (1, 2) void (*pfprint4)(); | |
62 void (*pfprint4)(void); // { dg-warning "'format' attribute cannot be applied to a function that does not take variable arguments" } | |
63 | |
64 void (*pfprint5)(); | |
65 FMT (1, 2) void (*pfprint5)(void); // { dg-warning "\\\[-Wattributes" } | |
66 | |
67 FMT (1, 2) void (*pfprint6)(); | |
68 void (*pfprint6)(const char*, ...); // { dg-error "conflicting types" } | |
69 | |
70 void (*pfprint7)(const char*, ...); | |
71 FMT (1, 2) void (*pfprint7)(); // { dg-error "conflicting types" } | |
72 | |
73 // Exercise calls via function pointers. | |
74 void test_pfprint (void) | |
75 { | |
76 pfprint1 ("%i %s", 123, ""); | |
77 pfprint1 ("%s %i", 123, 123); // { dg-warning "\\\[-Wformat" } | |
78 | |
79 pfprint2 (0, "%s %i", "", 123); | |
80 pfprint2 (1, "%i %s", "", 123); // { dg-warning "\\\[-Wformat" } | |
81 | |
82 pfprint3 (0, 1, "%s %i", "", 123); | |
83 pfprint3 (1, 2, "%i %s", "", 123); // { dg-warning "\\\[-Wformat" } | |
84 | |
85 // Just verify there's no ICE. | |
86 pfprint4 (); | |
87 pfprint5 (); | |
88 pfprint6 ("%i %s", 123, ""); | |
89 } |