aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-12-13 00:19:32 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-12-13 00:19:32 +0100
commit8318d4ce56634f309a5d47da92ba4fccb72fec15 (patch)
tree560fde10b868dbca3f5a3d1244b1a395a8b4e9b4 /gcc
parenta42a906c420d7bb196cb8541e0ab65264a0b04b0 (diff)
downloadgcc-8318d4ce56634f309a5d47da92ba4fccb72fec15.zip
gcc-8318d4ce56634f309a5d47da92ba4fccb72fec15.tar.gz
gcc-8318d4ce56634f309a5d47da92ba4fccb72fec15.tar.bz2
re PR debug/55665 (Missing DW_TAG_lexical_block PC range)
PR debug/55665 * tree-inline.c (remap_decls): Change nonlocalized_list to pointer to pointer to vector from pointer to vector. (remap_block): Pass address of BLOCK_NONLOCALIZED_VARS. * g++.dg/guality/pr55665.C: New test. From-SVN: r194461
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/guality/pr55665.C33
-rw-r--r--gcc/tree-inline.c8
4 files changed, 45 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5d5dbe0..bb26702 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2012-12-12 Jakub Jelinek <jakub@redhat.com>
+ PR debug/55665
+ * tree-inline.c (remap_decls): Change nonlocalized_list
+ to pointer to pointer to vector from pointer to vector.
+ (remap_block): Pass address of BLOCK_NONLOCALIZED_VARS.
+
PR sanitizer/55508
* builtin-attrs.def (ATTR_TMPURE_NOTHROW_LEAF_LIST,
ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST): New.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 80981f6..e9b645d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2012-12-12 Jakub Jelinek <jakub@redhat.com>
+ PR debug/55665
+ * g++.dg/guality/pr55665.C: New test.
+
* lib/gcc-dg.exp (${tool}_load): Handle non-existing
set_target_env_var the same as if it is empty list.
(dg-set-target-env-var): Fix up error message.
diff --git a/gcc/testsuite/g++.dg/guality/pr55665.C b/gcc/testsuite/g++.dg/guality/pr55665.C
new file mode 100644
index 0000000..16c6d28
--- /dev/null
+++ b/gcc/testsuite/g++.dg/guality/pr55665.C
@@ -0,0 +1,33 @@
+// PR debug/55655
+// { dg-do run }
+// { dg-options "-g" }
+
+extern "C" void abort ();
+struct A { A (int); int a; };
+
+__attribute__((noinline, noclone)) int
+bar (void)
+{
+ return 40;
+}
+
+__attribute__((noinline, noclone)) void
+foo (int x)
+{
+ __asm volatile ("" : : "r" (x) : "memory");
+}
+
+A::A (int x)
+{
+ static int p = bar ();
+ foo (p); // { dg-final { gdb-test 23 "p" "40" } }
+ a = ++p;
+}
+
+int
+main ()
+{
+ A a (42);
+ if (a.a != 41)
+ abort ();
+}
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index a06d7b9..70aa567 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -536,7 +536,7 @@ can_be_nonlocal (tree decl, copy_body_data *id)
}
static tree
-remap_decls (tree decls, vec<tree, va_gc> *nonlocalized_list,
+remap_decls (tree decls, vec<tree, va_gc> **nonlocalized_list,
copy_body_data *id)
{
tree old_var;
@@ -557,7 +557,7 @@ remap_decls (tree decls, vec<tree, va_gc> *nonlocalized_list,
if ((!optimize || debug_info_level > DINFO_LEVEL_TERSE)
&& !DECL_IGNORED_P (old_var)
&& nonlocalized_list)
- vec_safe_push (nonlocalized_list, old_var);
+ vec_safe_push (*nonlocalized_list, old_var);
continue;
}
@@ -575,7 +575,7 @@ remap_decls (tree decls, vec<tree, va_gc> *nonlocalized_list,
if ((!optimize || debug_info_level > DINFO_LEVEL_TERSE)
&& !DECL_IGNORED_P (old_var)
&& nonlocalized_list)
- vec_safe_push (nonlocalized_list, old_var);
+ vec_safe_push (*nonlocalized_list, old_var);
}
else
{
@@ -622,7 +622,7 @@ remap_block (tree *block, copy_body_data *id)
/* Remap its variables. */
BLOCK_VARS (new_block) = remap_decls (BLOCK_VARS (old_block),
- BLOCK_NONLOCALIZED_VARS (new_block),
+ &BLOCK_NONLOCALIZED_VARS (new_block),
id);
if (id->transform_lang_insert_block)