This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/85248] [6/7/8 Regression] Miscompilation when using error function that returns
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 06 Apr 2018 11:33:02 +0000
- Subject: [Bug lto/85248] [6/7/8 Regression] Miscompilation when using error function that returns
- Auto-submitted: auto-generated
- References: <bug-85248-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85248
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
CC| |rguenth at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think the issue is:
extern void __error_noreturn (int __status, int __errnum, const char *__format,
...) __asm__ ("" "error")
__attribute__ ((__noreturn__, __format__ (__printf__, 3, 4)));
and
extern __inline __attribute__ ((__always_inline__)) __attribute__
((__gnu_inline__)) void
error (int __status, int __errnum, const char *__format, ...)
{
if (__builtin_constant_p (__status) && __status != 0)
__error_noreturn (__status, __errnum, __format, __builtin_va_arg_pack ());
else
__error_alias (__status, __errnum, __format, __builtin_va_arg_pack ());
}
and LTO ending up with
main (int argc)
{
int D.4004;
int _1;
int _4;
<bb 2> [100.00%]:
_4 = 0;
_5 = _4;
_1 = _5;
if (_1 != 0)
goto <bb 3>; [0.04%]
else
goto <bb 4>; [99.96%]
<bb 3> [0.04%]:
__error_noreturn (1, 0, "usage\n");
<bb 4> [99.96%]:
__error_noreturn (0, 1, "");
seemingly with bogus expansion and/or alias resolving.