Bug 51762 - [4.7 Regression] ICE in maybe_record_trace_start, at dwarf2cfi.c:2231
Summary: [4.7 Regression] ICE in maybe_record_trace_start, at dwarf2cfi.c:2231
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: debug (show other bugs)
Version: 4.7.0
: P3 normal
Target Milestone: 4.7.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2012-01-05 11:05 UTC by Richard Biener
Modified: 2012-01-05 20:50 UTC (History)
2 users (show)

See Also:
Host:
Target: i?86-*-*
Build:
Known to work:
Known to fail:
Last reconfirmed: 2012-01-05 00:00:00


Attachments
preprocessed source (3.83 KB, application/octet-stream)
2012-01-05 11:05 UTC, Richard Biener
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Richard Biener 2012-01-05 11:05:34 UTC
Created attachment 26248 [details]
preprocessed source

Building trustedgrub reveals:

> ./cc1 -quiet -m32 stage1_5.i -g -Os -fomit-frame-pointer  -fno-asynchronous-unwind-tables
stage1_5.c: In function 'cmain':
stage1_5.c:69:1: internal compiler error: in maybe_record_trace_start, at dwarf2cfi.c:2231
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
Comment 1 Jakub Jelinek 2012-01-05 12:30:17 UTC
/* PR debug/51762 */
/* { dg-do compile } */
/* { dg-options "-g -Os -fomit-frame-pointer -fno-asynchronous-unwind-tables" } */

void noret (void) __attribute__ ((noreturn));
int bar (void);
void baz (const char *);
static int v = -1;

void
foo (void)
{
  if (bar () && v == -1)
    {
      baz ("baz");
      noret ();
    }
  noret ();
}

Started with
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176705
Comment 2 Jakub Jelinek 2012-01-05 12:58:11 UTC
Seems cross-jumping during csa pass cross-jumps the two noret calls, eventhough they have different args size depths.
Comment 3 Jakub Jelinek 2012-01-05 20:47:19 UTC
Author: jakub
Date: Thu Jan  5 20:47:16 2012
New Revision: 182924

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=182924
Log:
	PR debug/51762
	* calls.c (emit_call_1): For noreturn calls force a REG_ARGS_SIZE
	note when !ACCUMULATE_OUTGOING_ARGS.

	* gcc.dg/pr51762.c: New test.

Added:
    trunk/gcc/testsuite/gcc.dg/pr51762.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/calls.c
    trunk/gcc/testsuite/ChangeLog
Comment 4 Jakub Jelinek 2012-01-05 20:50:41 UTC
Fixed.