diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c05ea54fe74..8798d948e1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-01-23 Martin Sebor + + * gcc.dg/tree-ssa/builtin-sprintf.c: Add test cases. + 2017-01-23 Richard Biener PR tree-optimization/79088 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c index a3a467cb039..fd0f28f9dc1 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf.c @@ -773,6 +773,34 @@ test_s (int i) RNG ( 3, 6, 7, "%-s", i ? "123" : "123456"); } +static void __attribute__ ((noinline, noclone)) +test_n (void) +{ + int n; + EQL ( 0, 1, "%n", &n); + EQL ( 1, 2, "1%n", &n); + EQL ( 2, 3, "12%n", &n); + EQL ( 3, 4, "12%n3", &n); + EQL ( 4, 5, "12%n34", &n); + EQL ( 4, 5, "12%n34%n", &n, &n); + EQL ( 5, 6, "12%n34%n5", &n, &n); + EQL ( 6, 7, "12%n34%n56", &n, &n); + EQL ( 6, 7, "%s%n%s%n%s", "12", &n, "34", &n, "56"); +} + +static void __attribute__ ((noinline, noclone)) +test_percent (void) +{ + /* Provide extra arguments siunce the EQL macro needs at least one. */ + EQL ( 1, 2, "%%", 0); /* { dg-warning "too many arguments" } */ + EQL ( 2, 3, "%%%%", 0); /* { dg-warning "too many arguments" } */ + EQL ( 3, 4, "%%%%%%", 0); /* { dg-warning "too many arguments" } */ + EQL ( 3, 4, "%%%%%%%s", ""); + EQL ( 3, 4, "%%%%%s%%", ""); + EQL ( 3, 4, "%%%s%%%%", ""); + EQL ( 3, 4, "%s%%%%%%", ""); +} + int main (void) { test_c ('?'); @@ -791,6 +819,10 @@ int main (void) test_s (0); + test_n (); + + test_percent (); + if (nfails) { __builtin_printf ("%u out of %u tests failed\n", nfails, ntests);