diff options
Diffstat (limited to 'meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99450.patch')
-rw-r--r-- | meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99450.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99450.patch b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99450.patch new file mode 100644 index 0000000000..49fa07fca2 --- /dev/null +++ b/meta-oe/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99450.patch @@ -0,0 +1,104 @@ + 2010-12-21 Ulrich Weigand <uweigand@de.ibm.com> + + LP: #662324 + Backport from mainline: + + 2010-12-17 Dodji Seketeli <dodji@redhat.com> + + gcc/ + * dwarf2out.c (gen_type_die_with_usage): Do not try to emit debug + info for a redundant typedef that has DECL_ORIGINAL_TYPE set. Use + that underlying type instead. + + gcc/testsuite/ + * g++.dg/debug/dwarf2/self-ref-1.C: New test. + * g++.dg/debug/dwarf2/self-ref-2.C: Likewise. + +=== modified file 'gcc/dwarf2out.c' +--- old/gcc/dwarf2out.c 2010-10-04 00:50:43 +0000 ++++ new/gcc/dwarf2out.c 2010-12-21 18:46:10 +0000 +@@ -18993,6 +18993,16 @@ + if (type == NULL_TREE || type == error_mark_node) + return; + ++ if (TYPE_NAME (type) != NULL_TREE ++ && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL ++ && is_redundant_typedef (TYPE_NAME (type)) ++ && DECL_ORIGINAL_TYPE (TYPE_NAME (type))) ++ /* The DECL of this type is a typedef we don't want to emit debug ++ info for but we want debug info for its underlying typedef. ++ This can happen for e.g, the injected-class-name of a C++ ++ type. */ ++ type = DECL_ORIGINAL_TYPE (TYPE_NAME (type)); ++ + /* If TYPE is a typedef type variant, let's generate debug info + for the parent typedef which TYPE is a type of. */ + if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL + +=== added file 'gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C' +--- old/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C 1970-01-01 00:00:00 +0000 ++++ new/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-1.C 2010-12-21 18:46:10 +0000 +@@ -0,0 +1,28 @@ ++// Origin: PR debug/45088 ++// { dg-do compile } ++// { dg-options "-g -dA" } ++// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } } ++ ++struct A ++{ ++ virtual ~A(); ++}; ++ ++struct B : public A ++{ ++ virtual ~B(){} ++}; ++ ++struct C : public B ++{ ++ A* a1; ++}; ++ ++int ++main() ++{ ++ C c; ++ c.a1 = 0; ++ return 0; ++} ++ + +=== added file 'gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C' +--- old/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C 1970-01-01 00:00:00 +0000 ++++ new/gcc/testsuite/g++.dg/debug/dwarf2/self-ref-2.C 2010-12-21 18:46:10 +0000 +@@ -0,0 +1,29 @@ ++// Origin: PR debug/45088 ++// { dg-do compile } ++// { dg-options "-g -dA" } ++// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_pointer_type\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_byte_size\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type" 4 } } ++ ++template<class T> ++struct A ++{ ++ virtual ~A(); ++}; ++ ++struct B : public A<int> ++{ ++ virtual ~B(){} ++}; ++ ++struct C : public B ++{ ++ A<int>* a1; ++}; ++ ++int ++main() ++{ ++ C c; ++ c.a1 = 0; ++ return 0; ++} ++ + |