https://gcc.gnu.org/g:8a7346964d984667d452fa46ea5ace5b372fb8fb

commit r16-3927-g8a7346964d984667d452fa46ea5ace5b372fb8fb
Author: Iain Sandoe <[email protected]>
Date:   Tue Sep 16 23:31:49 2025 +0100

    testsuite, objective-c: Fix duplicate test names in 'special'.
    
    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]>

Diff:
---
 gcc/testsuite/objc.dg/special/load-category-1.m    |   2 +-
 gcc/testsuite/objc.dg/special/load-category-2.m    |   2 +-
 gcc/testsuite/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 b72d0709044e..1f488124a610 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 2706351da223..124eed8f4241 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 215e463fcbe1..751c6e3bede9 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 a997052d78dd..c28358867be6 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 a8e422d34e98..12380fe17ff9 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"

Reply via email to