From 57b706d141b87c06dfbba577048a1e4903d33f70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= <torbjorn.svensson@foss.st.com>
Date: Sun, 19 Jan 2025 18:33:24 +0100
Subject: [PATCH] testsuite: Only run test if alarm is available
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Most baremetal toolchains will not have an implementation for alarm and
sigaction as they are target specific.
For arm-none-eabi with newlib, function signatures are exposed, but
there is no implmentation and thus the test cases causes a undefined
symbol link error.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr78185.c: Remove dg-do and replace with
	with dg-require-effective-target of signal and alarm.
	* gcc.dg/pr116906-1.c: Likewise.
	* gcc.dg/pr116906-2.c: Likewise.
	* gcc.dg/vect/pr101145inf.c: Use effective-target alarm.
	* gcc.dg/vect/pr101145inf_1.c: Likewise.
	* lib/target-supports.exp(check_effective_target_alarm): New.

gcc/ChangeLog:

	* doc/sourcebuild.texi (Effective-Target Keywords): Document
	'alarm'.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
---
 gcc/doc/sourcebuild.texi                  |  3 +++
 gcc/testsuite/gcc.dg/pr116906-1.c         |  3 ++-
 gcc/testsuite/gcc.dg/pr116906-2.c         |  3 ++-
 gcc/testsuite/gcc.dg/pr78185.c            |  3 ++-
 gcc/testsuite/gcc.dg/vect/pr101145inf.c   |  1 +
 gcc/testsuite/gcc.dg/vect/pr101145inf_1.c |  1 +
 gcc/testsuite/lib/target-supports.exp     | 27 +++++++++++++++++++++++
 7 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index b5c1b23e5271..98ede70f23c0 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2808,6 +2808,9 @@ both scalar and vector modes.
 @subsubsection Environment attributes
 
 @table @code
+@item alarm
+Target supports @code{alarm}.
+
 @item c
 The language for the compiler under test is C.
 
diff --git a/gcc/testsuite/gcc.dg/pr116906-1.c b/gcc/testsuite/gcc.dg/pr116906-1.c
index 27b1fdae02bf..7187507a60d1 100644
--- a/gcc/testsuite/gcc.dg/pr116906-1.c
+++ b/gcc/testsuite/gcc.dg/pr116906-1.c
@@ -1,4 +1,5 @@
-/* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
+/* { dg-require-effective-target alarm } */
+/* { dg-require-effective-target signal } */
 /* { dg-options "-O2" } */
 
 #include <stdint.h>
diff --git a/gcc/testsuite/gcc.dg/pr116906-2.c b/gcc/testsuite/gcc.dg/pr116906-2.c
index 3478771678ce..41a352bf8370 100644
--- a/gcc/testsuite/gcc.dg/pr116906-2.c
+++ b/gcc/testsuite/gcc.dg/pr116906-2.c
@@ -1,4 +1,5 @@
-/* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
+/* { dg-require-effective-target alarm } */
+/* { dg-require-effective-target signal } */
 /* { dg-options "-O2 -fno-tree-ch" } */
 
 #include <unistd.h>
diff --git a/gcc/testsuite/gcc.dg/pr78185.c b/gcc/testsuite/gcc.dg/pr78185.c
index d7781b2080fb..ada8b1b9f907 100644
--- a/gcc/testsuite/gcc.dg/pr78185.c
+++ b/gcc/testsuite/gcc.dg/pr78185.c
@@ -1,4 +1,5 @@
-/* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */
+/* { dg-require-effective-target alarm } */
+/* { dg-require-effective-target signal } */
 /* { dg-options "-O" } */
 
 #include <unistd.h>
diff --git a/gcc/testsuite/gcc.dg/vect/pr101145inf.c b/gcc/testsuite/gcc.dg/vect/pr101145inf.c
index aa598875aa59..70aea94b6e0b 100644
--- a/gcc/testsuite/gcc.dg/vect/pr101145inf.c
+++ b/gcc/testsuite/gcc.dg/vect/pr101145inf.c
@@ -1,3 +1,4 @@
+/* { dg-require-effective-target alarm } */
 /* { dg-require-effective-target signal } */
 /* { dg-additional-options "-O3" } */
 #include <limits.h>
diff --git a/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c b/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c
index 0465788c3cca..fe008284e1d9 100644
--- a/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c
+++ b/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c
@@ -1,3 +1,4 @@
+/* { dg-require-effective-target alarm } */
 /* { dg-require-effective-target signal } */
 /* { dg-additional-options "-O3" } */
 #include <limits.h>
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 1785a9d61500..9ad1e1965bbd 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -14271,3 +14271,30 @@ proc add_options_for_nvptx_alloca_ptx { flags } {
 
     return $flags
 }
+
+# Return true if alarm is supported on the target.
+
+proc check_effective_target_alarm { } {
+    if { ![check_effective_target_signal] } {
+	return 0
+    }
+
+    return [check_no_compiler_messages alarm executable {
+	#include <signal.h>
+	#include <stdlib.h>
+	#include <unistd.h>
+	void do_exit(int i) { exit (0); }
+	int main (void) { 
+	  struct sigaction s;
+	  sigemptyset (&s.sa_mask);
+	  s.sa_handler = exit;
+	  s.sa_flags = 0;
+	  sigaction (SIGALRM, &s, NULL);
+	  alarm (1);
+
+	  /* Infinite loop to simulate work...  */
+	  while (1);
+	  abort ();
+	}
+    }]
+}
-- 
GitLab