summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/special
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/gcc.dg/special
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/gcc.dg/special')
-rw-r--r--gcc/testsuite/gcc.dg/special/20000419-2.c18
-rw-r--r--gcc/testsuite/gcc.dg/special/alias-1.c18
-rw-r--r--gcc/testsuite/gcc.dg/special/alias-2.c19
-rw-r--r--gcc/testsuite/gcc.dg/special/gcsec-1.c29
-rw-r--r--gcc/testsuite/gcc.dg/special/mips-abi.exp104
-rw-r--r--gcc/testsuite/gcc.dg/special/mips-abi.s0
-rw-r--r--gcc/testsuite/gcc.dg/special/special.exp32
-rw-r--r--gcc/testsuite/gcc.dg/special/weak-1.c20
-rw-r--r--gcc/testsuite/gcc.dg/special/weak-1a.c3
-rw-r--r--gcc/testsuite/gcc.dg/special/weak-2.c15
-rw-r--r--gcc/testsuite/gcc.dg/special/weak-2a.c5
-rw-r--r--gcc/testsuite/gcc.dg/special/weak-2b.c3
-rw-r--r--gcc/testsuite/gcc.dg/special/wkali-1.c19
-rw-r--r--gcc/testsuite/gcc.dg/special/wkali-2.c16
-rw-r--r--gcc/testsuite/gcc.dg/special/wkali-2a.c7
-rw-r--r--gcc/testsuite/gcc.dg/special/wkali-2b.c7
16 files changed, 315 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/special/20000419-2.c b/gcc/testsuite/gcc.dg/special/20000419-2.c
new file mode 100644
index 000000000..4a228eb1a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/20000419-2.c
@@ -0,0 +1,18 @@
+/* A static function with a global alias should not get 'defined but
+ not used' warnings. Exposed by Linux kernel. */
+/* { dg-do compile } */
+/* { dg-require-alias "" } */
+/* { dg-options "-Wall" } */
+
+extern void do_something (void);
+extern void do_something_else (void);
+
+static int
+init_foobar(void) /* { dg-bogus "defined but not used" "not used warning" } */
+{
+ do_something();
+ do_something_else();
+ return 0;
+}
+
+int init_module(void) __attribute__((alias("init_foobar")));
diff --git a/gcc/testsuite/gcc.dg/special/alias-1.c b/gcc/testsuite/gcc.dg/special/alias-1.c
new file mode 100644
index 000000000..6798c5be4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/alias-1.c
@@ -0,0 +1,18 @@
+/* { dg-do link } */
+/* { dg-require-alias "" } */
+
+#include <stdlib.h>
+
+extern int foo(void) __attribute__((alias("bar")));
+
+int bar(void) {
+ return 1;
+}
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/alias-2.c b/gcc/testsuite/gcc.dg/special/alias-2.c
new file mode 100644
index 000000000..4cc8ce150
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/alias-2.c
@@ -0,0 +1,19 @@
+/* PR 3997 */
+/* { dg-do run } */
+/* { dg-require-alias "" } */
+
+extern void abort (void);
+extern void exit (int);
+
+void foo(void)
+{
+ exit(0);
+}
+
+static void bar(void) __attribute__((alias("foo")));
+
+int main()
+{
+ bar();
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.dg/special/gcsec-1.c b/gcc/testsuite/gcc.dg/special/gcsec-1.c
new file mode 100644
index 000000000..ef1434fbe
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/gcsec-1.c
@@ -0,0 +1,29 @@
+/* AIX gld supports garbage collection. But AIX gcc does not support
+ -ffunction-sections or -fdata-sections. */
+/* { dg-do run { xfail rs6000-*-aix* powerpc*-*-aix* } } */
+/* { dg-require-gc-sections "" } */
+
+/* { dg-options "-ffunction-sections -fdata-sections -Wl,--gc-sections" } */
+/* { dg-options "-ffunction-sections -fdata-sections -Wl,--gc-sections -static" { target static } } */
+
+#include <stdlib.h>
+
+static int unusedint=5;
+
+static int usedint=1;
+
+int unused(void) {
+ return 1;
+}
+
+int foo(void) {
+ return usedint;
+}
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/mips-abi.exp b/gcc/testsuite/gcc.dg/special/mips-abi.exp
new file mode 100644
index 000000000..3af47be51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/mips-abi.exp
@@ -0,0 +1,104 @@
+# Copyright (C) 2002, 2004, 2007 Free Software Foundation, Inc.
+
+# 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.
+#
+# This program 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/>.
+
+# This test checks whether MIPS ELF configurations pass the right
+# ABI flags to the assembler. An ABI flag should always be passed
+# unless MEABI is selected.
+
+load_lib gcc-dg.exp
+
+# Only run this test on MIPS ELF targets
+if {![istarget mips*-*-*] || [gcc_target_object_format] != "elf"} {
+ return
+}
+
+# A list of all assembler ABI flags.
+set asm_abi_flags {-mabi=32 -mabi=n32 -mabi=64 -mabi=o64 -mabi=eabi}
+
+# Try to assemble mips-abi.s (an empty file), passing -v in order to
+# get the assembler command line. Check whether an appropriate ABI
+# flag is passed.
+#
+# NAME is a name for the pass/fail line.
+# ABIS is a list of acceptable assembler ABI flags, or "" if no
+# ABI flag is expected.
+# FLAGS is a list of options for gcc.
+proc check_mips_abi {name abis flags} {
+ global srcdir subdir
+
+ lappend flags "-v"
+ set lines [gcc_target_compile "$srcdir/$subdir/mips-abi.s" \
+ "mips-abi.o" object \
+ [list "additional_flags=$flags"]]
+ set good 0
+ set bad 0
+ foreach line [split $lines "\n"] {
+ # Find the assembler command line.
+ if {[string first "$srcdir/$subdir/mips-abi.s" $line] >= 0} {
+ foreach arg [split $line " "] {
+ # Count the number of matching and non-matching
+ # ABI options.
+ if {[lsearch -exact $abis $arg] >= 0} {
+ incr good
+ } elseif {[string match "-mabi=*" $arg]} {
+ incr bad
+ }
+ }
+ }
+ }
+ if {$good == ($abis != "") && $bad == 0} {
+ pass "mips-abi $name"
+ } else {
+ fail "mips-abi $name"
+ }
+}
+
+# Collect the default target flags.
+set default_flags ""
+set target [target_info name]
+if {[info exists CFLAGS_FOR_TARGET]} {
+ append default_flags " $CFLAGS_FOR_TARGET"
+}
+if {[board_info $target exists cflags]} {
+ append default_flags " [board_info $target cflags]"
+}
+if {[board_info $target exists multilib_flags]} {
+ append default_flags " [board_info $target multilib_flags]"
+}
+
+# See whether the default command line specifies an ABI.
+set default_abi ""
+foreach flag $default_flags {
+ if {[string match "-mabi=*" $flag]} {
+ set default_abi $flag
+ }
+}
+
+# If the command line does specify an ABI, just check for the
+# appropriate assembler flag.
+if {$default_abi != ""} {
+ check_mips_abi "command line" $default_abi ""
+} else {
+ # An ABI should be passed to the assembler by default.
+ # It doesn't seem worthwhile to duplicate the
+ # configuration to ABI logic here, so just accept any ABI.
+ check_mips_abi "default" $asm_abi_flags ""
+
+ # See whether passing a -mabi flag does the right thing.
+ foreach abi $asm_abi_flags {
+ check_mips_abi $abi $abi $abi
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/special/mips-abi.s b/gcc/testsuite/gcc.dg/special/mips-abi.s
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/mips-abi.s
diff --git a/gcc/testsuite/gcc.dg/special/special.exp b/gcc/testsuite/gcc.dg/special/special.exp
new file mode 100644
index 000000000..bb6ef85bd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/special.exp
@@ -0,0 +1,32 @@
+# Copyright (C) 2001, 2003, 2007 Free Software Foundation, Inc.
+
+# 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.
+#
+# This program 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/>.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# jlarmour@redhat.com
+
+# This file was written by Jonathan Larmour (jlarmour@redhat.com).
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+dg-init
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*\[1-9\].c]] \
+ "" ""
+dg-finish
+
+### EOF special.exp
diff --git a/gcc/testsuite/gcc.dg/special/weak-1.c b/gcc/testsuite/gcc.dg/special/weak-1.c
new file mode 100644
index 000000000..fd45acdc7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/weak-1.c
@@ -0,0 +1,20 @@
+/* { dg-do run { xfail { hppa*-*-hpux* && { ! hppa*64*-*-* } } } } */
+/* { dg-require-weak "" } */
+/* { dg-additional-sources weak-1a.c } */
+/* See PR target/23387 for hppa xfail details. */
+
+#include <stdlib.h>
+
+int foo(void) __attribute__((weak));
+
+int foo(void) {
+ return 0;
+}
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/weak-1a.c b/gcc/testsuite/gcc.dg/special/weak-1a.c
new file mode 100644
index 000000000..2a7dbba3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/weak-1a.c
@@ -0,0 +1,3 @@
+int foo(void) {
+ return 1;
+}
diff --git a/gcc/testsuite/gcc.dg/special/weak-2.c b/gcc/testsuite/gcc.dg/special/weak-2.c
new file mode 100644
index 000000000..b93a8ef9a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/weak-2.c
@@ -0,0 +1,15 @@
+/* { dg-do run } */
+/* { dg-require-weak "" } */
+/* { dg-additional-sources "weak-2a.c weak-2b.c" } */
+
+#include <stdlib.h>
+
+extern int foo(void);
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/weak-2a.c b/gcc/testsuite/gcc.dg/special/weak-2a.c
new file mode 100644
index 000000000..52d3e08a2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/weak-2a.c
@@ -0,0 +1,5 @@
+int foo(void) __attribute__((weak));
+
+int foo(void) {
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/special/weak-2b.c b/gcc/testsuite/gcc.dg/special/weak-2b.c
new file mode 100644
index 000000000..2a7dbba3d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/weak-2b.c
@@ -0,0 +1,3 @@
+int foo(void) {
+ return 1;
+}
diff --git a/gcc/testsuite/gcc.dg/special/wkali-1.c b/gcc/testsuite/gcc.dg/special/wkali-1.c
new file mode 100644
index 000000000..9d97b8e12
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/wkali-1.c
@@ -0,0 +1,19 @@
+/* { dg-do link } */
+/* { dg-require-weak "" } */
+/* { dg-require-alias "" } */
+
+#include <stdlib.h>
+
+extern int foo(void) __attribute__((weak, alias("bar")));
+
+int bar(void) {
+ return 1;
+}
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/wkali-2.c b/gcc/testsuite/gcc.dg/special/wkali-2.c
new file mode 100644
index 000000000..c36024632
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/wkali-2.c
@@ -0,0 +1,16 @@
+/* { dg-do run } */
+/* { dg-require-weak "" } */
+/* { dg-require-alias "" } */
+/* { dg-additional-sources "wkali-2a.c wkali-2b.c" } */
+
+#include <stdlib.h>
+
+extern int foo(void);
+
+int main(void) {
+
+ if (foo())
+ exit(0);
+ else
+ abort();
+}
diff --git a/gcc/testsuite/gcc.dg/special/wkali-2a.c b/gcc/testsuite/gcc.dg/special/wkali-2a.c
new file mode 100644
index 000000000..79dde1455
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/wkali-2a.c
@@ -0,0 +1,7 @@
+/* { dg-do run } */
+
+extern int foo(void) __attribute__((weak, alias("bar_a")));
+
+int bar_a(void) {
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/special/wkali-2b.c b/gcc/testsuite/gcc.dg/special/wkali-2b.c
new file mode 100644
index 000000000..84f389e84
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/special/wkali-2b.c
@@ -0,0 +1,7 @@
+/* { dg-do run } */
+
+extern int foo(void) __attribute__((alias("bar_b")));
+
+int bar_b(void) {
+ return 1;
+}