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 <i...@sandoe.co.uk>
---
 .../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 <nicola.p...@meta-innovation.com>, 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 <nicola.p...@meta-innovation.com>, 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 <nicola.p...@meta-innovation.com>, 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)

Reply via email to