summaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2013-01-18 12:34:11 -0800
committerH.J. Lu <hjl.tools@gmail.com>2013-01-18 12:34:11 -0800
commit43269d882367dc4f0e4c2651d6625e1b7de78764 (patch)
tree6aaf525a6fb8a4fb63a71c9ca56be58bc1d6655b /gcc/tree-inline.c
parentce97ec0e268b7b50b9f801dd12ffc67042c47193 (diff)
parent48dc1117de124a2265129a36bfbbc211522c2c02 (diff)
downloadgcc-43269d882367dc4f0e4c2651d6625e1b7de78764.tar.gz
Merge remote-tracking branch 'origin/gcc-4_7-branch' into hjl/tsx/gcc-4_7-branchhjl/tsx/gcc-4_7-branch
Conflicts: gcc/config/i386/driver-i386.c gcc/config/i386/i386.c gcc/config/i386/sync.md
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index d8eb3a9c1fc..5854bd934ab 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -871,6 +871,7 @@ remap_gimple_op_r (tree *tp, int *walk_subtrees, void *data)
ptr, TREE_OPERAND (*tp, 1));
TREE_THIS_NOTRAP (*tp) = TREE_THIS_NOTRAP (old);
TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
+ TREE_SIDE_EFFECTS (*tp) = TREE_SIDE_EFFECTS (old);
TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
*walk_subtrees = 0;
return NULL;
@@ -3835,6 +3836,12 @@ expand_call_inline (basic_block bb, gimple stmt, copy_body_data *id)
goto egress;
if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (fn))
+ /* For extern inline functions that get redefined we always
+ silently ignored always_inline flag. Better behaviour would
+ be to be able to keep both bodies and use extern inline body
+ for inlining, but we can't do that because frontends overwrite
+ the body. */
+ && !cg_edge->callee->local.redefined_extern_inline
/* Avoid warnings during early inline pass. */
&& cgraph_global_info_ready
/* PR 20090218-1_0.c. Body can be provided by another module. */