| /* PR tree-optimization/79691 - -Wformat-truncation suppressed by |
| (and only by) -Og |
| |
| { dg-do compile } |
| { dg-options "-Og -Wall -fdump-tree-optimized" } */ |
| |
| char d[2]; |
| |
| /* Verify -Wformat-overflow works. */ |
| void f1 (void) |
| { |
| __builtin_sprintf (d, "%i", 123); /* { dg-warning "directive writing 3 bytes" } */ |
| } |
| |
| /* Verify -Wformat-truncation works. */ |
| void f2 (void) |
| { |
| __builtin_snprintf (d, sizeof d, "%i", 1234); /* { dg-warning "output truncated writing 4 bytes" } */ |
| } |
| |
| /* Verify -fprintf-return-value works. */ |
| int f3 (void) |
| { |
| return __builtin_snprintf (0, 0, "%i", 12345); |
| } |
| |
| /* Verify -fprintf-return-value results used for constant propagation. */ |
| int f4 (int i) |
| { |
| int n1 = __builtin_snprintf (0, 0, "%i", 1234); |
| int n2 = __builtin_snprintf (0, 0, "%i", 12345); |
| return n1 + n2; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "sprintf" 1 "optimized" } } |
| { dg-final { scan-tree-dump-times "snprintf" 1 "optimized" } } |
| { dg-final { scan-tree-dump " = 9;" "optimized" } } */ |