aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Granberg (Zorry) <zorry@gentoo.org>2010-05-05 13:02:15 +0200
committerMagnus Granberg (Zorry) <zorry@gentoo.org>2010-05-05 13:02:15 +0200
commit3cff167bf6c558e9589271d1f986c5745d609d77 (patch)
tree8355be9a5f8fa0086a76ffd849011cf21487dd89
parentFix the upstream warntrampolins patch part5 (diff)
downloadhardened-gccpatchset-3cff167bf6c558e9589271d1f986c5745d609d77.tar.gz
hardened-gccpatchset-3cff167bf6c558e9589271d1f986c5745d609d77.tar.bz2
hardened-gccpatchset-3cff167bf6c558e9589271d1f986c5745d609d77.zip
Added the testsuite to the warntrampolines patch
-rw-r--r--upstream/warntrampolins/README3
-rw-r--r--upstream/warntrampolins/gcc_testsuite_gcc.dg_Wtrampolines.c.patch61
2 files changed, 62 insertions, 2 deletions
diff --git a/upstream/warntrampolins/README b/upstream/warntrampolins/README
index 73166ec..137dfbd 100644
--- a/upstream/warntrampolins/README
+++ b/upstream/warntrampolins/README
@@ -7,6 +7,5 @@
Ported to GCC 4.5.x /Zorry
-We are missing testcase
-Text in invoke.texi
+Missing text in gcc/doc/invoke.texi
/Zorry \ No newline at end of file
diff --git a/upstream/warntrampolins/gcc_testsuite_gcc.dg_Wtrampolines.c.patch b/upstream/warntrampolins/gcc_testsuite_gcc.dg_Wtrampolines.c.patch
new file mode 100644
index 0000000..4dbe34c
--- /dev/null
+++ b/upstream/warntrampolins/gcc_testsuite_gcc.dg_Wtrampolines.c.patch
@@ -0,0 +1,61 @@
+--- gcc/testsuite/gcc.dg/Wtrampolines.c 2010-05-05 12:53:11.000000000 +0200
++++ gcc/testsuite/gcc.dg/Wtrampolines.c 2010-05-05 12:50:06.000000000 +0200
+@@ -0,0 +1,58 @@
++/* PR target/12865 */
++/* Origin: Waldek Hebisch <hebisch@math.uni.wroc.pl> */
++/* Test -Wtrampolines */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target trampolines } */
++/* { dg-options "-O2 -Wtrampolines" } */
++
++#ifndef NO_TRAMPOLINES
++
++/* This used to fail on various versions of Solaris 2 because the
++ trampoline couldn't be made executable. */
++
++extern void abort(void);
++extern double fabs(double);
++
++void foo (void)
++{
++ const int correct[1100] = {1, 0, -2, 0, 1, 0, 1, -1, -10, -30, -67};
++ int i;
++
++ double x1 (void) {return 1; }
++ double x2 (void) {return -1;}
++ double x3 (void) {return -1;}
++ double x4 (void) {return 1; }
++ double x5 (void) {return 0; }
++
++ typedef double pfun(void);
++
++ double a (int k, pfun x1, pfun x2, pfun x3, pfun x4, pfun x5) /* { dg-warning "requires executable stack" } */
++ {
++ double b (void)
++ {
++ k = k - 1;
++ return a (k, b, x1, x2, x3, x4 );
++ }
++
++ if (k <= 0)
++ return x4 () + x5 ();
++ else
++ return b ();
++ }
++
++ for (i=0; i<=10; i++)
++ {
++ if (fabs(a( i, x1, x2, x3, x4, x5 ) - correct [i]) > 0.1)
++ abort();
++ }
++}
++#endif
++
++int main (void)
++{
++#ifndef NO_TRAMPOLINES
++ foo ();
++#endif
++ return 0;
++}