Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/warn-sprintf-no-nul-3.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/warn-sprintf-no-nul-3.c Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,71 @@ +/* PR tree-optimization/87756 - missing unterminated argument warning + using address of a constant character + { dg-do compile } + { dg-options "-O2 -Wall -ftrack-macro-expansion=0" } */ + +typedef __WCHAR_TYPE__ wchar_t; + +int sprintf (char*, const char*, ...); + +extern char* dest (void); +extern void sink (int, ...); + +#define D dest () +#define T(expr) sink (0, (expr)) + +const wchar_t wnul = L'\0'; +const wchar_t wnonul = L'a'; +const wchar_t wcs3[] = L"123"; + +const struct +{ + wchar_t a, b, s[3]; +} w1 = { L'\0', L'b', L"123" }, + w2[2] = { + { L'\0', L'c', L"12" }, + { L'd', L'\0', L"123" } + }; + +void test_sprintf_ls (void) +{ + T (sprintf (D, "%ls", &wnul)); + T (sprintf (D, "%ls", &wnonul)); /* { dg-warning "nul-terminated" } */ + T (sprintf (D, "%.1ls", &wnonul)); + T (sprintf (D, "%.2ls", &wnonul)); /* { dg-warning "nul-terminated" } */ + + T (sprintf (D, "%ls", &w1.a)); + T (sprintf (D, "%ls", &w1.b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%.1ls", &w1.b)); + T (sprintf (D, "%.2ls", &w1.b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%ls", w1.s)); /* { dg-warning "nul-terminated" } */ + T (sprintf (D, "%.3ls", w1.s)); + T (sprintf (D, "%.4ls", w1.s)); /* { dg-warning "nul-terminated" } */ + + T (sprintf (D, "%.2ls", w1.s + 1)); + T (sprintf (D, "%.3ls", w1.s + 1)); /* { dg-warning "nul-terminated" } */ + + T (sprintf (D, "%ls", &w2[0].a)); + T (sprintf (D, "%ls", &w2[0].b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%.1ls", &w2[0].b)); + T (sprintf (D, "%.2ls", &w2[0].b)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%ls", w2[0].s)); + T (sprintf (D, "%.3ls", w2[0].s)); + T (sprintf (D, "%.4ls", w2[0].s)); + + T (sprintf (D, "%.2ls", w2[0].s + 1)); + T (sprintf (D, "%.3ls", w2[0].s + 1)); + + T (sprintf (D, "%ls", &w2[1].a)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%.1ls", &w2[1].a)); + T (sprintf (D, "%.2ls", &w2[1].a)); /* { dg-warning "nul-terminated" "pr88211" { xfail *-*-* } } */ + T (sprintf (D, "%ls", &w2[1].b)); + T (sprintf (D, "%ls", w2[1].s)); /* { dg-warning "nul-terminated" } */ + T (sprintf (D, "%.3ls", w2[1].s)); + T (sprintf (D, "%.4ls", w2[1].s)); /* { dg-warning "nul-terminated" } */ + + T (sprintf (D, "%.2ls", w2[1].s + 1)); + T (sprintf (D, "%.3ls", w2[1].s + 1));/* { dg-warning "nul-terminated" } */ + + T (sprintf (D, "%ls", &wcs3[3])); + T (sprintf (D, "%ls", &wcs3[4])); /* { dg-warning "\\\[-Warray-bounds" } */ +}