* gcc.c-torture/execute/20010122-1.c: Prevent unwanted inlining.

From-SVN: r47002
This commit is contained in:
Alexandre Oliva 2001-11-14 05:48:12 +00:00 committed by Alexandre Oliva
parent c6fa97288a
commit 574f95c48b
2 changed files with 26 additions and 28 deletions

View File

@ -1,3 +1,7 @@
2001-11-14 Alexandre Oliva <aoliva@redhat.com>
* gcc.c-torture/execute/20010122-1.c: Prevent unwanted inlining.
2001-11-13 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/other/forscope1.C: New test.

View File

@ -4,19 +4,21 @@ extern void abort (void);
extern void *alloca (__SIZE_TYPE__);
char *dummy (void);
#define NOINLINE __attribute__((noinline))
void *save_ret1[6];
void *test4a (char *);
void *test5a (char *);
void *test6a (char *);
void *test1 (void)
void NOINLINE *test1 (void)
{
void * temp;
temp = __builtin_return_address (0);
return temp;
}
void *test2 (void)
void NOINLINE *test2 (void)
{
void * temp;
dummy ();
@ -24,7 +26,7 @@ void *test2 (void)
return temp;
}
void *test3 (void)
void NOINLINE *test3 (void)
{
void * temp;
temp = __builtin_return_address (0);
@ -32,28 +34,28 @@ void *test3 (void)
return temp;
}
void *test4 (void)
void NOINLINE *test4 (void)
{
char * save = (char*) alloca (4);
return test4a (save);
}
void *test4a (char * p)
void *NOINLINE test4a (char * p)
{
void * temp;
temp = __builtin_return_address (1);
return temp;
}
void *test5 (void)
void NOINLINE *test5 (void)
{
char * save = (char*) alloca (4);
return test5a (save);
}
void *test5a (char * p)
void NOINLINE *test5a (char * p)
{
void * temp;
dummy ();
@ -61,14 +63,14 @@ void *test5a (char * p)
return temp;
}
void *test6 (void)
void NOINLINE *test6 (void)
{
char * save = (char*) alloca (4);
return test6a (save);
}
void *test6a (char * p)
void NOINLINE *test6a (char * p)
{
void * temp;
temp = __builtin_return_address (1);
@ -78,76 +80,72 @@ void *test6a (char * p)
void *(*func1[6])(void) = { test1, test2, test3, test4, test5, test6 };
char * call_func1_ (int i)
char * NOINLINE call_func1 (int i)
{
save_ret1[i] = func1[i] ();
}
/* We dont' want call_func1_ to be inlined, so call it through a
pointer. */
void (*call_func1)(int) = call_func1_;
static void *ret_addr;
void *save_ret2[6];
void test10a (char *);
void test11a (char *);
void test12a (char *);
void test7 (void)
void NOINLINE test7 (void)
{
ret_addr = __builtin_return_address (0);
return;
}
void test8 (void)
void NOINLINE test8 (void)
{
dummy ();
ret_addr = __builtin_return_address (0);
return;
}
void test9 (void)
void NOINLINE test9 (void)
{
ret_addr = __builtin_return_address (0);
dummy ();
return;
}
void test10 (void)
void NOINLINE test10 (void)
{
char * save = (char*) alloca (4);
test10a (save);
}
void test10a (char * p)
void NOINLINE test10a (char * p)
{
ret_addr = __builtin_return_address (1);
return;
}
void test11 (void)
void NOINLINE test11 (void)
{
char * save = (char*) alloca (4);
test11a (save);
}
void test11a (char * p)
void NOINLINE test11a (char * p)
{
dummy ();
ret_addr = __builtin_return_address (1);
return;
}
void test12 (void)
void NOINLINE test12 (void)
{
char * save = (char*) alloca (4);
test12a (save);
}
void test12a (char * p)
void NOINLINE test12a (char * p)
{
ret_addr = __builtin_return_address (1);
dummy ();
@ -163,16 +161,12 @@ char * dummy (void)
void (*func2[6])(void) = { test7, test8, test9, test10, test11, test12 };
void call_func2_ (int i)
void NOINLINE call_func2 (int i)
{
func2[i] ();
save_ret2[i] = ret_addr;
}
/* We dont' want call_func2_ to be inlined, so call it through a
pointer. */
void (*call_func2)(int) = call_func2_;
int main (void)
{
int i;