weak: New directory.
authorStan Shebs <shebs@apple.com>
Fri, 6 Sep 2002 13:00:39 +0000 (13:00 +0000)
committerStan Shebs <shebs@gcc.gnu.org>
Fri, 6 Sep 2002 13:00:39 +0000 (13:00 +0000)
2002-09-06  Stan Shebs  <shebs@apple.com>
            David Edelsohn  <edelsohn@gnu.org>

        * gcc.dg/weak: New directory.
        * gcc.dg/weak-[1-9].c: Move to new directory, remove all
        target-specific xfail bits.
        * gcc.dg/typeof-2.c: Move to new directory.
        * gcc.dg/weak.exp: New expect script.

Co-Authored-By: David Edelsohn <edelsohn@gnu.org>
From-SVN: r56882

22 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/typeof-2.c [deleted file]
gcc/testsuite/gcc.dg/weak-1.c [deleted file]
gcc/testsuite/gcc.dg/weak-2.c [deleted file]
gcc/testsuite/gcc.dg/weak-3.c [deleted file]
gcc/testsuite/gcc.dg/weak-4.c [deleted file]
gcc/testsuite/gcc.dg/weak-5.c [deleted file]
gcc/testsuite/gcc.dg/weak-6.c [deleted file]
gcc/testsuite/gcc.dg/weak-7.c [deleted file]
gcc/testsuite/gcc.dg/weak-8.c [deleted file]
gcc/testsuite/gcc.dg/weak-9.c [deleted file]
gcc/testsuite/gcc.dg/weak/typeof-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-8.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak-9.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/weak/weak.exp [new file with mode: 0644]

index adc9f532c9b06cce47f820e95ea0fd2a9360889d..578b9b5b63fcc635bb636c2ca859c7265c106044 100644 (file)
@@ -1,3 +1,12 @@
+2002-09-06  Stan Shebs  <shebs@apple.com>
+           David Edelsohn  <edelsohn@gnu.org>
+
+       * gcc.dg/weak: New directory.
+       * gcc.dg/weak-[1-9].c: Move to new directory, remove all
+       target-specific xfail bits.
+       * gcc.dg/typeof-2.c: Move to new directory.
+       * gcc.dg/weak.exp: New expect script.
+
 2002-09-06  Alan Modra  <amodra@bigpond.net.au>
 
        * gcc.c-torture/execute/extzvsi.c: New test.
diff --git a/gcc/testsuite/gcc.dg/typeof-2.c b/gcc/testsuite/gcc.dg/typeof-2.c
deleted file mode 100644 (file)
index 34d67b2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Test typeof with __asm redirection. */
-/* { dg-do compile } */
-/* { dg-options "-O2" } */
-
-extern int foo1 (int x) __asm ("baz1");
-int bar1 (int x) { return x; }
-extern __typeof (bar1) foo1 __attribute ((weak, alias ("bar1")));
-
-extern int foo2 (int x) __attribute__ ((const));
-extern __typeof (foo2) foo2 __asm ("baz2");
-int bar2 (int x)
-{
-  return foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x);
-}
-
-extern int foo3 (int x);
-extern __typeof (foo3) foo3 __asm ("baz3");
-int bar3 (int x)
-{
-  return foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x);
-}
-
-// { dg-final { scan-assembler-not "foo1" } }
-// { dg-final { scan-assembler "baz1" } }
-// { dg-final { scan-assembler-not "foo2" } }
-// { dg-final { scan-assembler "baz2" } }
-// { dg-final { scan-assembler-not "baz2.*baz2.*baz2.*baz2.*baz2.*baz2" } }
-// { dg-final { scan-assembler-not "foo3" } }
-// { dg-final { scan-assembler "baz3.*baz3.*baz3.*baz3.*baz3.*baz3" } }
diff --git a/gcc/testsuite/gcc.dg/weak-1.c b/gcc/testsuite/gcc.dg/weak-1.c
deleted file mode 100644 (file)
index 6cedfea..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?b" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?c" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?d" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?e" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?g" } } */
-/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?i" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?j" } } */
-
-#pragma weak a
-int a;
-
-int b;
-#pragma weak b
-
-#pragma weak c
-extern int c;
-int c;
-
-extern int d;
-#pragma weak d
-int d;
-
-#pragma weak e
-void e(void) { }
-
-#if 0
-/* This permutation is illegal.  */
-void f(void) { }
-#pragma weak f
-#endif
-
-#pragma weak g
-int g = 1;
-
-#if 0
-/* This permutation is illegal.  */
-int h = 1;
-#pragma weak h
-#endif
-
-#pragma weak i
-extern int i;
-
-#pragma weak j
-extern int j;
-int use_j() { return j; }
diff --git a/gcc/testsuite/gcc.dg/weak-2.c b/gcc/testsuite/gcc.dg/weak-2.c
deleted file mode 100644 (file)
index 5310faa..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
-/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
-
-/* test function addresses with #pragma weak */
-
-#pragma weak ffoo1a
-extern void * ffoo1a (void);
-void * foo1a (void)
-{
-  return (void *)ffoo1a;
-}
-
-extern void * ffoo1b (void);
-#pragma weak ffoo1b
-void * foo1b (void)
-{
-  return (void *)ffoo1b;
-}
-
-extern void * ffoo1c (void);  /* { dg-warning "applying #pragma weak" "applying #pragma weak" { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-void * foo1c (void)
-{
-  return (void *)ffoo1c;
-}
-#pragma weak ffoo1c
-
-
-int ffoo1d (void);
-#pragma weak ffoo1d
-
-
-extern void * ffoo1e (void);
-#pragma weak ffoo1e
-void * foo1e (void)
-{
-  if (ffoo1e)
-    ffoo1e ();
-  return 0;
-}
-
diff --git a/gcc/testsuite/gcc.dg/weak-3.c b/gcc/testsuite/gcc.dg/weak-3.c
deleted file mode 100644 (file)
index 26061c2..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-/* { dg-excess-errors "COFF does not support weak symbols" { target *-*-coff i?86-pc-cygwin h8300-*-hms } } */
-/* { dg-excess-errors "Darwin does not support weak symbols" { target *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
-/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1f" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1g" } } */
-
-/* test function addresses with __attribute__((weak)) */
-
-extern void * ffoo1a (void) __attribute__((weak));
-extern void * ffoo1a (void);
-void * foo1a (void)
-{
-  return (void *)ffoo1a;
-}
-
-
-extern void * ffoo1b (void);
-extern void * ffoo1b (void) __attribute__((weak));
-void * foo1b (void)
-{
-  return (void *)ffoo1b;
-}
-
-
-extern void * ffoo1c (void);  
-void * foo1c (void)
-{
-  return (void *)ffoo1c;
-}
-extern void * ffoo1c (void) __attribute__((weak)); /* { dg-warning "weak declaration" "weak declaration" } */
-
-
-int ffoo1d (void);
-int ffoo1d (void) __attribute__((weak));
-
-
-extern void * ffoo1e (void);
-extern void * ffoo1e (void)  __attribute__((weak));
-void * foo1e (void)
-{
-  if (ffoo1e)
-    ffoo1e ();
-  return 0;
-}
-
-
-extern void * ffoo1f (void);    
-extern void * ffoox1f (void);
-void * foo1f (void)
-{
-  if (ffoo1f)
-    ffoo1f ();
-  return 0;
-}
-extern void * ffoo1f (void)  __attribute__((weak, alias ("ffoox1f"))); /* { dg-warning "weak declaration" "weak declaration" } */
-
-
-extern void * ffoo1g (void);
-extern void * ffoox1g (void);
-extern void * ffoo1g (void)  __attribute__((weak, alias ("ffoox1g")));
-void * foo1g (void)
-{
-  if (ffoo1g)
-    ffoo1g ();
-  return 0;
-}
diff --git a/gcc/testsuite/gcc.dg/weak-4.c b/gcc/testsuite/gcc.dg/weak-4.c
deleted file mode 100644 (file)
index f371586..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
-
-/* test variable addresses with #pragma weak */
-
-#pragma weak vfoo1a
-extern int vfoo1a;
-void * foo1a (void)
-{
-  return (void *)&vfoo1a;
-}
-
-
-extern int vfoo1b;
-#pragma weak vfoo1b
-void * foo1b (void)
-{
-  return (void *)&vfoo1b;
-}
-
-
-extern int vfoo1c;  /* { dg-warning "applying #pragma weak" "applying #pragma weak" { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-void * foo1c (void)
-{
-  return (void *)&vfoo1c;
-}
-#pragma weak vfoo1c
-
-
-#pragma weak vfoo1d
-int vfoo1d;
-void * foo1d (void)
-{
-  return (void *)&vfoo1d;
-}
-
-
-int vfoo1e;
-#pragma weak vfoo1e
-void * foo1e (void)
-{
-  return (void *)&vfoo1e;
-}
-
-
-int vfoo1f;
-void * foo1f (void)
-{
-  return (void *)&vfoo1f;
-}
-#pragma weak vfoo1f
-
-
-extern int vfoo1g;  /* { dg-warning "applying #pragma weak" "applying #pragma weak" { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-void * foo1g (void)
-{
-  return (void *)&vfoo1g;
-}
-#pragma weak vfoo1g
-int vfoo1g;
-
-
-extern int vfoo1h;
-void * foo1h (void)
-{
-  return (void *)&vfoo1h;
-}
-int vfoo1h;
-#pragma weak vfoo1h
-
-
-int vfoo1i;
-extern int vfoo1i;
-void * foo1i (void)
-{
-  return (void *)&vfoo1i;
-}
-#pragma weak vfoo1i
-
-
-extern int vfoo1j;
-int vfoo1j;
-void * foo1j (void)
-{
-  return (void *)&vfoo1j;
-}
-#pragma weak vfoo1j
-
-
-#pragma weak vfoo1k
-int vfoo1k = 1;
-
diff --git a/gcc/testsuite/gcc.dg/weak-5.c b/gcc/testsuite/gcc.dg/weak-5.c
deleted file mode 100644 (file)
index 383e36d..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-/* { dg-excess-errors "COFF does not support weak symbols" { target *-*-coff i?86-pc-cygwin h8300-*-hms } } */
-/* { dg-excess-errors "Darwin does not support weak symbols" { target *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1l" } } */
-
-/* test variable addresses with __attribute__ ((weak)) */
-
-extern int vfoo1a __attribute__((weak));
-extern int vfoo1a;
-void * foo1a (void)
-{
-  return (void *)&vfoo1a;
-}
-
-
-extern int vfoo1b;
-extern int vfoo1b __attribute__((weak));
-void * foo1b (void)
-{
-  return (void *)&vfoo1b;
-}
-
-
-extern int vfoo1c;  
-void * foo1c (void)
-{
-  return (void *)&vfoo1c;
-}
-extern int vfoo1c __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
-
-
-extern int vfoo1d __attribute__((weak));
-int vfoo1d;
-void * foo1d (void)
-{
-  return (void *)&vfoo1d;
-}
-
-
-int vfoo1e;
-extern int vfoo1e __attribute__((weak));
-void * foo1e (void)
-{
-  return (void *)&vfoo1e;
-}
-
-
-int vfoo1f;
-void * foo1f (void)
-{
-  return (void *)&vfoo1f;
-}
-extern int vfoo1f __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
-
-
-extern int vfoo1g;
-void * foo1g (void)
-{
-  return (void *)&vfoo1g;
-}
-int vfoo1g __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
-
-
-extern int vfoo1h __attribute__((weak));
-void * foo1h (void)
-{
-  return (void *)&vfoo1h;
-}
-extern int vfoo1h __attribute__((weak));
-int vfoo1h;
-
-
-extern int vfoo1i __attribute__((weak));
-void * foo1i (void)
-{
-  return (void *)&vfoo1i;
-}
-extern int vfoo1i __attribute__((weak));
-extern int vfoo1i;
-
-
-extern int vfoo1j __attribute__((weak));
-void * foo1j (void)
-{
-  return (void *)&vfoo1j;
-}
-extern int vfoo1j;
-extern int vfoo1j __attribute__((weak));
-
-
-extern int vfoo1k __attribute__((weak));
-int vfoo1k = 1;
-
-
-int vfoox1l = 1;
-extern int vfoo1l __attribute__((weak, alias ("vfoox1l")));
diff --git a/gcc/testsuite/gcc.dg/weak-6.c b/gcc/testsuite/gcc.dg/weak-6.c
deleted file mode 100644 (file)
index a6e49c8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/* { dg-do compile } */
-
-extern void * foo (void);
-void * foo (void) { return (void *)foo; } /* { dg-error "precede" "" { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-#pragma weak foo
diff --git a/gcc/testsuite/gcc.dg/weak-7.c b/gcc/testsuite/gcc.dg/weak-7.c
deleted file mode 100644 (file)
index 77a231d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/* { dg-do compile } */
-/* { dg-excess-errors "COFF does not support weak symbols" { target *-*-coff i?86-pc-cygwin h8300-*-hms } } */
-/* { dg-excess-errors "Darwin does not support weak symbols" { target *-*-darwin* } } */
-
-extern void * foo (void);
-void * foo (void) { return (void *)foo; } /* { dg-error "precede" } */
-
-extern void * foo (void) __attribute__((weak));
diff --git a/gcc/testsuite/gcc.dg/weak-8.c b/gcc/testsuite/gcc.dg/weak-8.c
deleted file mode 100644 (file)
index b5bb120..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* { dg-do assemble } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do assemble { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-__attribute__ ((weak)) int i;
-
-int f() {
-  return i;
-}
diff --git a/gcc/testsuite/gcc.dg/weak-9.c b/gcc/testsuite/gcc.dg/weak-9.c
deleted file mode 100644 (file)
index ee919b5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fno-common" } */
-
-/* COFF does not support weak, and dg doesn't support UNSUPPORTED.  */
-/* { dg-do compile { xfail *-*-coff i?86-pc-cygwin h8300-*-hms *-*-darwin* } } */
-
-/* { dg-final { global target_triplet } } */
-/* { dg-final { if [string match *-*-darwin* $target_triplet ] {return} } } */
-/* { dg-final { if [string match h8300-*-hms $target_triplet ] {return} } } */
-/* { dg-final { if [string match i?86-pc-cygwin $target_triplet ] {return} } } */
-/* { dg-final { if [string match *-*-coff $target_triplet ] {return} } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f1" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f2" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f3" } } */
-/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f4" } } */
-/* { dg-final { scan-assembler "notf1" } } */
-/* { dg-final { scan-assembler "notf2" } } */
-/* { dg-final { scan-assembler "notf3" } } */
-/* { dg-final { scan-assembler "notf4" } } */
-
-void f1() __attribute__((weak, alias("notf1")));
-void f2() __attribute__((alias("notf2"), weak));
-
-#pragma weak f3=notf3
-void f3();
-
-void f4();
-#pragma weak f4=notf4
diff --git a/gcc/testsuite/gcc.dg/weak/typeof-2.c b/gcc/testsuite/gcc.dg/weak/typeof-2.c
new file mode 100644 (file)
index 0000000..34d67b2
--- /dev/null
@@ -0,0 +1,29 @@
+/* Test typeof with __asm redirection. */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+extern int foo1 (int x) __asm ("baz1");
+int bar1 (int x) { return x; }
+extern __typeof (bar1) foo1 __attribute ((weak, alias ("bar1")));
+
+extern int foo2 (int x) __attribute__ ((const));
+extern __typeof (foo2) foo2 __asm ("baz2");
+int bar2 (int x)
+{
+  return foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x) + foo2 (x);
+}
+
+extern int foo3 (int x);
+extern __typeof (foo3) foo3 __asm ("baz3");
+int bar3 (int x)
+{
+  return foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x) + foo3 (x);
+}
+
+// { dg-final { scan-assembler-not "foo1" } }
+// { dg-final { scan-assembler "baz1" } }
+// { dg-final { scan-assembler-not "foo2" } }
+// { dg-final { scan-assembler "baz2" } }
+// { dg-final { scan-assembler-not "baz2.*baz2.*baz2.*baz2.*baz2.*baz2" } }
+// { dg-final { scan-assembler-not "foo3" } }
+// { dg-final { scan-assembler "baz3.*baz3.*baz3.*baz3.*baz3.*baz3" } }
diff --git a/gcc/testsuite/gcc.dg/weak/weak-1.c b/gcc/testsuite/gcc.dg/weak/weak-1.c
new file mode 100644 (file)
index 0000000..52d7230
--- /dev/null
@@ -0,0 +1,50 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?a" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?b" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?c" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?d" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?e" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?g" } } */
+/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?i" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?j" } } */
+
+#pragma weak a
+int a;
+
+int b;
+#pragma weak b
+
+#pragma weak c
+extern int c;
+int c;
+
+extern int d;
+#pragma weak d
+int d;
+
+#pragma weak e
+void e(void) { }
+
+#if 0
+/* This permutation is illegal.  */
+void f(void) { }
+#pragma weak f
+#endif
+
+#pragma weak g
+int g = 1;
+
+#if 0
+/* This permutation is illegal.  */
+int h = 1;
+#pragma weak h
+#endif
+
+#pragma weak i
+extern int i;
+
+#pragma weak j
+extern int j;
+int use_j() { return j; }
diff --git a/gcc/testsuite/gcc.dg/weak/weak-2.c b/gcc/testsuite/gcc.dg/weak/weak-2.c
new file mode 100644 (file)
index 0000000..37fa19a
--- /dev/null
@@ -0,0 +1,46 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
+/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
+
+/* test function addresses with #pragma weak */
+
+#pragma weak ffoo1a
+extern void * ffoo1a (void);
+void * foo1a (void)
+{
+  return (void *)ffoo1a;
+}
+
+extern void * ffoo1b (void);
+#pragma weak ffoo1b
+void * foo1b (void)
+{
+  return (void *)ffoo1b;
+}
+
+extern void * ffoo1c (void);  /* { dg-warning "applying #pragma weak" "applying #pragma weak" } */
+void * foo1c (void)
+{
+  return (void *)ffoo1c;
+}
+#pragma weak ffoo1c
+
+
+int ffoo1d (void);
+#pragma weak ffoo1d
+
+
+extern void * ffoo1e (void);
+#pragma weak ffoo1e
+void * foo1e (void)
+{
+  if (ffoo1e)
+    ffoo1e ();
+  return 0;
+}
+
diff --git a/gcc/testsuite/gcc.dg/weak/weak-3.c b/gcc/testsuite/gcc.dg/weak/weak-3.c
new file mode 100644 (file)
index 0000000..47359ed
--- /dev/null
@@ -0,0 +1,71 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1a" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1b" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1c" } } */
+/* { dg-final { scan-assembler-not "weak\[^ \t\]*\[ \t\]_?ffoo1d" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1e" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1f" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?ffoo1g" } } */
+
+/* test function addresses with __attribute__((weak)) */
+
+extern void * ffoo1a (void) __attribute__((weak));
+extern void * ffoo1a (void);
+void * foo1a (void)
+{
+  return (void *)ffoo1a;
+}
+
+
+extern void * ffoo1b (void);
+extern void * ffoo1b (void) __attribute__((weak));
+void * foo1b (void)
+{
+  return (void *)ffoo1b;
+}
+
+
+extern void * ffoo1c (void);  
+void * foo1c (void)
+{
+  return (void *)ffoo1c;
+}
+extern void * ffoo1c (void) __attribute__((weak)); /* { dg-warning "weak declaration" "weak declaration" } */
+
+
+int ffoo1d (void);
+int ffoo1d (void) __attribute__((weak));
+
+
+extern void * ffoo1e (void);
+extern void * ffoo1e (void)  __attribute__((weak));
+void * foo1e (void)
+{
+  if (ffoo1e)
+    ffoo1e ();
+  return 0;
+}
+
+
+extern void * ffoo1f (void);    
+extern void * ffoox1f (void);
+void * foo1f (void)
+{
+  if (ffoo1f)
+    ffoo1f ();
+  return 0;
+}
+extern void * ffoo1f (void)  __attribute__((weak, alias ("ffoox1f"))); /* { dg-warning "weak declaration" "weak declaration" } */
+
+
+extern void * ffoo1g (void);
+extern void * ffoox1g (void);
+extern void * ffoo1g (void)  __attribute__((weak, alias ("ffoox1g")));
+void * foo1g (void)
+{
+  if (ffoo1g)
+    ffoo1g ();
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/weak/weak-4.c b/gcc/testsuite/gcc.dg/weak/weak-4.c
new file mode 100644 (file)
index 0000000..bd530ab
--- /dev/null
@@ -0,0 +1,104 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
+
+/* test variable addresses with #pragma weak */
+
+#pragma weak vfoo1a
+extern int vfoo1a;
+void * foo1a (void)
+{
+  return (void *)&vfoo1a;
+}
+
+
+extern int vfoo1b;
+#pragma weak vfoo1b
+void * foo1b (void)
+{
+  return (void *)&vfoo1b;
+}
+
+
+extern int vfoo1c;  /* { dg-warning "applying #pragma weak" "applying #pragma weak" } */
+void * foo1c (void)
+{
+  return (void *)&vfoo1c;
+}
+#pragma weak vfoo1c
+
+
+#pragma weak vfoo1d
+int vfoo1d;
+void * foo1d (void)
+{
+  return (void *)&vfoo1d;
+}
+
+
+int vfoo1e;
+#pragma weak vfoo1e
+void * foo1e (void)
+{
+  return (void *)&vfoo1e;
+}
+
+
+int vfoo1f;
+void * foo1f (void)
+{
+  return (void *)&vfoo1f;
+}
+#pragma weak vfoo1f
+
+
+extern int vfoo1g;  /* { dg-warning "applying #pragma weak" "applying #pragma weak" } */
+void * foo1g (void)
+{
+  return (void *)&vfoo1g;
+}
+#pragma weak vfoo1g
+int vfoo1g;
+
+
+extern int vfoo1h;
+void * foo1h (void)
+{
+  return (void *)&vfoo1h;
+}
+int vfoo1h;
+#pragma weak vfoo1h
+
+
+int vfoo1i;
+extern int vfoo1i;
+void * foo1i (void)
+{
+  return (void *)&vfoo1i;
+}
+#pragma weak vfoo1i
+
+
+extern int vfoo1j;
+int vfoo1j;
+void * foo1j (void)
+{
+  return (void *)&vfoo1j;
+}
+#pragma weak vfoo1j
+
+
+#pragma weak vfoo1k
+int vfoo1k = 1;
+
diff --git a/gcc/testsuite/gcc.dg/weak/weak-5.c b/gcc/testsuite/gcc.dg/weak/weak-5.c
new file mode 100644 (file)
index 0000000..c4f67e5
--- /dev/null
@@ -0,0 +1,107 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1a" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1b" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1c" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1d" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1e" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1f" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1g" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1h" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1i" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1j" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1k" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?vfoo1l" } } */
+
+/* test variable addresses with __attribute__ ((weak)) */
+
+extern int vfoo1a __attribute__((weak));
+extern int vfoo1a;
+void * foo1a (void)
+{
+  return (void *)&vfoo1a;
+}
+
+
+extern int vfoo1b;
+extern int vfoo1b __attribute__((weak));
+void * foo1b (void)
+{
+  return (void *)&vfoo1b;
+}
+
+
+extern int vfoo1c;  
+void * foo1c (void)
+{
+  return (void *)&vfoo1c;
+}
+extern int vfoo1c __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
+
+
+extern int vfoo1d __attribute__((weak));
+int vfoo1d;
+void * foo1d (void)
+{
+  return (void *)&vfoo1d;
+}
+
+
+int vfoo1e;
+extern int vfoo1e __attribute__((weak));
+void * foo1e (void)
+{
+  return (void *)&vfoo1e;
+}
+
+
+int vfoo1f;
+void * foo1f (void)
+{
+  return (void *)&vfoo1f;
+}
+extern int vfoo1f __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
+
+
+extern int vfoo1g;
+void * foo1g (void)
+{
+  return (void *)&vfoo1g;
+}
+int vfoo1g __attribute__((weak)); /* { dg-warning "unspecified behavior" } */
+
+
+extern int vfoo1h __attribute__((weak));
+void * foo1h (void)
+{
+  return (void *)&vfoo1h;
+}
+extern int vfoo1h __attribute__((weak));
+int vfoo1h;
+
+
+extern int vfoo1i __attribute__((weak));
+void * foo1i (void)
+{
+  return (void *)&vfoo1i;
+}
+extern int vfoo1i __attribute__((weak));
+extern int vfoo1i;
+
+
+extern int vfoo1j __attribute__((weak));
+void * foo1j (void)
+{
+  return (void *)&vfoo1j;
+}
+extern int vfoo1j;
+extern int vfoo1j __attribute__((weak));
+
+
+extern int vfoo1k __attribute__((weak));
+int vfoo1k = 1;
+
+
+int vfoox1l = 1;
+extern int vfoo1l __attribute__((weak, alias ("vfoox1l")));
diff --git a/gcc/testsuite/gcc.dg/weak/weak-6.c b/gcc/testsuite/gcc.dg/weak/weak-6.c
new file mode 100644 (file)
index 0000000..8f88a67
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+extern void * foo (void);
+void * foo (void) { return (void *)foo; } /* { dg-error "precede" } */
+
+#pragma weak foo
diff --git a/gcc/testsuite/gcc.dg/weak/weak-7.c b/gcc/testsuite/gcc.dg/weak/weak-7.c
new file mode 100644 (file)
index 0000000..64d6155
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+
+extern void * foo (void);
+void * foo (void) { return (void *)foo; } /* { dg-error "precede" } */
+
+extern void * foo (void) __attribute__((weak));
diff --git a/gcc/testsuite/gcc.dg/weak/weak-8.c b/gcc/testsuite/gcc.dg/weak/weak-8.c
new file mode 100644 (file)
index 0000000..6e9c267
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do assemble } */
+
+__attribute__ ((weak)) int i;
+
+int f() {
+  return i;
+}
diff --git a/gcc/testsuite/gcc.dg/weak/weak-9.c b/gcc/testsuite/gcc.dg/weak/weak-9.c
new file mode 100644 (file)
index 0000000..e5cbdb8
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-fno-common" } */
+
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f1" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f2" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f3" } } */
+/* { dg-final { scan-assembler "weak\[^ \t\]*\[ \t\]_?f4" } } */
+/* { dg-final { scan-assembler "notf1" } } */
+/* { dg-final { scan-assembler "notf2" } } */
+/* { dg-final { scan-assembler "notf3" } } */
+/* { dg-final { scan-assembler "notf4" } } */
+
+void f1() __attribute__((weak, alias("notf1")));
+void f2() __attribute__((alias("notf2"), weak));
+
+#pragma weak f3=notf3
+void f3();
+
+void f4();
+#pragma weak f4=notf4
diff --git a/gcc/testsuite/gcc.dg/weak/weak.exp b/gcc/testsuite/gcc.dg/weak/weak.exp
new file mode 100644 (file)
index 0000000..595ca92
--- /dev/null
@@ -0,0 +1,41 @@
+#   Copyright (C) 1997 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 2 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CFLAGS
+if ![info exists DEFAULT_CFLAGS] then {
+    set DEFAULT_CFLAGS " -ansi -pedantic-errors"
+}
+
+if { [ check_weak_available ] == 1 } {
+
+    dg-init
+
+    dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
+       "" $DEFAULT_CFLAGS
+
+    dg-finish
+
+} elseif { [ check_weak_available ] == 0 } {
+    unsupported "gcc.dg/weak"
+} else {
+    unresolved "gcc.dg/weak"
+}