On Wed, 13 May 2015, Jan Hubicka wrote: > Thank you! This looks fine. Please add also the testcase that should break if > the new test was wrong andosmeone fixed postreload to allow use of the same > register > this check will prevent wrong code?
I'm checking in a patch with the following additional test. diff --git a/gcc/testsuite/gcc.target/i386/sibcall-8.c b/gcc/testsuite/gcc.target/i386/sibcall-8.c index e69de29..3ab3809 100644 --- a/gcc/testsuite/gcc.target/i386/sibcall-8.c +++ b/gcc/testsuite/gcc.target/i386/sibcall-8.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +extern void abort (void); + +static int __attribute__((regparm(1))) +bar(void *arg) +{ + return arg != bar; +} + +static int __attribute__((noinline,noclone,regparm(1))) +foo(int (__attribute__((regparm(1))) **bar)(void*)) +{ + return (*bar)(*bar); +} + +int main() +{ + int (__attribute__((regparm(1))) *p)(void*) = bar; + if (foo(&p)) + abort(); + return 0; +}