Hi, I spotted a place where input_location is clobbered accidentally.
That is in a recursive call to expand_call_inline. The input_location is usually restored by goto egress in this function. Additionally the return value of the recursive expand call is thrown away, which does not look like a good idea. Although this causes no problems ATM, I wanted to fix it anyway. Bootstrapped and reg-tested on x86_64-pc-linux-gnu. Is it OK for trunk? Thanks Bernd.
From 88b963bba7b32972abf0ea44a01c03d643d7c6ca Mon Sep 17 00:00:00 2001 From: Bernd Edlinger <bernd.edlin...@hotmail.de> Date: Mon, 4 Jan 2021 11:35:31 +0100 Subject: [PATCH] Restore input_location after recursive expand_call_inline This is just a precautionary fix. 2021-01-04 Bernd Edlinger <bernd.edlin...@hotmail.de> * tree-inline.c (expand_call_inline): Restore input_location. Return result from recursive call. --- gcc/tree-inline.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 360b85f..9f7d914 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -4840,9 +4840,9 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id, gimple_call_set_fndecl (stmt, edge->callee->decl); update_stmt (stmt); id->src_node->remove (); - expand_call_inline (bb, stmt, id, to_purge); + successfully_inlined = expand_call_inline (bb, stmt, id, to_purge); maybe_remove_unused_call_args (cfun, stmt); - return true; + goto egress; } fn = cg_edge->callee->decl; cg_edge->callee->get_untransformed_body (); -- 1.9.1