aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/lib/objc-torture.exp94
-rw-r--r--gcc/testsuite/objc/compile/compile.exp3
-rw-r--r--gcc/testsuite/objc/execute/exceptions/exceptions.exp4
-rw-r--r--gcc/testsuite/objc/execute/execute.exp3
5 files changed, 80 insertions, 30 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 12021bc..367625a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,11 @@
2010-03-24 Iain Sandoe <iain.sandoe@sandoe-acoustics.co.uk>
+ PR testsuite/41609
+ * lib/objc-torture.exp (objc-set-runtime-options): New.
+ * objc/execute/execute.exp: Check runtime options on each pass.
+ * objc/execute/exceptions/exceptions.exp: Ditto.
+ * objc/compile/compile.exp: Ditto.
+
PR testsuite/42348
* lib/target-supports.exp: Add support for ObjC/ObjC++ tools in
standard tests.
diff --git a/gcc/testsuite/lib/objc-torture.exp b/gcc/testsuite/lib/objc-torture.exp
index 7aba887..0b6362b 100644
--- a/gcc/testsuite/lib/objc-torture.exp
+++ b/gcc/testsuite/lib/objc-torture.exp
@@ -18,24 +18,61 @@
# This file was written by Rob Savoye. (rob@cygnus.com)
load_lib file-format.exp
+load_lib target-supports.exp
-if ![info exists OBJC_RUNTIME_OPTIONS] {
- set OBJC_RUNTIME_OPTIONS ""
- foreach type {-fgnu-runtime -fnext-runtime} {
- global srcdir subdir
+# Make sure that the runtime list is re-evaluated for each multilib.
+proc objc-set-runtime-options { dowhat args } {
+ global OBJC_RUNTIME_OPTIONS
+ if ![info exists OBJC_RUNTIME_OPTIONS] {
+ set rtlist [list "-fgnu-runtime" "-fnext-runtime" ]
+ } else {
+ set rtlist [list "-fgnu-runtime" "-fnext-runtime" ]
+ foreach other $OBJC_RUNTIME_OPTIONS {
+ # Don't do tests twice...
+ if { ( $other == "-fnext-runtime" || $other == "-fgnu-runtime" ) } {
+ continue
+ }
+ lappend rtlist $other
+ }
+ }
- set comp_output [objc_target_compile \
- "$srcdir/$subdir/trivial.m" "trivial.exe" executable "additional_flags=$type"]
+ set OBJC_RUNTIME_OPTIONS ""
- # If we get any error, then we failed
- if ![string match "" $comp_output] then {
- continue;
+ foreach type $rtlist {
+ global srcdir subdir target_triplet tmpdir
+
+ set options "additional_flags=$type"
+ if [info exists args] {
+ lappend options $args
+ }
+ verbose "options $options"
+ set test_obj "trivial.exe"
+ set comp_output [objc_target_compile \
+ "$srcdir/$subdir/trivial.m" $test_obj executable $options]
+
+ # If we get any error, then we failed.
+ if ![string match "" $comp_output] then {
+ remote_file build delete $test_obj
+ continue;
+ }
+ if [info exists dowhat] {
+ if { $dowhat == "execute" } {
+ set result [objc_load "$tmpdir/$test_obj" "" ""]
+ set status [lindex $result 0]
+ set output [lindex $result 1]
+ if { $status != "pass" } {
+ remote_file build delete $test_obj
+ verbose -log "trivial execute failed with $status $output"
+ continue;
+ }
+ }
+ }
+ remote_file build delete $test_obj
+ lappend OBJC_RUNTIME_OPTIONS $type
}
- lappend OBJC_RUNTIME_OPTIONS $type
- }
-}
-verbose -log "Using the following runtimes: $OBJC_RUNTIME_OPTIONS"
+ verbose -log "Using the following runtimes: $OBJC_RUNTIME_OPTIONS"
+}
# The default option list can be overridden by
# TORTURE_OPTIONS="{ { list1 } ... { listN } }"
@@ -62,7 +99,7 @@ if [info exists TORTURE_OPTIONS] {
}
if [info exists ADDITIONAL_TORTURE_OPTIONS] {
- set OBJC_TORTURE_OPTIONS \
+ set OBJC_TORTURE_OPTIONS \
[concat $OBJC_TORTURE_OPTIONS $ADDITIONAL_TORTURE_OPTIONS]
}
@@ -150,6 +187,9 @@ proc objc-torture-execute { src args } {
set oldstatus "foo"
foreach option $option_list {
if { $count > 0 } {
+ if [info exists oldexec] {
+ remote_file build delete $oldexec
+ }
set oldexec $execname
}
set execname "${executable}${count}"
@@ -164,7 +204,7 @@ proc objc-torture-execute { src args } {
# torture_execute_before_{compile,execute} can be set by the .x script
# (if present)
if [info exists torture_eval_before_compile] {
- set ignore_me [eval $torture_eval_before_compile]
+ set ignore_me [eval $torture_eval_before_compile]
}
remote_file build delete $execname
@@ -188,6 +228,7 @@ proc objc-torture-execute { src args } {
if [target_info exists no_long_long] then {
if [expr [search_for $src "long long"]] then {
unsupported "$testcase execution, $option"
+ remote_file build delete $execname
continue
}
}
@@ -197,7 +238,7 @@ proc objc-torture-execute { src args } {
}
if [info exists torture_eval_before_execute] {
- set ignore_me [eval $torture_eval_before_execute]
+ set ignore_me [eval $torture_eval_before_execute]
}
@@ -218,6 +259,7 @@ proc objc-torture-execute { src args } {
if { ![isnative] && [info exists oldexec] } {
if { [remote_file build cmp $oldexec $execname] == 0 } {
set skip 1
+ set status $oldstatus
}
}
if { $skip == 0 } {
@@ -225,16 +267,16 @@ proc objc-torture-execute { src args } {
set status [lindex $result 0]
set output [lindex $result 1]
}
- if { $oldstatus == "pass" } {
- remote_file build delete $oldexec
- }
$status "$testcase execution, $option"
set oldstatus $status
+ # for each option
+ }
+ # tidy up
+ if [info exists execname] {
+ remote_file build delete $execname
}
- if [info exists status] {
- if { $status == "pass" } {
- remote_file build delete $execname
- }
+ if [info exists oldexec] {
+ remote_file build delete $oldexec
}
}
@@ -293,9 +335,9 @@ proc objc-torture { args } {
# don't pass -funroll[-all]-loops.
global torture_with_loops torture_without_loops
if [expr [search_for $src "for*("]+[search_for $src "while*("]] then {
- set option_list $torture_with_loops
+ set option_list $torture_with_loops
} else {
- set option_list $torture_without_loops
+ set option_list $torture_without_loops
}
# loop through all the options
@@ -307,7 +349,7 @@ proc objc-torture { args } {
# torture_execute_before_compile is set by the .x script (if present)
if [info exists torture_eval_before_compile] {
- set ignore_me [eval $torture_eval_before_compile]
+ set ignore_me [eval $torture_eval_before_compile]
}
objc-torture-compile $src "$option $options"
diff --git a/gcc/testsuite/objc/compile/compile.exp b/gcc/testsuite/objc/compile/compile.exp
index a892736..da28021 100644
--- a/gcc/testsuite/objc/compile/compile.exp
+++ b/gcc/testsuite/objc/compile/compile.exp
@@ -27,7 +27,8 @@ load_lib objc-torture.exp
load_lib torture-options.exp
torture-init
-set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+objc-set-runtime-options "compile"
+set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
#
# main test loop
diff --git a/gcc/testsuite/objc/execute/exceptions/exceptions.exp b/gcc/testsuite/objc/execute/exceptions/exceptions.exp
index bd0f993..60d833e 100644
--- a/gcc/testsuite/objc/execute/exceptions/exceptions.exp
+++ b/gcc/testsuite/objc/execute/exceptions/exceptions.exp
@@ -25,13 +25,13 @@ if $tracelevel then {
set additional_flags ""
lappend additional_flags "-fobjc-exceptions"
-
# load support procs
load_lib objc-torture.exp
load_lib torture-options.exp
torture-init
-set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+objc-set-runtime-options "execute" "additional_flags=-fobjc-exceptions"
+set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
#
# main test loop
diff --git a/gcc/testsuite/objc/execute/execute.exp b/gcc/testsuite/objc/execute/execute.exp
index 4985d96..539c4fb 100644
--- a/gcc/testsuite/objc/execute/execute.exp
+++ b/gcc/testsuite/objc/execute/execute.exp
@@ -28,7 +28,8 @@ load_lib objc-torture.exp
load_lib torture-options.exp
torture-init
-set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
+objc-set-runtime-options "execute"
+set-torture-options $OBJC_TORTURE_OPTIONS $OBJC_RUNTIME_OPTIONS
#
# main test loop