| /* PR tree-optimization/83198 */ |
| /* { dg-do compile { target __float128 } } */ |
| /* { dg-options "-O2 -fprintf-return-value -Wno-format -fdump-tree-optimized" } */ |
| /* { dg-add-options __float128 } */ |
| |
| void bar (void); |
| void link_error (void); |
| |
| void |
| foo (char *x, double y) |
| { |
| /* The expected result should not be constant but rather that |
| of the %f directive with an unknown argument, i.e., at least |
| [3, 317] (but in reality [3, 322] when taking into account |
| that the decimal point can be up to MB_LEN_MAX bytes long). */ |
| int a = __builtin_sprintf (x, "%f", 1.0Q); |
| if (a < 3) |
| link_error (); |
| if (a > 13) |
| bar (); |
| if (a > 322) |
| link_error (); |
| } |
| |
| /* Verify we don't optimize return value to [3, 13]. */ |
| /* { dg-final { scan-tree-dump-not "link_error \\(\\);" "optimized" } } */ |
| /* { dg-final { scan-tree-dump "bar \\(\\);" "optimized" } } */ |