[Bug middle-end/78901] [7 Regression] ICE: verify_gimple failed (error: statement marked for throw in middle of block)
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Dec 23 00:54:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78901
--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 40407
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40407&action=edit
gcc7-pr78901-1.patch
Untested fix. With this snprintf in -std=c++11 and above will be actually
noexcept even if badly declared. But with -std=c++98 snprintf should not be
recognized as a builtin.
The gimple-ssa-sprintf.c changes will be still needed, because:
extern "C" int __snprintf_chk (char *, __SIZE_TYPE__, int, __SIZE_TYPE__, const
char *, ...);
int foo (char *c)
{
try {
return __snprintf_chk (c, 64, 0, 32, "%s", "abcdefghijklmnopq");
} catch (...) { }
}
still ICEs in -std=gnu++14 -O2 mode. That function and other *_chk ones aren't
part of C89/C99/C11 and so if they aren't properly declared noexcept or
nothrow(), we have to consider they might throw.
More information about the Gcc-bugs
mailing list