diff options
author | Paul Wögerer <paul_woegerer@mentor.com> | 2011-03-07 15:28:50 +0000 |
---|---|---|
committer | Nathan Froyd <froydnj@gcc.gnu.org> | 2011-03-07 15:28:50 +0000 |
commit | 59527282380bdf54087204235cc7330cd44b067a (patch) | |
tree | 32cef28280f3982cb6aecec7b662e9e936b65df2 /gcc | |
parent | 617718f72d0736e5f8630012d3276a276b9e153f (diff) | |
download | gcc-59527282380bdf54087204235cc7330cd44b067a.zip gcc-59527282380bdf54087204235cc7330cd44b067a.tar.gz gcc-59527282380bdf54087204235cc7330cd44b067a.tar.bz2 |
gimplify.c (gimplify_function_tree): Fix building calls to __builtin_return_address.
gcc/
* gimplify.c (gimplify_function_tree): Fix building calls
to __builtin_return_address.
gcc/testsuite/
* gcc.dg/20001117-1.c: Abort on NULL call_sites.
Co-Authored-By: Nathan Froyd <froydnj@codesourcery.com>
From-SVN: r170738
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gimplify.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20001117-1.c | 18 |
4 files changed, 28 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0918f7a..5b7a188 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-03-07 Paul Wögerer <paul_woegerer@mentor.com> + + * gimplify.c (gimplify_function_tree): Fix building calls + to __builtin_return_address. + 2011-03-07 Alan Modra <amodra@gmail.com> * config/rs6000/linux.h (TARGET_ASM_FILE_END): Don't define. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index cf9495c..400493f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7868,7 +7868,7 @@ gimplify_function_tree (tree fndecl) gimple call; x = implicit_built_in_decls[BUILT_IN_RETURN_ADDRESS]; - call = gimple_build_call (x, 0); + call = gimple_build_call (x, 1, integer_zero_node); tmp_var = create_tmp_var (ptr_type_node, "return_addr"); gimple_call_set_lhs (call, tmp_var); gimplify_seq_add_stmt (&cleanup, call); @@ -7880,7 +7880,7 @@ gimplify_function_tree (tree fndecl) tf = gimple_build_try (seq, cleanup, GIMPLE_TRY_FINALLY); x = implicit_built_in_decls[BUILT_IN_RETURN_ADDRESS]; - call = gimple_build_call (x, 0); + call = gimple_build_call (x, 1, integer_zero_node); tmp_var = create_tmp_var (ptr_type_node, "return_addr"); gimple_call_set_lhs (call, tmp_var); gimplify_seq_add_stmt (&body, call); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e5f44c..9642dfe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-07 Paul Wögerer <paul_woegerer@mentor.com> + Nathan Froyd <froydnj@codesourcery.com> + + * gcc.dg/20001117-1.c: Abort on NULL call_sites. + 2011-03-06 Mark Mitchell <mark@codesourcery.com> * README.QMTEST: Remove. diff --git a/gcc/testsuite/gcc.dg/20001117-1.c b/gcc/testsuite/gcc.dg/20001117-1.c index baf0691..a9de496 100644 --- a/gcc/testsuite/gcc.dg/20001117-1.c +++ b/gcc/testsuite/gcc.dg/20001117-1.c @@ -24,5 +24,19 @@ int main () exit (0); } -void __attribute__((no_instrument_function)) __cyg_profile_func_enter(void *this_fn, void *call_site) { } -void __attribute__((no_instrument_function)) __cyg_profile_func_exit(void *this_fn, void *call_site) { } +/* Abort on non-NULL CALL_SITE to ensure that __builtin_return_address + was expanded properly. */ +void __attribute__((no_instrument_function)) +__cyg_profile_func_enter(void *this_fn, void *call_site) +{ + if (call_site == (void *)0) + abort (); +} + +void __attribute__((no_instrument_function)) +__cyg_profile_func_exit(void *this_fn, void *call_site) +{ + if (call_site == (void *)0) + abort (); +} + |