Index: gcc/gcc/testsuite/gcc.target/i386/pr12329.c |
diff --git a/gcc/gcc/testsuite/gcc.target/i386/pr12329.c b/gcc/gcc/testsuite/gcc.target/i386/pr12329.c |
index 21d2c6580e20c15b5b3b9a5111ea06a34bfac4df..601480c028365f3bfc17f2a433611a9f839b9399 100644 |
--- a/gcc/gcc/testsuite/gcc.target/i386/pr12329.c |
+++ b/gcc/gcc/testsuite/gcc.target/i386/pr12329.c |
@@ -1,15 +1,47 @@ |
-/* { dg-do compile } */ |
+/* { dg-do run } */ |
/* { dg-require-effective-target ilp32 } */ |
/* { dg-options "-O2" } */ |
extern void abort (void); |
-int test_nested (int i) |
+int test_nested1 (int i) |
{ |
- int __attribute__ ((__noinline__, __regparm__(3))) foo(int j, int k, int l) /* { dg-error "nested functions are limited to 2 register parameters" } */ |
+ int __attribute__ ((__noinline__, __regparm__(3))) foo(int j, int k, int l) |
{ |
return i + j + k + l; |
} |
return foo (i, i+1, i+2); |
} |
+ |
+int test_nested2 (int i) |
+{ |
+ int x; |
+ |
+ int __attribute__ ((__noinline__, __regparm__(3))) foo(int j, int k, int l) |
+ { |
+ return i + j + k + l; |
+ } |
+ |
+ x = foo (i+3, i+1, i+2); |
+ if (x != (4*i + 6)) |
+ abort (); |
+ |
+ return x; |
+} |
+ |
+int |
+main () |
+{ |
+ int i = test_nested1 (3); |
+ |
+ if (i != 15) |
+ abort (); |
+ |
+ i = test_nested2 (4); |
+ |
+ if (i != 22) |
+ abort (); |
+ |
+ return 0; |
+} |