From: Stan Shebs Date: Fri, 6 Sep 2002 13:00:39 +0000 (+0000) Subject: weak: New directory. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=556d006c025885af824930d84776ec7119590850;p=gcc.git weak: New directory. 2002-09-06 Stan Shebs David Edelsohn * 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 From-SVN: r56882 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index adc9f532c9b..578b9b5b63f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2002-09-06 Stan Shebs + David Edelsohn + + * 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 * 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 index 34d67b20fdc..00000000000 --- a/gcc/testsuite/gcc.dg/typeof-2.c +++ /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 index 6cedfeabeda..00000000000 --- a/gcc/testsuite/gcc.dg/weak-1.c +++ /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 index 5310faa0c6f..00000000000 --- a/gcc/testsuite/gcc.dg/weak-2.c +++ /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 index 26061c2bebc..00000000000 --- a/gcc/testsuite/gcc.dg/weak-3.c +++ /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 index f371586be79..00000000000 --- a/gcc/testsuite/gcc.dg/weak-4.c +++ /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 index 383e36d8597..00000000000 --- a/gcc/testsuite/gcc.dg/weak-5.c +++ /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 index a6e49c83717..00000000000 --- a/gcc/testsuite/gcc.dg/weak-6.c +++ /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 index 77a231d88c0..00000000000 --- a/gcc/testsuite/gcc.dg/weak-7.c +++ /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 index b5bb120a87b..00000000000 --- a/gcc/testsuite/gcc.dg/weak-8.c +++ /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 index ee919b590ab..00000000000 --- a/gcc/testsuite/gcc.dg/weak-9.c +++ /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 index 00000000000..34d67b20fdc --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/typeof-2.c @@ -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 index 00000000000..52d7230ed04 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-1.c @@ -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 index 00000000000..37fa19a1a65 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-2.c @@ -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 index 00000000000..47359edcd09 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-3.c @@ -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 index 00000000000..bd530ab5940 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-4.c @@ -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 index 00000000000..c4f67e59c76 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-5.c @@ -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 index 00000000000..8f88a675d31 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-6.c @@ -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 index 00000000000..64d6155a890 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-7.c @@ -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 index 00000000000..6e9c267bd21 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-8.c @@ -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 index 00000000000..e5cbdb8bc87 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak-9.c @@ -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 index 00000000000..595ca92c005 --- /dev/null +++ b/gcc/testsuite/gcc.dg/weak/weak.exp @@ -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" +}