This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Isolate erroneous paths optimization -- preserve *0.


On 11/12/13 15:33, Dominique Dhumieres wrote:
Bootstrapping with ada id broken by revision 204708
(at least on x86_64-apple-darwin13):

...
# gnattools1
/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" \
	  ../../gnatmake ../../gnatlink
../../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).

../rts/system.ads
/opt/gcc/work/gcc/ada/make.adb
/opt/gcc/work/gcc/ada/make.ads
/opt/gcc/work/gcc/ada/ali.ads
/opt/gcc/work/gcc/ada/casing.ads
/opt/gcc/work/gcc/ada/types.ads
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 incoming edge.

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.

jeff


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]