From 38f76f5f13c9f5d437007d73a2fa8276aa9daaab Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 8 Dec 2011 08:50:35 +0000 Subject: [PATCH] 2011-12-08 Richard Guenther PR lto/48437 * lto-streamer-out.c (tree_is_indexable): Exclude block-local extern declarations. * gcc.dg/lto/20111207-2_0.c: New testcase. * gcc.dg/guality/pr48437.c: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182100 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/lto-streamer-out.c | 10 ++++++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/guality/pr48437.c | 17 +++++++++++++++++ gcc/testsuite/gcc.dg/lto/20111207-2_0.c | 17 +++++++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/guality/pr48437.c create mode 100644 gcc/testsuite/gcc.dg/lto/20111207-2_0.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5d50a192d99..325c1e0763e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-08 Richard Guenther + + PR lto/48437 + * lto-streamer-out.c (tree_is_indexable): Exclude block-local + extern declarations. + 2011-12-07 Andrew Pinski PR middle-end/45416 diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index 62cf9a1832f..655cf89bc28 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -129,6 +129,16 @@ tree_is_indexable (tree t) else if (TREE_CODE (t) == VAR_DECL && decl_function_context (t) && !TREE_STATIC (t)) return false; + /* If this is a decl generated for block local externs for + debug info generation, stream it unshared alongside BLOCK_VARS. */ + else if (VAR_OR_FUNCTION_DECL_P (t) + /* ??? The following tests are a literal match on what + c-decl.c:pop_scope does. */ + && TREE_PUBLIC (t) + && DECL_EXTERNAL (t) + && DECL_CONTEXT (t) + && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL) + return false; else return (TYPE_P (t) || DECL_P (t) || TREE_CODE (t) == SSA_NAME); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31b2d2e37fc..ededf0425f6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-12-08 Richard Guenther + + PR lto/48437 + * gcc.dg/lto/20111207-2_0.c: New testcase. + * gcc.dg/guality/pr48437.c: Likewise. + 2011-12-07 Jakub Jelinek PR c++/51401 diff --git a/gcc/testsuite/gcc.dg/guality/pr48437.c b/gcc/testsuite/gcc.dg/guality/pr48437.c new file mode 100644 index 00000000000..5346baa0bd8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr48437.c @@ -0,0 +1,17 @@ +/* PR lto/48437 */ +/* { dg-do run } */ +/* { dg-options "-g" } */ + +#include "../nop.h" + +int i __attribute__((used)); +int main() +{ + volatile int i; + for (i = 3; i < 7; ++i) + { + extern int i; + asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test 14 "i" "0" } } */ + } + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/20111207-2_0.c b/gcc/testsuite/gcc.dg/lto/20111207-2_0.c new file mode 100644 index 00000000000..672db535a08 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20111207-2_0.c @@ -0,0 +1,17 @@ +/* { dg-lto-do run } */ + +int +test (void) +{ + int f (void); + return 0; +} + +int +main (void) +{ + int f (void); + int test (void); + + return test (); +} -- 2.11.0