aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-06-05 17:35:13 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-06-05 17:35:13 +0200
commit9f706f23d133a3e4eb5130996461e5cfb2cb706a (patch)
tree12a9da39bc6bfc83111af358d8b58d60dbbd2f22 /gcc/tree.c
parent8f439681a9e2e7fa095868097d0e0cc331734957 (diff)
downloadgcc-9f706f23d133a3e4eb5130996461e5cfb2cb706a.zip
gcc-9f706f23d133a3e4eb5130996461e5cfb2cb706a.tar.gz
gcc-9f706f23d133a3e4eb5130996461e5cfb2cb706a.tar.bz2
re PR middle-end/40340 (Fortification warning no longer emitted in inlines)
PR middle-end/40340 * tree-ssa-live.c (remove_unused_scope_block_p): Don't prune inlined_function_outer_scope_p blocks for artificial inlines even at -g0/-g1. * tree.c (tree_nonartificial_location): Rewrite using block_nonartificial_location. * gcc.dg/pr40340-1.c: New test. * gcc.dg/pr40340-2.c: New test. * gcc.dg/pr40340-3.c: New test. * gcc.dg/pr40340-4.c: New test. * gcc.dg/pr40340-5.c: New test. * gcc.dg/pr40340.h: New file. From-SVN: r148212
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c30
1 files changed, 5 insertions, 25 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 5e562a5..352c553 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -9224,32 +9224,12 @@ block_nonartificial_location (tree block)
location_t
tree_nonartificial_location (tree exp)
{
- tree block = TREE_BLOCK (exp);
+ location_t *loc = block_nonartificial_location (TREE_BLOCK (exp));
- while (block
- && TREE_CODE (block) == BLOCK
- && BLOCK_ABSTRACT_ORIGIN (block))
- {
- tree ao = BLOCK_ABSTRACT_ORIGIN (block);
-
- do
- {
- if (TREE_CODE (ao) == FUNCTION_DECL
- && DECL_DECLARED_INLINE_P (ao)
- && lookup_attribute ("artificial", DECL_ATTRIBUTES (ao)))
- return BLOCK_SOURCE_LOCATION (block);
- else if (TREE_CODE (ao) == BLOCK
- && BLOCK_SUPERCONTEXT (ao) != ao)
- ao = BLOCK_SUPERCONTEXT (ao);
- else
- break;
- }
- while (ao);
-
- block = BLOCK_SUPERCONTEXT (block);
- }
-
- return EXPR_LOCATION (exp);
+ if (loc)
+ return *loc;
+ else
+ return EXPR_LOCATION (exp);
}