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]

[testsuite] detect ICE, fail conditionally (checked in)


I posted a version of this patch last month and got general agreement
that it's acceptable to unconditionally fail tests that trigger
internal compiler errors.  This patch does that for compiler tests but
not library tests.  It's possible that it doesn't handle all compiler
tests, but it's a good start.

Tested on powerpc64-linux with -m32/-m64 for all languages except Ada,
no functionality disabled.  The only differences in test results were
some new failures for internal compiler errors (yea!).  Checked in on
mainline.  I'll backport it to 4.1 and 4.0 if no problems come up in
the next few days.

2006-06-06  Janis Johnson  <janis187@us.ibm.com>

	* lib/gcc-dg.exp (gcc-dg-test-1): Detect and report ICE.
	* lib/gcc-defs.exp (tool_check_compile): Ditto.
	* lib/fortran-torture.exp (fortran-torture-compile,
	fortran-torture-execute): Ditto.

Index: gcc/testsuite/lib/gcc-dg.exp
===================================================================
--- gcc/testsuite/lib/gcc-dg.exp	(revision 113643)
+++ gcc/testsuite/lib/gcc-dg.exp	(working copy)
@@ -139,6 +139,14 @@
 
     set comp_output [$target_compile "$prog" "$output_file" "$compile_type" $options]
 
+    # Look for an internal compiler error, which sometimes masks the fact
+    # that we didn't get an expected error message.  An ICE always fails,
+    # there's no way to XFAIL it.
+    if [string match "*internal compiler error*" $comp_output] {
+	upvar 2 name name
+	fail "$name (internal compiler error)"
+    }
+
     if { $do_what == "repo" } {
 	set object_file "$output_file"
 	set output_file "[file rootname [file tail $prog]].exe"
Index: gcc/testsuite/lib/gcc-defs.exp
===================================================================
--- gcc/testsuite/lib/gcc-defs.exp	(revision 113643)
+++ gcc/testsuite/lib/gcc-defs.exp	(working copy)
@@ -34,6 +34,11 @@
 	return 0
     }
 
+    if [string match "*internal compiler error*" $gcc_output] then {
+	${tool}_fail $testcase "$option (internal compiler error)"
+	return 0
+    }
+
     # We shouldn't get these because of -w, but just in case.
     if [string match "*cc:*warning:*" $gcc_output] then {
 	warning "$testcase: (with warnings) $option"
Index: gcc/testsuite/lib/fortran-torture.exp
===================================================================
--- gcc/testsuite/lib/fortran-torture.exp	(revision 113643)
+++ gcc/testsuite/lib/fortran-torture.exp	(working copy)
@@ -87,6 +87,12 @@
 	return
     }
 
+    if [string match "*internal compiler error*" $comp_output] then {
+	gfortran_fail $testcase "$option (internal compiler error)"
+	catch { remote_file build delete $output }
+	return
+    }
+
     # We shouldn't get these because of -w, but just in case.
     if [string match "*95*:*warning:*" $comp_output] then {
 	warning "$testcase: (with warnings) $option"
@@ -204,6 +210,12 @@
 	    catch { remote_file build delete $executable }
 	    continue
 	}
+
+	if [string match "*internal compiler error*" $comp_output] then {
+	    gfortran_fail $testcase "$option (internal compiler error)"
+	    catch { remote_file build delete $executable }
+	    continue
+	}
 	
 	# We shouldn't get these because of -w, but just in case.
 	if [string match "*95*:*warning:*" $comp_output] then {


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