int main () { int a = 5, b = 6; int c = __builtin_snprintf (0, 0, "a%nb%nc", &a, &b); if (a + b + c != 6) __builtin_abort (); return 0; } is miscompiled since r242674 at -O2.
Created attachment 40436 [details] gcc7-pr78965.patch Untested fix.
Author: jakub Date: Tue Jan 3 07:23:11 2017 New Revision: 244014 URL: https://gcc.gnu.org/viewcvs?rev=244014&root=gcc&view=rev Log: PR tree-optimization/78965 * gimple-ssa-sprintf.c (pass_sprintf_length::compute_format_length): Change first argument from const call_info & to call_info &. For %n set info.nowrite to false. * gcc.dg/pr78965.c: New test. Added: trunk/gcc/testsuite/gcc.dg/pr78965.c Modified: trunk/gcc/ChangeLog trunk/gcc/gimple-ssa-sprintf.c trunk/gcc/testsuite/ChangeLog
Fixed.