1 /* PR c/80619 - bad fix-it hint for GCC %lu directive with int argument: %wu
2    { dg-do compile }
3    { dg-options "-Wall -fdiagnostics-show-caret" } */
4 
5 void T (const char*, ...) __attribute__ ((format (__gcc_diag__, 1, 2)));
6 
test_suggested_modifier(void)7 void test_suggested_modifier (void)
8 {
9   T ("%ld", 0);     // { dg-warning "format '%ld' expects argument of type 'long int', but argument 2 has type 'int'" }
10   /* { dg-begin-multiline-output "" }
11    T ("%ld", 0);
12        ~~^   ~
13          |   |
14          |   int
15          long int
16        %d
17    { dg-end-multiline-output "" } */
18 
19   T ("%li", 0);     // { dg-warning "format '%li' expects argument of type 'long int', but argument 2 has type 'int'" }
20   /* { dg-begin-multiline-output "" }
21    T ("%li", 0);
22        ~~^   ~
23          |   |
24          |   int
25          long int
26        %i
27        { dg-end-multiline-output "" } */
28 
29   T ("%lu", 0);     // { dg-warning "format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'int'" }
30   /* { dg-begin-multiline-output "" }
31    T ("%lu", 0);
32        ~~^   ~
33          |   |
34          |   int
35          long unsigned int
36        %u
37        { dg-end-multiline-output "" } */
38 
39   T ("%lx", 0);     // { dg-warning "format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'int'" }
40   /* { dg-begin-multiline-output "" }
41    T ("%lx", 0);
42        ~~^   ~
43          |   |
44          |   int
45          long unsigned int
46        %x
47        { dg-end-multiline-output "" } */
48 
49   T ("%lli", 0);    // { dg-warning "format '%lli' expects argument of type 'long long int', but argument 2 has type 'int'" }
50   /* { dg-begin-multiline-output "" }
51    T ("%lli", 0);
52        ~~~^   ~
53           |   |
54           |   int
55           long long int
56        %i
57        { dg-end-multiline-output "" } */
58 
59   T ("%llo", 0);    // { dg-warning "format '%llo' expects argument of type 'long long unsigned int', but argument 2 has type 'int'" }
60   /* { dg-begin-multiline-output "" }
61    T ("%llo", 0);
62        ~~~^   ~
63           |   |
64           |   int
65           long long unsigned int
66        %o
67        { dg-end-multiline-output "" } */
68 
69   T ("%llu", 0);    // { dg-warning "format '%llu' expects argument of type 'long long unsigned int', but argument 2 has type 'int'" }
70   /* { dg-begin-multiline-output "" }
71    T ("%llu", 0);
72        ~~~^   ~
73           |   |
74           |   int
75           long long unsigned int
76        %u
77        { dg-end-multiline-output "" } */
78 
79   T ("%llx", 0);    // { dg-warning "format '%llx' expects argument of type 'long long unsigned int', but argument 2 has type 'int'" }
80   /* { dg-begin-multiline-output "" }
81    T ("%llx", 0);
82        ~~~^   ~
83           |   |
84           |   int
85           long long unsigned int
86        %x
87        { dg-end-multiline-output "" } */
88 }
89 
90