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 <iain@sandoe.co.uk>
This commit is contained in:
Iain Sandoe
2025-09-16 23:31:49 +01:00
parent 1cf8cb45d8
commit 8a7346964d
5 changed files with 32 additions and 129 deletions

View File

@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <nicola.pero@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>

View File

@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <nicola.pero@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>

View File

@@ -1,7 +1,7 @@
/* Contributed by Nicola Pero <nicola.pero@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

View File

@@ -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
# 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
}
# 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/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
}
}
#
# 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
}
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

View File

@@ -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"