This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] Isolate erroneous paths optimization -- preserve *0.
- From: Jeff Law <law at redhat dot com>
- To: Dominique Dhumieres <dominiq at lps dot ens dot fr>, gcc-patches at gcc dot gnu dot org
- Cc: ebotcazou at libertysurf dot fr
- Date: Tue, 12 Nov 2013 23:53:08 -0700
- Subject: Re: [PATCH] Isolate erroneous paths optimization -- preserve *0.
- Authentication-results: sourceware.org; auth=none
- References: <20131112223322 dot BA07B104 at mailhost dot lps dot ens dot fr>
On 11/12/13 15:33, Dominique Dhumieres wrote:
Bootstrapping with ada id broken by revision 204708
(at least on x86_64-apple-darwin13):
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C ../gcc/ada/tools -f ../Makefile \
"CC=../../xgcc -B../../" "CXX=../../xg++ -B../../ -B../../../x86_64-apple-darwin13.0.0/libstdc++-v3/src/.libs -B../../../x86_64-apple-darwin13.0.0/libstdc++-v3/libsupc++/.libs -L../../../x86_64-apple-darwin13.0.0/libstdc++-v3/src/.libs -L../../../x86_64-apple-darwin13.0.0/libstdc++-v3/libsupc++/.libs" "CFLAGS=-g -O2 -W -Wall" "LDFLAGS=-static-libstdc++ -static-libgcc -Wl,-no_pie " "ADAFLAGS=-gnatpg -gnata" "ADA_CFLAGS=" "INCLUDES=-I. -I.. -I../.. -I/opt/gcc/work/gcc/ada -I/opt/gcc/work/gcc/config -I/opt/gcc/work/gcc/../include -I/opt/gcc/work/gcc" "ADA_INCLUDES=-I- -I../rts -I. -I/opt/gcc/work/gcc/ada" "exeext=" "fsrcdir=/opt/gcc/work/gcc" "srcdir=/opt/gcc/work/gcc" "GNATMAKE=../../gnatmake" "GNATLINK=../../gnatlink" "GNATBIND=../../gnatbind" "TOOLSCASE=native" \
../../xgcc -B../../ -c -g -O2 -W -Wall -gnatpg -gnata -I- -I../rts -I. -I/opt/gcc/work/gcc/ada /opt/gcc/work/gcc/ada/make.adb -o make.o
/opt/gcc/work/gcc/ada/make.adb: In function 'Make.Compile_Sources.Start_Compile_If_Possible':
/opt/gcc/work/gcc/ada/make.adb:3312:7: error: control flow in the middle of basic block 550
+===========================GNAT BUG DETECTED==============================+
| 4.9.0 20131112 (experimental) [trunk revision 204710p13r1] (x86_64-apple-darwin13.0.0) GCC error:|
| verify_flow_info failed |
| Error detected around /opt/gcc/work/gcc/ada/make.adb:3312:7 |
| Please submit a bug report; see http://gcc.gnu.org/bugs.html. |
| Use a subject line meaningful to you and us to track the bug. |
| Include the entire contents of this bug box in the report. |
| Include the exact gcc or gnatmake command that you entered. |
| Also include sources listed below in gnatchop format |
| (concatenated together with no headers between files). |
Please include these source files with error report
Note that list may not be accurate in some cases,
so please double check that the problem can still
be reproduced with the set of files listed.
Consider also -gnatd.n switch (see debug.adb).
So in the non-call exceptions case (as occurs here) we have a few hurdles.
First we have to split the duplicate block so that the null dereference
ends the block (it's a control altering statement in this context).
Splitting the block seems relatively easy.
We also have to wire up an EH edge from the block containing the null
dereference to its handler.
Then we have to update the PHIs in the handler as the handler has a new
These are all solvable problems, in fact none are particularly complex.
However, there's a larger question here -- if a block we want to isolate
has abnormal outgoing edges, do we want to mess with it at all?!? Out
of an abundance of caution, I think the answer is no.
I'll have a patch going through testing overnight.