On Tue, 24 Apr 2012, Richard Guenther wrote: > On Tue, 24 Apr 2012, Richard Guenther wrote: > > > > > I've been carrying this patch for quite some while now and really > > want to go forward with it - the problem is that while all default > > languages work fine after this patch Ada shows some testsuite > > regressions. I've had various hacks/workarounds throughout the > > Ada frontend for them, but lost track of what fixed what and > > they all felt like hacks anyway. > > > > Thus - I know the patch will add Ada testsuite regressions. But it will > > not break Ada bootstrap. Ada is not in the set of default languages, > > nor is it considered release critical. > > > > Are the Ada folks happy with helping to fix the fallout after-the-fact > > (I got Eric to fix the bootstrap issues that were first present - thanks > > for that)? I am happy to revisit my hacks/workarounds and post them, > > but it will be ultimatively easier to review them if you can see > > the FAIL for yourself (there are some workarounds/hacks posted on the > > mailinglist for previous attempts IIRC). > > > > Thanks for your consideration. > > > > The patch is currently under re-testing (it needs the 2nd patch > > below, which was already approved but back in time broke Ada > > bootstrap - I didn't verify if that still occurs). > > To followup myself - bootstrap with just the 2nd patch is still > broken: > > /abuild/rguenther/obj2/./gcc/xgcc -B/abuild/rguenther/obj2/./gcc/ > -B/usr/local/x86_64-unknown-linux-gnu/bin/ > -B/usr/local/x86_64-unknown-linux-gnu/lib/ -isystem > /usr/local/x86_64-unknown-linux-gnu/include -isystem > /usr/local/x86_64-unknown-linux-gnu/sys-include -c -g -O2 -m32 -fpic > -W -Wall -gnatpg -nostdinc -m32 s-secsta.adb -o s-secsta.o > s-secsta.adb:501:4: error: size of variable 'System.Secondary_Stack.Chunk' > is too large > Chunk : aliased Chunk_Id (1, Static_Secondary_Stack_Size); > ^ > make[9]: *** [s-secsta.o] Error 1 > > And the following is the list of regressions introduced by the combined > patch set: > > === acats tests === > FAIL: a71004a > FAIL: c36204d > FAIL: c36205l > FAIL: c37404b > FAIL: c41107a > FAIL: c41204a > FAIL: c43204c > FAIL: c43204e > FAIL: c43204f > FAIL: c43204g > FAIL: c43204h > FAIL: c43204i > FAIL: c52102a > FAIL: c52102c > FAIL: c64103c > FAIL: c64103d > FAIL: c64106a > FAIL: c95087a > FAIL: cc1224a > FAIL: cc1311a > FAIL: cc3106b > FAIL: cc3224a > FAIL: cd2a31a > > === acats Summary === > # of expected passes 2297 > # of unexpected failures 23 > > === gnat tests === > > > Running target unix/ > FAIL: gnat.dg/array11.adb (test for warnings, line 12) > FAIL: gnat.dg/loop_optimization3.adb (test for excess errors) > FAIL: gnat.dg/loop_optimization3.adb execution test > FAIL: gnat.dg/object_overflow.adb (test for warnings, line 8) > FAIL: gnat.dg/renaming5.adb scan-tree-dump-times optimized "goto" 2 > FAIL: gnat.dg/return3.adb scan-assembler loc 1 6 > FAIL: gnat.dg/test_8bitlong_overflow.adb (test for excess errors) > FAIL: gnat.dg/test_8bitlong_overflow.adb execution test > > === gnat Summary for unix/ === > > # of expected passes 1089 > # of unexpected failures 8 > # of expected failures 13 > # of unsupported tests 2 > > Running target unix//-m32 > FAIL: gnat.dg/array11.adb (test for warnings, line 12) > FAIL: gnat.dg/loop_optimization3.adb (test for excess errors) > FAIL: gnat.dg/loop_optimization3.adb execution test > FAIL: gnat.dg/object_overflow.adb (test for warnings, line 8) > FAIL: gnat.dg/renaming5.adb scan-tree-dump-times optimized "goto" 2 > FAIL: gnat.dg/return3.adb scan-assembler loc 1 6 > FAIL: gnat.dg/test_8bitlong_overflow.adb (test for excess errors) > FAIL: gnat.dg/test_8bitlong_overflow.adb execution test > > === gnat Summary for unix//-m32 === > > # of expected passes 1089 > # of unexpected failures 8 > # of expected failures 13 > # of unsupported tests 2 > > === gnat Summary === > > # of expected passes 2178 > # of unexpected failures 16 > # of expected failures 26 > # of unsupported tests 4 > > Most of the ACATS errors are "raised STORAGE_ERROR : object too large" > or "error: size of variable '...' is too large". The gnat testsuite > adds "warning: "Storage_Error" will be raised at run time" to this. > > I remember one workaround (which usually involves re-setting TREE_OVERFLOW > at strathegic places) fixes most of ACATS. I'll try to isolate that > (but it's a hack and does not feel "right").
Ah, and all ACATS fails and -FAIL: gnat.dg/loop_optimization3.adb (test for excess errors) -FAIL: gnat.dg/loop_optimization3.adb execution test -FAIL: gnat.dg/test_8bitlong_overflow.adb (test for excess errors) -FAIL: gnat.dg/test_8bitlong_overflow.adb execution test are fixed by for example Index: trunk/gcc/stor-layout.c =================================================================== --- trunk.orig/gcc/stor-layout.c 2012-04-25 14:14:52.321710059 +0200 +++ trunk/gcc/stor-layout.c 2012-04-25 14:13:43.595714163 +0200 @@ -2182,11 +2182,29 @@ layout_type (tree type) that (possible) negative values are handled appropriately when determining overflow. */ else - length - = fold_convert (sizetype, - size_binop (PLUS_EXPR, - build_int_cst (TREE_TYPE (lb), 1), - size_binop (MINUS_EXPR, ub, lb))); + { + /* ??? When it is obvious that the range is signed + represent it using ssizetype. */ + if (TREE_CODE (lb) == INTEGER_CST + && TREE_CODE (ub) == INTEGER_CST + && TYPE_UNSIGNED (TREE_TYPE (lb)) + && tree_int_cst_lt (ub, lb)) + { + lb = double_int_to_tree + (ssizetype, + double_int_sext (tree_to_double_int (lb), + TYPE_PRECISION (TREE_TYPE (lb)))); + ub = double_int_to_tree + (ssizetype, + double_int_sext (tree_to_double_int (ub), + TYPE_PRECISION (TREE_TYPE (ub)))); + } + length + = fold_convert (sizetype, + size_binop (PLUS_EXPR, + build_int_cst (TREE_TYPE (lb), 1), + size_binop (MINUS_EXPR, ub, lb))); + } /* If we arrived at a length of zero ignore any overflow that occured as part of the calculation. There exists thus are because array TYPE_DOMAIN is built using unsigned sizetype but these Ada testcases have array domains which really need signed types. The above is of course a hack, but one that otherwise survives bootstrap / test of all languages. Thus, we arrive at the following Ada regression status if the patch series is applied (plus the above incremental patch): === acats tests === === acats Summary === # of expected passes 2320 # of unexpected failures 0 Native configuration is x86_64-unknown-linux-gnu === gnat tests === Running target unix/ FAIL: gnat.dg/array11.adb (test for warnings, line 12) FAIL: gnat.dg/object_overflow.adb (test for warnings, line 8) FAIL: gnat.dg/renaming5.adb scan-tree-dump-times optimized "goto" 2 FAIL: gnat.dg/return3.adb scan-assembler loc 1 6 === gnat Summary for unix/ === # of expected passes 1093 # of unexpected failures 4 # of expected failures 13 # of unsupported tests 2 Running target unix//-m32 FAIL: gnat.dg/array11.adb (test for warnings, line 12) FAIL: gnat.dg/object_overflow.adb (test for warnings, line 8) FAIL: gnat.dg/renaming5.adb scan-tree-dump-times optimized "goto" 2 FAIL: gnat.dg/return3.adb scan-assembler loc 1 6 === gnat Summary for unix//-m32 === # of expected passes 1093 # of unexpected failures 4 # of expected failures 13 # of unsupported tests 2 === gnat Summary === # of expected passes 2186 # of unexpected failures 8 # of expected failures 26 # of unsupported tests 4 Which I consider reasonable? Thanks, Richard.