This is expected, as noted below, to produce a temporary report
of missing/new tests for the instances in this subdirectory,
since the names have, intentionally, been changed to resolve the
duplication.
Tested on x86_64 darwin, powerpc64le linux, pushed to trunk,
thanks, Iain
--- 8< ---
For macOS/Darwin, we run Objective-C tests for both the GNU and
NeXT runtimes (and these runs are usually differentiated by
identifying the runtime in the test name).
However, the 'special' sub-set of tests had a non-standard driver
since it needs two sources for each test (but did not report the
runtime in the test name and so shows duplicates).
We can now automate the multi-source case with dg-additional-sources
but need to do a little work to filter these additional sources
from the set (since they also have a .m suffix).
This addresses the FIXME in the original driver.
To resolve the duplicated names, means amending the reported name
to include the runtime as a differentiator, this means that test
comparisons will temporarily report new and missing tests for any
comparison that includes this change.
gcc/testsuite/ChangeLog:
* objc.dg/special/load-category-1.m: Add second source.
* objc.dg/special/load-category-2.m: Likewise.
* objc.dg/special/load-category-3.m: Likewise.
* objc.dg/special/unclaimed-category-1.m: Likewise.
* objc.dg/special/special.exp: Rewrite to make use of generic
testsuite facilities.
Signed-off-by: Iain Sandoe <[email protected]>
---
.../objc.dg/special/load-category-1.m | 2 +-
.../objc.dg/special/load-category-2.m | 2 +-
.../objc.dg/special/load-category-3.m | 2 +-
gcc/testsuite/objc.dg/special/special.exp | 151 ++++--------------
.../objc.dg/special/unclaimed-category-1.m | 2 +-
5 files changed, 31 insertions(+), 128 deletions(-)
diff --git a/gcc/testsuite/objc.dg/special/load-category-1.m
b/gcc/testsuite/objc.dg/special/load-category-1.m
index b72d0709044..1f488124a61 100644
--- a/gcc/testsuite/objc.dg/special/load-category-1.m
+++ b/gcc/testsuite/objc.dg/special/load-category-1.m
@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <[email protected]>, December
2010. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 }
} } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-options "-Wno-objc-root-class" } */
+/* { dg-additional-sources "load-category-1a.m" } */
#include <stdlib.h>
#include <objc/objc.h>
diff --git a/gcc/testsuite/objc.dg/special/load-category-2.m
b/gcc/testsuite/objc.dg/special/load-category-2.m
index 2706351da22..124eed8f424 100644
--- a/gcc/testsuite/objc.dg/special/load-category-2.m
+++ b/gcc/testsuite/objc.dg/special/load-category-2.m
@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <[email protected]>, December
2010. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 }
} } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-options "-Wno-objc-root-class" } */
+/* { dg-additional-sources "load-category-2a.m" } */
#include <stdio.h>
#include <stdlib.h>
diff --git a/gcc/testsuite/objc.dg/special/load-category-3.m
b/gcc/testsuite/objc.dg/special/load-category-3.m
index 215e463fcbe..751c6e3bede 100644
--- a/gcc/testsuite/objc.dg/special/load-category-3.m
+++ b/gcc/testsuite/objc.dg/special/load-category-3.m
@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <[email protected]>, December
2010. */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 }
} } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-options "-Wno-objc-root-class" } */
+/* { dg-additional-sources "load-category-3a.m" } */
/* This test is identical to load-category-2, but the classes and
categories are created in inverted order in the modules, to test
diff --git a/gcc/testsuite/objc.dg/special/special.exp
b/gcc/testsuite/objc.dg/special/special.exp
index a997052d78d..c28358867be 100644
--- a/gcc/testsuite/objc.dg/special/special.exp
+++ b/gcc/testsuite/objc.dg/special/special.exp
@@ -1,16 +1,19 @@
-# GCC Objective-C testsuite that uses the `dg.exp' driver.
-# Copyright (C) 1997-2025 Free Software Foundation, Inc.
+# All these testcases compile and link two Objective-C modules..
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
+# Copyright (C) 2025 Free Software Foundation, Inc.
#
-# This program is distributed in the hope that it will be useful,
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
@@ -24,130 +27,30 @@ if ![info exists DEFAULT_CFLAGS] then {
set DEFAULT_CFLAGS ""
}
+set extra_flags "$DEFAULT_CFLAGS -Wno-objc-root-class"
+
# Initialize `dg'.
dg-init
-# TODO: All these testcases compile and link two Objective-C modules.
-# Remove code duplication and factor the common code out.
-
-#
-# unclaimed-category-1 test
-#
-# This test is special because we must compile two different modules,
-# unclaimed-category-1a.m and unclaimed-category-1.m, then link
-# together, then run the resulting executable.
-# for all systems we point to the libobjc includes and use the -fgnu-runtime
-set add_flags "additional_flags=-I${srcdir}/../../libobjc"
-lappend add_flags "additional_flags=-fgnu-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m"
"unclaimed-category-1a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "unclaimed-category-1a.o"
-} else {
- dg-runtest "$srcdir/$subdir/unclaimed-category-1.m"
"unclaimed-category-1a.o" "-I${srcdir}/../../libobjc -fgnu-runtime"
- file delete unclaimed-category-1a.o
-}
-
-if [istarget "*-*-darwin*" ] {
-set add_flags ""
-lappend add_flags "additional_flags=-fnext-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/unclaimed-category-1a.m"
"unclaimed-category-1a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "unclaimed-category-1a.o"
-} else {
- dg-runtest "$srcdir/$subdir/unclaimed-category-1.m"
"unclaimed-category-1a.o" "-fnext-runtime"
- file delete unclaimed-category-1a.o
-}
+# Gather a list of all objective-c sources.
+set all_srcs [lsort [glob -nocomplain $srcdir/$subdir/*.m]]
+# Remove the ones ending in a.m
+set tests ""
+set pat "a\.m"
+foreach t $all_srcs {
+ if { [string match *$pat $t] } {
+ continue
+ }
+ lappend tests $t
}
-#
-# load-category-1 test
-#
-# This test is similar to the one above. We compile load-category-1.m
-# and load-category-1a.m, link them together, and execute the result.
-set add_flags "additional_flags=-I${srcdir}/../../libobjc"
-lappend add_flags "additional_flags=-fgnu-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-1a.m"
"load-category-1a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-1a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-1.m" "load-category-1a.o"
"-I${srcdir}/../../libobjc -fgnu-runtime"
- file delete load-category-1a.o
-}
+# Main loop.
+dg-runtest $tests "-fgnu-runtime" $extra_flags
+# darwin targets can also run code with the NeXT runtime.
if [istarget "*-*-darwin*" ] {
-set add_flags ""
-lappend add_flags "additional_flags=-fnext-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-1a.m"
"load-category-1a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-1a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-1.m" "load-category-1a.o"
"-fnext-runtime"
- file delete load-category-1a.o
-}
-}
-
-#
-# load-category-2 test
-#
-# This test is similar to the one above. We compile load-category-2.m
-# and load-category-2a.m, link them together, and execute the result.
-set add_flags "additional_flags=-I${srcdir}/../../libobjc"
-lappend add_flags "additional_flags=-fgnu-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-2a.m"
"load-category-2a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-2a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-2.m" "load-category-2a.o"
"-I${srcdir}/../../libobjc -fgnu-runtime"
- file delete load-category-2a.o
-}
-
-if [istarget "*-*-darwin*" ] {
-set add_flags ""
-lappend add_flags "additional_flags=-fnext-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-2a.m"
"load-category-2a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-2a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-2.m" "load-category-2a.o"
"-fnext-runtime"
- file delete load-category-2a.o
-}
-}
-
-#
-# load-category-3 test
-#
-# This test is similar to the one above. We compile load-category-3.m
-# and load-category-3a.m, link them together, and execute the result.
-set add_flags "additional_flags=-I${srcdir}/../../libobjc"
-lappend add_flags "additional_flags=-fgnu-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-3a.m"
"load-category-3a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-3a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-3.m" "load-category-3a.o"
"-I${srcdir}/../../libobjc -fgnu-runtime"
- file delete load-category-3a.o
-}
-
-if [istarget "*-*-darwin*" ] {
-set add_flags ""
-lappend add_flags "additional_flags=-fnext-runtime"
-lappend add_flags "additional_flags=-Wno-objc-root-class"
-set lines [objc_target_compile "$srcdir/$subdir/load-category-3a.m"
"load-category-3a.o" object $add_flags ]
-if ![string match "" $lines] then {
- fail "load-category-3a.o"
-} else {
- dg-runtest "$srcdir/$subdir/load-category-3.m" "load-category-3a.o"
"-fnext-runtime"
- file delete load-category-3a.o
-}
+ dg-runtest $tests "-fnext-runtime" $extra_flags
}
# All done.
dg-finish
-
diff --git a/gcc/testsuite/objc.dg/special/unclaimed-category-1.m
b/gcc/testsuite/objc.dg/special/unclaimed-category-1.m
index a8e422d34e9..12380fe17ff 100644
--- a/gcc/testsuite/objc.dg/special/unclaimed-category-1.m
+++ b/gcc/testsuite/objc.dg/special/unclaimed-category-1.m
@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero - Fri Dec 14 08:36:00 GMT 2001 */
/* { dg-do run } */
/* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 }
} } { "-fnext-runtime" } { "" } } */
-/* { dg-additional-options "-Wno-objc-root-class" } */
+/* { dg-additional-sources "unclaimed-category-1a.m" } */
#include <objc/objc.h>
#include "../../objc-obj-c++-shared/runtime.h"
--
2.39.2 (Apple Git-143)