public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail
@ 2014-03-06 17:03 jamborm at gcc dot gnu.org
  2014-03-06 17:04 ` [Bug lto/60449] " jamborm at gcc dot gnu.org
                   ` (16 more replies)
  0 siblings, 17 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-03-06 17:03 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="UTF-8", Size: 3891 bytes --]

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

            Bug ID: 60449
           Summary: Merging function DECLs discards leaf attribute which
                    causes cfg verifier to fail
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: lto
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jamborm at gcc dot gnu.org

I've come across this verify_flow_info failure when attempting to LTO
build Firefox.  I'm attaching a small testcase (I'm using trunk
revision 208276 on x86-64-linux), to reproduce do:

$ ~/gcc/trunk/inst/bin/gcc -c -O2 -flto gtod1.c 
$ ~/gcc/trunk/inst/bin/gcc -c -O2 -flto gtod2.c
$ ~/gcc/trunk/inst/bin/gcc -O2 -flto gtod1.o gtod2.o 
gtod2.c: In function ‘main’:
gtod2.c:41:5: error: control flow in the middle of basic block 6
 int main (void)
     ^
gtod2.c:41:5: error: control flow in the middle of basic block 6
gtod2.c:41:5: error: control flow in the middle of basic block 6
gtod2.c:41:5: internal compiler error: verify_flow_info failed

The order of .o files in the linking stage is important.

My artificial testcase declares gettimeofday itself, twice, each time
with different attributes on purpose.  When building FF, all
declarations claim to come from /usr/include/sys/time.h, I do not know
why some of them lost or did not get their attributes.

The problem with loosing the leaf attribute is that calls from
function that calls setjmp are considered control flow statements
unless they are without side effects or leaf (see stmt_ends_bb_p,
is_ctrl_altering_stmt and call_can_make_abnormal_goto).  Therefore, if
a leaf attribute is lost, calls to that functions suddenly may need to
break BBs or face the verifiers wrath.
>From gcc-bugs-return-445643-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Thu Mar 06 17:04:15 2014
Return-Path: <gcc-bugs-return-445643-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 30988 invoked by alias); 6 Mar 2014 17:04:15 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 30978 invoked by uid 48); 6 Mar 2014 17:04:12 -0000
From: "jamborm at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
Date: Thu, 06 Mar 2014 17:04:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: lto
X-Bugzilla-Version: 4.9.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: jamborm at gcc dot gnu.org
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: attachments.created
Message-ID: <bug-60449-4-08xe8knbmx@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-60449-4@http.gcc.gnu.org/bugzilla/>
References: <bug-60449-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-03/txt/msg00512.txt.bz2
Content-length: 237

http://gcc.gnu.org/bugzilla/show_bug.cgi?id`449

--- Comment #1 from Martin Jambor <jamborm at gcc dot gnu.org> ---
Created attachment 32289
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id2289&actioníit
Part one of a testcase


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
@ 2014-03-06 17:04 ` jamborm at gcc dot gnu.org
  2014-03-06 17:42 ` trippels at gcc dot gnu.org
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-03-06 17:04 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #2 from Martin Jambor <jamborm at gcc dot gnu.org> ---
Created attachment 32290
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32290&action=edit
Part two of a testcase


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
  2014-03-06 17:04 ` [Bug lto/60449] " jamborm at gcc dot gnu.org
@ 2014-03-06 17:42 ` trippels at gcc dot gnu.org
  2014-03-06 17:47 ` jamborm at gcc dot gnu.org
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-03-06 17:42 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-03-06
                 CC|                            |trippels at gcc dot gnu.org
   Target Milestone|---                         |4.9.0
     Ever confirmed|0                           |1

--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Confirmed.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
  2014-03-06 17:04 ` [Bug lto/60449] " jamborm at gcc dot gnu.org
  2014-03-06 17:42 ` trippels at gcc dot gnu.org
@ 2014-03-06 17:47 ` jamborm at gcc dot gnu.org
  2014-03-07  8:55 ` rguenth at gcc dot gnu.org
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-03-06 17:47 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #4 from Martin Jambor <jamborm at gcc dot gnu.org> ---
Created attachment 32291
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32291&action=edit
Untested proposed fix

Untested proposed fix


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2014-03-06 17:47 ` jamborm at gcc dot gnu.org
@ 2014-03-07  8:55 ` rguenth at gcc dot gnu.org
  2014-03-07  8:56 ` rguenth at gcc dot gnu.org
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-03-07  8:55 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Shouldn't fixup_cfg fix this up?  Simply prefering the decl with attributes
isn't enough if you attach an urelated attribute to both fns as well.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2014-03-07  8:55 ` rguenth at gcc dot gnu.org
@ 2014-03-07  8:56 ` rguenth at gcc dot gnu.org
  2014-03-07 10:07 ` jamborm at gcc dot gnu.org
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-03-07  8:56 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
OTOH, why do we have to merge the decls/cgraph nodes at all?  Can't we simply
make them aliases if tree merging decides the decls are not equal?


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2014-03-07  8:56 ` rguenth at gcc dot gnu.org
@ 2014-03-07 10:07 ` jamborm at gcc dot gnu.org
  2014-04-01 12:29 ` rguenth at gcc dot gnu.org
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-03-07 10:07 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Martin Jambor <jamborm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org

--- Comment #7 from Martin Jambor <jamborm at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #5)
> Shouldn't fixup_cfg fix this up?  Simply prefering the decl with attributes
> isn't enough if you attach an urelated attribute to both fns as well.

Yes, I know.  I did not really mean to call it a "proposed" fix, did
that somewhat automatically.  On the other hand, I am able to slim-LTO
build Firefox with the patch though.

(In reply to Richard Biener from comment #6)
> OTOH, why do we have to merge the decls/cgraph nodes at all?  Can't we simply
> make them aliases if tree merging decides the decls are not equal?

Good idea, this might indeed be the best way to fix this.  (Although I
do not really know what needs to be done to turn a previously proper
decl and its symtab node into an alias.  Honza, do you think it would
be difficult?).


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2014-03-07 10:07 ` jamborm at gcc dot gnu.org
@ 2014-04-01 12:29 ` rguenth at gcc dot gnu.org
  2014-04-01 12:30 ` rguenth at gcc dot gnu.org
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-04-01 12:29 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rguenth at gcc dot gnu.org

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
*** Bug 60721 has been marked as a duplicate of this bug. ***


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2014-04-01 12:29 ` rguenth at gcc dot gnu.org
@ 2014-04-01 12:30 ` rguenth at gcc dot gnu.org
  2014-04-01 12:36 ` rguenth at gcc dot gnu.org
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-04-01 12:30 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #8)
> *** Bug 60721 has been marked as a duplicate of this bug. ***

See there for another proposed fix to retain per-call 'leaf' (well,
no-abnormal-goto) status.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2014-04-01 12:30 ` rguenth at gcc dot gnu.org
@ 2014-04-01 12:36 ` rguenth at gcc dot gnu.org
  2014-04-22 11:35 ` jakub at gcc dot gnu.org
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-04-01 12:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #9)
> (In reply to Richard Biener from comment #8)
> > *** Bug 60721 has been marked as a duplicate of this bug. ***
> 
> See there for another proposed fix to retain per-call 'leaf' (well,
> no-abnormal-goto) status.

Btw, similar to this flag a flag for a per-call 'noreturn' status should
be added as well, getting rid of that MODIFIED_NORETURN_CALLS red herring
on the way (basically defer committing 'noreturn' from a decl to all callers
until a suitable time).  I suppose different 'noreturn' status in LTO units
can also cause a similar issue where a (no longer after merging) noreturn
call ending BB fails to have a fallthru edge.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (8 preceding siblings ...)
  2014-04-01 12:36 ` rguenth at gcc dot gnu.org
@ 2014-04-22 11:35 ` jakub at gcc dot gnu.org
  2014-06-12  8:09 ` mliska at suse dot cz
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-04-22 11:35 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.9.0                       |4.9.1

--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 4.9.0 has been released


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (9 preceding siblings ...)
  2014-04-22 11:35 ` jakub at gcc dot gnu.org
@ 2014-06-12  8:09 ` mliska at suse dot cz
  2014-06-24 14:41 ` jamborm at gcc dot gnu.org
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: mliska at suse dot cz @ 2014-06-12  8:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Martin Liška <mliska at suse dot cz> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mliska at suse dot cz

--- Comment #13 from Martin Liška <mliska at suse dot cz> ---
Same problem can be seen in Chromium. The final binary contains about ~3500
usages of a function with different DECL attributes. Problematic is just one
function:

sigaction/538949 (sigaction) @0x7f0fb8916450
 DECL_ATTR:
sigaction/718813 (sigaction) @0x7f0fb7db58a0
 DECL_ATTR: __leaf__ , __nothrow__ 

Thus, preserving both variants of the function would not increase symtab
significantly.
>From gcc-bugs-return-453737-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Thu Jun 12 08:21:13 2014
Return-Path: <gcc-bugs-return-453737-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 28444 invoked by alias); 12 Jun 2014 08:21:12 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 28427 invoked by uid 55); 12 Jun 2014 08:21:07 -0000
From: "gjl at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/61443] [avr] ICE when varargs argument is indirect addr-space access
Date: Thu, 12 Jun 2014 08:21:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: target
X-Bugzilla-Version: 4.8.0
X-Bugzilla-Keywords: addr-space, ice-on-valid-code
X-Bugzilla-Severity: normal
X-Bugzilla-Who: gjl at gcc dot gnu.org
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields:
Message-ID: <bug-61443-4-BDC1egfwHF@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61443-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61443-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-06/txt/msg00819.txt.bz2
Content-length: 623

https://gcc.gnu.org/bugzilla/show_bug.cgi?ida443

--- Comment #1 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Author: gjl
Date: Thu Jun 12 08:20:35 2014
New Revision: 211491

URL: http://gcc.gnu.org/viewcvs?rev!1491&root=gcc&view=rev
Log:
gcc/
    PR target/61443
    * config/avr/avr.md (push<mode>1): Avoid (subreg(mem)) when
    loading from address spaces.
gcc/testsuite/
    PR target/61443
    * gcc.target/avr/torture/pr61443.c: New test.


Added:
    trunk/gcc/testsuite/gcc.target/avr/torture/pr61443.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/avr/avr.md
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (10 preceding siblings ...)
  2014-06-12  8:09 ` mliska at suse dot cz
@ 2014-06-24 14:41 ` jamborm at gcc dot gnu.org
  2014-07-16 13:26 ` jakub at gcc dot gnu.org
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-06-24 14:41 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Martin Jambor <jamborm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jamborm at gcc dot gnu.org

--- Comment #14 from Martin Jambor <jamborm at gcc dot gnu.org> ---
Created attachment 32997
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=32997&action=edit
RFC patch

After playing around with aliases (of extern symbols) for a while I
decided that any such fix to this problem would be too invasive and
generally terrible.  Therefore, I set out to prepare a patch that
would put the leaf flag into individual gimple call statements and
that would also do what Richi suggested in comment #10, ie. remove
MODIFIED_NORETURN_CALLS by having a noreturn flag in calls too.

I may not get back to this for a while so I'm posting what I've got,
inviting comments on the general direction of the patch, even though
it is not at the submission level yet.  It bootstraps but it
introduces one (yet totally unexamined) asan test failure.  I'm also
worried about the occasional discrepancy between the decl and the call
noreturn flags, it would be nice to make it somehow clearer when to
use what.

I've also started to think that setting both the two new flags lazily
in the cfg cleanup was probably a mistake.  Verifier requires special
treatment when noreturn IS set and when leaf IS NOT set, which means
that the cfg cleanup sometimes must be run even though the cfg has not
actually changed (but a call was re-built) which is weird.
So in the next iteration I'll probably try to set the leaf flag when
building the statement and maintain it from that point on.

But that may not happen until late July.  Meanwhile, almost anyone
bumping into this problem can use the first provisional fix.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (11 preceding siblings ...)
  2014-06-24 14:41 ` jamborm at gcc dot gnu.org
@ 2014-07-16 13:26 ` jakub at gcc dot gnu.org
  2014-08-20 16:47 ` wmi at gcc dot gnu.org
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-07-16 13:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.9.1                       |4.9.2

--- Comment #15 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 4.9.1 has been released.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (12 preceding siblings ...)
  2014-07-16 13:26 ` jakub at gcc dot gnu.org
@ 2014-08-20 16:47 ` wmi at gcc dot gnu.org
  2014-08-20 17:10 ` wmi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 18+ messages in thread
From: wmi at gcc dot gnu.org @ 2014-08-20 16:47 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #16 from wmi at gcc dot gnu.org ---
Author: wmi
Date: Wed Aug 20 16:47:12 2014
New Revision: 214233

URL: https://gcc.gnu.org/viewcvs?rev=214233&root=gcc&view=rev
Log:
2014-08-20  Martin Jambor  <mjambor@suse.cz>
        Wei Mi  <wmi@google.com>

    PR ipa/60449
    PR middle-end/61776
    * tree-ssa-operands.c (update_stmt_operands): Remove
    MODIFIED_NORETURN_CALLS.
    * tree-cfgcleanup.c (cleanup_call_ctrl_altering_flag): New func.
    (cleanup_control_flow_bb): Use cleanup_call_ctrl_altering_flag.
    (split_bb_on_noreturn_calls): Renamed from split_bbs_on_noreturn_calls.
    (cleanup_tree_cfg_1): Use split_bb_on_noreturn_calls.
    * tree-ssanames.h: Remove MODIFIED_NORETURN_CALLS.
    * gimple.h (enum gf_mask): Add GF_CALL_CTRL_ALTERING.
    (gimple_call_set_ctrl_altering): New func.
    (gimple_call_ctrl_altering_p): Ditto.
    * tree-cfg.c (gimple_call_initialize_ctrl_altering): Ditto.
    (make_blocks): Use gimple_call_initialize_ctrl_altering.
    (is_ctrl_altering_stmt): Use gimple_call_ctrl_altering_p.
    (execute_fixup_cfg): Use gimple_call_ctrl_altering_p and
    remove MODIFIED_NORETURN_CALLS.

2014-08-20  Martin Jambor  <mjambor@suse.cz>
        Wei Mi  <wmi@google.com>

    PR ipa/60449
    PR middle-end/61776
    * testsuite/gcc.dg/lto/pr60449_1.c: New test.
    * testsuite/gcc.dg/lto/pr60449_0.c: New test.
    * testsuite/gcc.dg/pr61776.c: New test.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/gimple.h
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-cfg.c
    trunk/gcc/tree-cfgcleanup.c
    trunk/gcc/tree-ssa-operands.c
    trunk/gcc/tree-ssanames.h


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (13 preceding siblings ...)
  2014-08-20 16:47 ` wmi at gcc dot gnu.org
@ 2014-08-20 17:10 ` wmi at gcc dot gnu.org
  2014-10-30 10:36 ` jakub at gcc dot gnu.org
  2014-11-25 15:21 ` jamborm at gcc dot gnu.org
  16 siblings, 0 replies; 18+ messages in thread
From: wmi at gcc dot gnu.org @ 2014-08-20 17:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

--- Comment #17 from wmi at gcc dot gnu.org ---
Author: wmi
Date: Wed Aug 20 17:09:25 2014
New Revision: 214237

URL: https://gcc.gnu.org/viewcvs?rev=214237&root=gcc&view=rev
Log:
2014-08-20  Martin Jambor  <mjambor@suse.cz>
        Wei Mi  <wmi@google.com>

    PR ipa/60449
    PR middle-end/61776
    * tree-ssa-operands.c (update_stmt_operands): Remove
    MODIFIED_NORETURN_CALLS.
    * tree-cfgcleanup.c (cleanup_call_ctrl_altering_flag): New func.
    (cleanup_control_flow_bb): Use cleanup_call_ctrl_altering_flag.
    (split_bb_on_noreturn_calls): Renamed from split_bbs_on_noreturn_calls.
    (cleanup_tree_cfg_1): Use split_bb_on_noreturn_calls.
    * tree-ssanames.h: Remove MODIFIED_NORETURN_CALLS.
    * gimple.h (enum gf_mask): Add GF_CALL_CTRL_ALTERING.
    (gimple_call_set_ctrl_altering): New func.
    (gimple_call_ctrl_altering_p): Ditto.
    * tree-cfg.c (gimple_call_initialize_ctrl_altering): Ditto.
    (make_blocks): Use gimple_call_initialize_ctrl_altering.
    (is_ctrl_altering_stmt): Use gimple_call_ctrl_altering_p.
    (execute_fixup_cfg): Use gimple_call_ctrl_altering_p and
    remove MODIFIED_NORETURN_CALLS.

2014-08-20  Martin Jambor  <mjambor@suse.cz>
        Wei Mi  <wmi@google.com>

    PR ipa/60449
    PR middle-end/61776
    * testsuite/gcc.dg/lto/pr60449_1.c: New test.
    * testsuite/gcc.dg/lto/pr60449_0.c: New test.
    * testsuite/gcc.dg/pr61776.c: New test.


Added:
    branches/gcc-4_9-branch/gcc/testsuite/gcc.dg/lto/pr60449_0.c
    branches/gcc-4_9-branch/gcc/testsuite/gcc.dg/lto/pr60449_1.c
    branches/gcc-4_9-branch/gcc/testsuite/gcc.dg/pr61776.c
Modified:
    branches/gcc-4_9-branch/gcc/ChangeLog
    branches/gcc-4_9-branch/gcc/gimple.h
    branches/gcc-4_9-branch/gcc/testsuite/ChangeLog
    branches/gcc-4_9-branch/gcc/tree-cfg.c
    branches/gcc-4_9-branch/gcc/tree-cfgcleanup.c
    branches/gcc-4_9-branch/gcc/tree-ssa-operands.c
    branches/gcc-4_9-branch/gcc/tree-ssanames.h


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (14 preceding siblings ...)
  2014-08-20 17:10 ` wmi at gcc dot gnu.org
@ 2014-10-30 10:36 ` jakub at gcc dot gnu.org
  2014-11-25 15:21 ` jamborm at gcc dot gnu.org
  16 siblings, 0 replies; 18+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-10-30 10:36 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.9.2                       |4.9.3

--- Comment #18 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 4.9.2 has been released.


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Bug lto/60449] Merging function DECLs discards leaf attribute which causes cfg verifier to fail
  2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
                   ` (15 preceding siblings ...)
  2014-10-30 10:36 ` jakub at gcc dot gnu.org
@ 2014-11-25 15:21 ` jamborm at gcc dot gnu.org
  16 siblings, 0 replies; 18+ messages in thread
From: jamborm at gcc dot gnu.org @ 2014-11-25 15:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60449

Martin Jambor <jamborm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #19 from Martin Jambor <jamborm at gcc dot gnu.org> ---
I believe this has been fixed.  Thanks a lot by the way.


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2014-11-25 15:21 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-06 17:03 [Bug lto/60449] New: Merging function DECLs discards leaf attribute which causes cfg verifier to fail jamborm at gcc dot gnu.org
2014-03-06 17:04 ` [Bug lto/60449] " jamborm at gcc dot gnu.org
2014-03-06 17:42 ` trippels at gcc dot gnu.org
2014-03-06 17:47 ` jamborm at gcc dot gnu.org
2014-03-07  8:55 ` rguenth at gcc dot gnu.org
2014-03-07  8:56 ` rguenth at gcc dot gnu.org
2014-03-07 10:07 ` jamborm at gcc dot gnu.org
2014-04-01 12:29 ` rguenth at gcc dot gnu.org
2014-04-01 12:30 ` rguenth at gcc dot gnu.org
2014-04-01 12:36 ` rguenth at gcc dot gnu.org
2014-04-22 11:35 ` jakub at gcc dot gnu.org
2014-06-12  8:09 ` mliska at suse dot cz
2014-06-24 14:41 ` jamborm at gcc dot gnu.org
2014-07-16 13:26 ` jakub at gcc dot gnu.org
2014-08-20 16:47 ` wmi at gcc dot gnu.org
2014-08-20 17:10 ` wmi at gcc dot gnu.org
2014-10-30 10:36 ` jakub at gcc dot gnu.org
2014-11-25 15:21 ` jamborm at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).