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)