1 /* PR tree-optimization/87756 - missing unterminated argument warning
2 using address of a constant character
4 { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */
6 typedef __WCHAR_TYPE__
wchar_t;
8 int sprintf (char*, const char*, ...);
10 extern char* dest (void);
11 extern void sink (int, ...);
14 #define T(expr) sink (0, (expr))
16 const wchar_t wnul
= L
'\0';
17 const wchar_t wnonul
= L
'a';
18 const wchar_t wcs3
[] = L
"123";
23 } w1
= { L
'\0', L
'b', L
"123" },
25 { L
'\0', L
'c', L
"12" },
26 { L
'd', L
'\0', L
"123" }
29 void test_sprintf_ls (void)
31 T (sprintf (D
, "%ls", &wnul
));
32 T (sprintf (D
, "%ls", &wnonul
)); /* { dg-warning "nul-terminated" } */
33 T (sprintf (D
, "%.1ls", &wnonul
));
34 T (sprintf (D
, "%.2ls", &wnonul
)); /* { dg-warning "nul-terminated" } */
36 T (sprintf (D
, "%ls", &w1
.a
));
37 T (sprintf (D
, "%ls", &w1
.b
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
38 T (sprintf (D
, "%.1ls", &w1
.b
));
39 T (sprintf (D
, "%.2ls", &w1
.b
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
40 T (sprintf (D
, "%ls", w1
.s
)); /* { dg-warning "nul-terminated" } */
41 T (sprintf (D
, "%.3ls", w1
.s
));
42 T (sprintf (D
, "%.4ls", w1
.s
)); /* { dg-warning "nul-terminated" } */
44 T (sprintf (D
, "%.2ls", w1
.s
+ 1));
45 T (sprintf (D
, "%.3ls", w1
.s
+ 1)); /* { dg-warning "nul-terminated" } */
47 T (sprintf (D
, "%ls", &w2
[0].a
));
48 T (sprintf (D
, "%ls", &w2
[0].b
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
49 T (sprintf (D
, "%.1ls", &w2
[0].b
));
50 T (sprintf (D
, "%.2ls", &w2
[0].b
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
51 T (sprintf (D
, "%ls", w2
[0].s
));
52 T (sprintf (D
, "%.3ls", w2
[0].s
));
53 T (sprintf (D
, "%.4ls", w2
[0].s
));
55 T (sprintf (D
, "%.2ls", w2
[0].s
+ 1));
56 T (sprintf (D
, "%.3ls", w2
[0].s
+ 1));
58 T (sprintf (D
, "%ls", &w2
[1].a
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
59 T (sprintf (D
, "%.1ls", &w2
[1].a
));
60 T (sprintf (D
, "%.2ls", &w2
[1].a
)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */
61 T (sprintf (D
, "%ls", &w2
[1].b
));
62 T (sprintf (D
, "%ls", w2
[1].s
)); /* { dg-warning "nul-terminated" } */
63 T (sprintf (D
, "%.3ls", w2
[1].s
));
64 T (sprintf (D
, "%.4ls", w2
[1].s
)); /* { dg-warning "nul-terminated" } */
66 T (sprintf (D
, "%.2ls", w2
[1].s
+ 1));
67 T (sprintf (D
, "%.3ls", w2
[1].s
+ 1));/* { dg-warning "nul-terminated" } */
69 T (sprintf (D
, "%ls", &wcs3
[3]));
70 T (sprintf (D
, "%ls", &wcs3
[4])); /* { dg-warning "\\\[-Warray-bounds" } */