aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2002-03-22 14:51:48 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-03-22 14:51:48 -0800
commit41c643948c237b94330e47ff9f860206ebb816c2 (patch)
treeef58fdf21cd2d5af8fcc1fdca3da41897a87502f /gcc/testsuite/gcc.dg
parent661fff62a918df093c952e14a1656f0e151c137a (diff)
downloadgcc-41c643948c237b94330e47ff9f860206ebb816c2.zip
gcc-41c643948c237b94330e47ff9f860206ebb816c2.tar.gz
gcc-41c643948c237b94330e47ff9f860206ebb816c2.tar.bz2
c-pragma.c (maybe_apply_renaming_pragma): New.
* c-pragma.c (maybe_apply_renaming_pragma): New. (handle_pragma_redefine_extname, pending_redefine_extname): New. (handle_pragma_extern_prefix, pragma_extern_prefix): New. (init_pragma): Register them. * c-pragma.h (maybe_apply_renaming_pragma): Declare. * c-decl.c (finish_decl): Call it. * cp/decl.c (cp_finish_decl): Likewise. * doc/extend.texi: Document the new pragmas. * config/alpha/osf.h (CPP_SUBTARGET_SPEC): Add __EXTERN_PREFIX. (HANDLE_PRAGMA_EXTERN_PREFIX): New. * config/i386/sol2.h (CPP_PREDEFINES): Add __PRAGMA_REDEFINE_EXTNAME. (HANDLE_PRAGMA_REDEFINE_EXTNAME): New. * config/sparc/sol2.h: Likewise. * g++.dg/other/pragma-re-1.C: New. * g++.dg/other/pragma-ep-1.C: New. * gcc.dg/pragma-re-1.c, gcc.dg/pragma-re-2.c: New. * gcc.dg/pragma-ep-1.c, gcc.dg/pragma-ep-2.c: New. * gcc.dg/pragma-ep-3.c: New. From-SVN: r51200
Diffstat (limited to 'gcc/testsuite/gcc.dg')
-rw-r--r--gcc/testsuite/gcc.dg/pragma-ep-1.c27
-rw-r--r--gcc/testsuite/gcc.dg/pragma-ep-2.c7
-rw-r--r--gcc/testsuite/gcc.dg/pragma-ep-3.c10
-rw-r--r--gcc/testsuite/gcc.dg/pragma-re-1.c11
-rw-r--r--gcc/testsuite/gcc.dg/pragma-re-2.c6
5 files changed, 61 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pragma-ep-1.c b/gcc/testsuite/gcc.dg/pragma-ep-1.c
new file mode 100644
index 0000000..91ec640
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-ep-1.c
@@ -0,0 +1,27 @@
+/* { dg-do compile { target *-*-osf5* } } */
+/* { dg-final { scan-assembler "xyzzy_one" } } */
+/* { dg-final { scan-assembler "xyzzy_two" } } */
+/* { dg-final { scan-assembler "xyzzz_three" } } */
+/* { dg-final { scan-assembler "four" } } */
+/* { dg-final { scan-assembler-not "_four" } } */
+
+#ifndef __EXTERN_PREFIX
+#error
+#endif
+
+#pragma extern_prefix "xyzzy_"
+
+extern int one(void);
+extern int two(void);
+
+#pragma extern_prefix "xyzzz_"
+
+extern int three(void);
+
+#pragma extern_prefix ""
+
+extern int four(void);
+
+int (*p[]) (void) = {
+ one, two, three, four
+};
diff --git a/gcc/testsuite/gcc.dg/pragma-ep-2.c b/gcc/testsuite/gcc.dg/pragma-ep-2.c
new file mode 100644
index 0000000..6e5c467
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-ep-2.c
@@ -0,0 +1,7 @@
+/* { dg-do compile { target *-*-osf5* } } */
+
+#pragma extern_prefix /* { dg-warning "malformed" } */
+#pragma extern_prefix foo /* { dg-warning "malformed" } */
+#pragma extern_prefix "foo" 1 /* { dg-warning "junk" } */
+
+int bar; /* silence `ISO C forbids an empty source file' warning */
diff --git a/gcc/testsuite/gcc.dg/pragma-ep-3.c b/gcc/testsuite/gcc.dg/pragma-ep-3.c
new file mode 100644
index 0000000..95b38bc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-ep-3.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target alpha*-*-osf5* } */
+/* { dg-final { scan-assembler ",Xfoo" } } */
+
+#pragma extern_prefix "X"
+void foo(void) __attribute__((noreturn));
+void foo(void) __attribute__((noreturn));
+void bar()
+{
+ foo();
+}
diff --git a/gcc/testsuite/gcc.dg/pragma-re-1.c b/gcc/testsuite/gcc.dg/pragma-re-1.c
new file mode 100644
index 0000000..80b1d37
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-re-1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile { target *-*-solaris* } } */
+/* { dg-final { scan-assembler "bar" } } */
+/* { dg-final { scan-assembler-not "foo" } } */
+
+#ifndef __PRAGMA_REDEFINE_EXTNAME
+#error
+#endif
+
+#pragma redefine_extname foo bar
+extern int foo(void);
+void *p = (void *)foo;
diff --git a/gcc/testsuite/gcc.dg/pragma-re-2.c b/gcc/testsuite/gcc.dg/pragma-re-2.c
new file mode 100644
index 0000000..351cbfb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pragma-re-2.c
@@ -0,0 +1,6 @@
+/* { dg-do compile { target *-*-solaris* } } */
+
+#pragma redefine_extname /* { dg-warning "malformed" } */
+#pragma redefine_extname foo /* { dg-warning "malformed" } */
+#pragma redefine_extname foo 1 /* { dg-warning "malformed" } */
+#pragma redefine_extname foo bar 2 /* { dg-warning "junk" } */