PR symtab/11465:
authorKeith Seitz <keiths@redhat.com>
Fri, 20 Aug 2010 17:16:15 +0000 (17:16 +0000)
committerKeith Seitz <keiths@redhat.com>
Fri, 20 Aug 2010 17:16:15 +0000 (17:16 +0000)
* gdb.dwarf2/pr11465.exp: New test.
* gdb.dwarf2/pr11465.S: New file.
* gdb.dwarf2/dw2-double-set-die-type.S: New file.
* gdb.dwarf2/dw2-double-set-die-type.exp: New test.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/pr11465.S [new file with mode: 0644]
gdb/testsuite/gdb.dwarf2/pr11465.exp [new file with mode: 0644]

index a75d2574254aa58203a265f69ca0da510567ef9e..c44e472f93eab58e735a3cb6aeedb63a5d963b15 100644 (file)
@@ -1,3 +1,11 @@
+2010-08-20  Keith Seitz  <keiths@redhat.com>
+
+       PR symtab/11465:
+       * gdb.dwarf2/pr11465.exp: New test.
+       * gdb.dwarf2/pr11465.S: New file.
+       * gdb.dwarf2/dw2-double-set-die-type.S: New file.
+       * gdb.dwarf2/dw2-double-set-die-type.exp: New test.
+
 2010-08-19  Thiago Jung Bauermann  <bauerman@br.ibm.com>
 
        * gdb.arch/vsx-regs.exp: Remove wrong comment about testing AltiVec
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.S
new file mode 100644 (file)
index 0000000..1b70f44
--- /dev/null
@@ -0,0 +1,632 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* This test triggers a complaint when gdb attempts to set a DIE's
+   type twice.  The test was derived from the following source code:
+
+   #include <vector>
+
+   class a
+   {
+   private:
+     class b
+     {
+     public:
+       b () { }
+     };
+
+     std::vector<b> list_;
+   };
+
+  What follows below is a much simplified version of the debug info generated
+  by gcc from the above code.  */
+
+#define OFFSET(LBL) .Ldie_ ## LBL - .Lcu1_begin
+
+       .section        .debug_info
+.Lcu1_begin:
+       .4byte  .Lcu1_end - .Lcu1_start # Length of Compilation Unit Info
+.Lcu1_start:
+       .value  0x3     # DWARF version number
+       .long   .Labbrev1_begin # Offset Into Abbrev. Section
+       .byte   0x4     # Pointer Size (in bytes)
+
+.Ldie_b:
+       .uleb128 0x1    # (DIE (0xb) DW_TAG_compile_unit)
+       .ascii  "GNU C++ 4.4.3 20100127 (Red Hat 4.4.3-4)\0"    # DW_AT_producer
+       .byte   0x4     # DW_AT_language
+       .ascii  "duplicate-type.cc\0"   # DW_AT_name
+       .long   .Ldebug_line0   # DW_AT_stmt_list
+
+.Ldie_38:
+       .uleb128 0x3    # (DIE (0x38) DW_TAG_typedef)
+       .ascii  "size_t\0"      # DW_AT_name
+       .long   OFFSET (43)     # DW_AT_type
+
+.Ldie_43:
+       .uleb128 0x2    # (DIE (0x43) DW_TAG_base_type)
+       .byte   0x4     # DW_AT_byte_size
+       .byte   0x7     # DW_AT_encoding
+       .ascii  "long unsigned int\0" # DW_AT_name
+
+.Ldie_4a:
+       .uleb128 0x4    # (DIE (0x4a) DW_TAG_namespace)
+       .ascii "std\0"  # DW_AT_name
+       .long   OFFSET (143)    # DW_AT_sibling
+
+.Ldie_70:
+       .uleb128 0x8    # (DIE (0x70) DW_TAG_class_type)
+       .ascii  "allocator<a::b>\0"     # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+
+.Ldie_76:
+       .uleb128 0x9    # (DIE (0x76) DW_TAG_structure_type)
+       .ascii  "_Vector_base<a::b, std::allocator<a::b> >\0"   # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (f7)     # DW_AT_sibling
+
+.Ldie_80:
+       .uleb128 0xa    # (DIE (0x80) DW_TAG_structure_type)
+       .ascii  "_Vector_impl\0"        # DW_AT_name
+       .byte   0x18    # DW_AT_byte_size
+
+.Ldie_88:
+       .uleb128 0xb    # (DIE (0x88) DW_TAG_inheritance)
+       .long   OFFSET (3e0)    # DW_AT_type
+       .sleb128 0      # DW_AT_data_member_location
+       .byte   0x1     # DW_AT_accessibility
+       .byte   0x0     # end of children of DIE 0x80
+       .byte   0x0     # end of children of DIE 0x76
+
+.Ldie_f7:
+       .uleb128 0x8    # (DIE (0xf7) DW_TAG_class_type)
+       .ascii  "vector<a::b, std::allocator<a::b> >\0" # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+       .byte   0x0     # end of children of DIE 0x4a
+
+.Ldie_143:
+       .uleb128 0x13   # (DIE (0x143) DW_TAG_base_type)
+       .byte   0x4     # DW_AT_byte_size
+       .byte   0x5     # DW_AT_encoding
+
+.Ldie_162:
+       .uleb128 0x8    # (DIE (0x162) DW_TAG_class_type)
+       .ascii  "new_allocator<a::b>\0" # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+
+.Ldie_19f:
+       .uleb128 0x2    # (DIE (0x19f) DW_TAG_base_type)
+       .byte   0x4     # DW_AT_byte_size
+       .byte   0x5     # DW_AT_encoding
+       .ascii "int\0"  # DW_AT_name
+
+.Ldie_1c6:
+       .uleb128 0x17   # (DIE (0x1c6) DW_TAG_pointer_type)
+       .byte   0x8     # DW_AT_byte_size
+       .long   OFFSET (1cc)    # DW_AT_type
+
+.Ldie_1cc:
+       .uleb128 0x18   # (DIE (0x1cc) DW_TAG_const_type)
+
+.Ldie_1cd:
+       .uleb128 0x2    # (DIE (0x1cd) DW_TAG_base_type)
+       .byte   0x1     # DW_AT_byte_size
+       .byte   0x6     # DW_AT_encoding
+       .ascii  "char\0"        # DW_AT_name
+
+.Ldie_221:
+       .uleb128 0x1b   # (DIE (0x221) DW_TAG_class_type)
+       .ascii "a\0"    # DW_AT_name
+       .byte   0x18    # DW_AT_byte_size
+       .long   OFFSET (277)    # DW_AT_sibling
+
+.Ldie_22b:
+       .uleb128 0x1b   # (DIE (0x22b) DW_TAG_class_type)
+       .ascii "b\0"    # DW_AT_name
+       .byte   0x1     # DW_AT_byte_size
+       .long   OFFSET (244)    # DW_AT_sibling
+
+.Ldie_235:
+       .uleb128 0x1c   # (DIE (0x235) DW_TAG_subprogram)
+       .byte   0x1     # DW_AT_external
+       .ascii "b\0"    # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+
+.Ldie_23c:
+       .uleb128 0xe    # (DIE (0x23c) DW_TAG_formal_parameter)
+       .long   OFFSET (277)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+       .byte   0x0     # end of children of DIE 0x235
+       .byte   0x0     # end of children of DIE 0x22b
+
+.Ldie_244:
+       .uleb128 0x1d   # (DIE (0x244) DW_TAG_member)
+       .ascii  "list\0"        # DW_AT_name
+       .long   OFFSET (59d)    # DW_AT_type
+       .sleb128 0      # DW_AT_data_member_location
+       .byte   0x3     # DW_AT_accessibility
+
+.Ldie_251:
+       .uleb128 0x1e   # (DIE (0x251) DW_TAG_subprogram)
+       .byte   0x1     # DW_AT_external
+       .ascii "a\0"    # DW_AT_name
+       .byte   0x1     # DW_AT_artificial
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (262)    # DW_AT_sibling
+
+.Ldie_25b:
+       .uleb128 0xe    # (DIE (0x25b) DW_TAG_formal_parameter)
+       .long   OFFSET (b61)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+       .byte   0x0     # end of children of DIE 0x251
+
+.Ldie_262:
+       .uleb128 0x1f   # (DIE (0x262) DW_TAG_subprogram)
+       .byte   0x1     # DW_AT_external
+       .ascii "~a\0"   # DW_AT_name
+       .byte   0x1     # DW_AT_artificial
+       .byte   0x1     # DW_AT_declaration
+
+.Ldie_269:
+       .uleb128 0xe    # (DIE (0x269) DW_TAG_formal_parameter)
+       .long   OFFSET (b61)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+
+.Ldie_26f:
+       .uleb128 0xe    # (DIE (0x26f) DW_TAG_formal_parameter)
+       .long   OFFSET (19f)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+       .byte   0x0     # end of children of DIE 0x262
+       .byte   0x0     # end of children of DIE 0x221
+
+.Ldie_277:
+       .uleb128 0x17   # (DIE (0x277) DW_TAG_pointer_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (22b)    # DW_AT_type
+
+.Ldie_27d:
+       .uleb128 0x20   # (DIE (0x27d) DW_TAG_class_type)
+       .long   OFFSET (162)    # DW_AT_specification
+       .byte   0x1     # DW_AT_byte_size
+       .long   OFFSET (3b2)    # DW_AT_sibling
+
+.Ldie_2d0:
+       .uleb128 0x21   # (DIE (0x2d0) DW_TAG_subprogram)
+       .byte   0x1     # DW_AT_external
+       .ascii  "address\0"     # DW_AT_name
+       .long   OFFSET (277)    # DW_AT_type
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (3b2)    # DW_AT_sibling
+
+.Ldie_2e5:
+       .uleb128 0xe    # (DIE (0x2e5) DW_TAG_formal_parameter)
+       .long   OFFSET (3da)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+
+.Ldie_2eb:
+       .uleb128 0xf    # (DIE (0x2eb) DW_TAG_formal_parameter)
+       .long   OFFSET (3bd)    # DW_AT_type
+       .byte   0x0     # end of children of DIE 0x2d0
+       .byte   0x0     # end of children of DIE 0x27d
+
+.Ldie_3b2:
+       .uleb128 0x17   # (DIE (0x3b2) DW_TAG_pointer_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (3b8)    # DW_AT_type
+
+.Ldie_3b8:
+       .uleb128 0x19   # (DIE (0x3b8) DW_TAG_const_type)
+       .long   OFFSET (22b)    # DW_AT_type
+
+.Ldie_3bd:
+       .uleb128 0x22   # (DIE (0x3bd) DW_TAG_reference_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (22b)    # DW_AT_type
+
+.Ldie_3d5:
+       .uleb128 0x19   # (DIE (0x3d5) DW_TAG_const_type)
+       .long   OFFSET (27d)    # DW_AT_type
+
+.Ldie_3da:
+       .uleb128 0x17   # (DIE (0x3da) DW_TAG_pointer_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (3d5)    # DW_AT_type
+
+.Ldie_3e0:
+       .Uleb128 0x20   # (DIE (0x3e0) DW_TAG_class_type)
+       .long   OFFSET (70)     # DW_AT_specification
+       .byte   0x1     # DW_AT_byte_size
+       .long   OFFSET (44e)    # DW_AT_sibling
+
+.Ldie_3ec:
+       .uleb128 0xb    # (DIE (0x3ec) DW_TAG_inheritance)
+       .long   OFFSET (27d)    # DW_AT_type
+       .sleb128 0      # DW_AT_data_member_location
+       .byte   0x1     # DW_AT_accessibility
+       .byte   0x0     # end of children of DIE 0x3e0
+
+.Ldie_44e:
+       .uleb128 0x1a   # (DIE (0x44e) DW_TAG_structure_type)
+       .long   OFFSET (76)     # DW_AT_specification
+       .byte   0x18    # DW_AT_byte_size
+       .long   OFFSET (505)    # DW_AT_sibling
+
+.Ldie_505:
+       .uleb128 0x11   # (DIE (0x505) DW_TAG_subprogram)
+       .ascii  "~_Vector_base\0"       # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (51f)    # DW_AT_sibling
+
+.Ldie_512:
+       .uleb128 0xe    # (DIE (0x512) DW_TAG_formal_parameter)
+       .long   OFFSET (58c)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+
+.Ldie_518:
+       .uleb128 0xf    # (DIE (0x518) DW_TAG_formal_parameter)
+       .long   OFFSET (19f)    # DW_AT_type
+       .byte   0x0     # end of children of DIE 0x505
+
+.Ldie_51f:
+       .uleb128 0x21   # (DIE (0x51f) DW_TAG_subprogram)
+       .byte   0x1     # DW_AT_external
+       .ascii  "_M_allocate\0" # DW_AT_name
+       .long   OFFSET (277)    # DW_AT_type
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (540)    # DW_AT_sibling
+
+.Ldie_540:
+       .uleb128 0x11   # (DIE (0x540) DW_TAG_subprogram)
+       .ascii  "_M_deallocate\0"       # DW_AT_name
+       .byte   0x1     # DW_AT_declaration
+       .long   OFFSET (562)    # DW_AT_sibling
+
+.Ldie_551:
+       .uleb128 0xe    # (DIE (0x551) DW_TAG_formal_parameter)
+       .long   OFFSET (58c)    # DW_AT_type
+       .byte   0x1     # DW_AT_artificial
+
+.Ldie_557:
+       .uleb128 0xf    # (DIE (0x557) DW_TAG_formal_parameter)
+       .long   OFFSET (277)    # DW_AT_type
+
+.Ldie_55c:
+       .uleb128 0xf    # (DIE (0x55c) DW_TAG_formal_parameter)
+       .long   OFFSET (43)     # DW_AT_type
+       .byte   0x0     # end of children of DIE 0x540
+
+.Ldie_562:
+       .uleb128 0x5    # (DIE (0x562) DW_TAG_imported_declaration)
+       .long   OFFSET (51f)    # DW_AT_import
+       .byte   0x0     # end of children of DIE 0x44e
+
+.Ldie_586:
+       .uleb128 0x22   # (DIE (0x586) DW_TAG_reference_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (3e0)    # DW_AT_type
+
+.Ldie_58c:
+       .uleb128 0x17   # (DIE (0x58c) DW_TAG_pointer_type)
+       .byte   0x8     # DW_AT_byte_size
+       .long   OFFSET (44e)    # DW_AT_type
+
+.Ldie_59d:
+       .uleb128 0x20   # (DIE (0x59d) DW_TAG_class_type)
+       .long   OFFSET (f7)     # DW_AT_specification
+       .byte   0x18    # DW_AT_byte_size
+       .long   OFFSET (b44)    # DW_AT_sibling
+
+.Ldie_5a9:
+       .uleb128 0xb    # (DIE (0x5a9) DW_TAG_inheritance)
+       .long   OFFSET (44e)    # DW_AT_type
+       .sleb128 0      # DW_AT_data_member_location
+       .byte   0x2     # DW_AT_accessibility
+       .byte   0x0     # end of children of DIE 0x59d
+
+.Ldie_b44:
+       .uleb128 0x17   # (DIE (0xb44) DW_TAG_pointer_type)
+       .byte   0x8     # DW_AT_byte_size
+       .long   OFFSET (59d) # DW_AT_type
+
+.Ldie_b61:
+       .uleb128 0x17   # (DIE (0xb61) DW_TAG_pointer_type)
+       .byte   0x4     # DW_AT_byte_size
+       .long   OFFSET (221) # DW_AT_type
+       .byte   0x0     # end of children of DIE 0xb
+.Lcu1_end:
+
+/* Abbrev table */
+       .section        .debug_abbrev
+       .uleb128 0x1    # (abbrev code)
+       .uleb128 0x11   # (TAG: DW_TAG_compile_unit)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x25   # (DW_AT_producer)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x13   # (DW_AT_language)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_sting)
+       .uleb128 0x10   # (DW_AT_stmt_list)
+       .uleb128 0x6    # (DW_FORM_data4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x2    # (abbrev code)
+       .uleb128 0x24   # (DW_TAG_base_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x3e   # (DW_AT_encoding)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x3    # (abbrev code)
+       .uleb128 0x16   # (TAG: DW_TAG_typedef)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x4    # (abbrev code)
+       .uleb128 0x39   # (TAG: DW_TAG_namespace)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x5    # (abbrev code)
+       .uleb128 0x8    # (TAG: DW_TAG_imported_declaration)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x18   # (DW_AT_import)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x8    # (abbrev code)
+       .uleb128 0x2    # (TAG: DW_TAG_class_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x9    # (abbrev code)
+       .uleb128 0x13   # (TAG: DW_TAG_structure_type)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0xa    # (abbrev code)
+       .uleb128 0x13   # (TAG: DW_TAG_structure_type)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0xb    # (abbrev code)
+       .uleb128 0x1c   # (TAG: DW_TAG_inheritance)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0x38   # (DW_AT_data_member_location)
+       .uleb128 0xd    # (DW_FORM_sdata)
+       .uleb128 0x32   # (DW_AT_accessibility)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0xe    # (abbrev code)
+       .uleb128 0x5    # (TAG: DW_TAG_formal_parameter)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0x34   # (DW_AT_artificial)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0xf    # (abbrev code)
+       .uleb128 0x5    # (TAG: DW_TAG_formal_parameter)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x11   # (abbrev code)
+       .uleb128 0x2e   # (DW_TAG_subprogram)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x13   # (abbrev code)
+       .uleb128 0x24   # (DW_TAG_base_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x3e   # (DW_AT_encoding)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x17   # (abbrev code)
+       .uleb128 0xf    # (TAG: DW_TAG_pointer_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x18   # (abbrev code)
+       .uleb128 0x26   # (TAG: DW_TAG_const_type)
+       .byte   0x0     # DW_children_no
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x19   # (abbrev code)
+       .uleb128 0x26   # (TAG: DW_TAG_const_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1a   # (abbrev code)
+       .uleb128 0x13   # (TAG: DW_TAG_structure_type)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x47   # (DW_AT_specification)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1b   # (abbrev code)
+       .uleb128 0x2    # (TAG: DW_TAG_class_type)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1c   # (abbrev code)
+       .uleb128 0x2e   # (TAG: DW_TAG_subprogram)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3f   # (DW_AT_external)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1d   # (abbrev code)
+       .uleb128 0xd    # (TAG: DW_TAG_member)
+       .byte   0x0     # DW_children_no
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0x38   # (DW_AT_data_member_location)
+       .uleb128 0xd    # (DW_FORM_sdata)
+       .uleb128 0x32   # (DW_AT_accessibility)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1e   # (abbrev code)
+       .uleb128 0x2e   # (TAG: DW_TAG_subprogram)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3f   # (DW_AT_external)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x34   # (DW_AT_artificial)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x1f   # (abbrev code)
+       .uleb128 0x2e   # (TAG: DW_TAG_subprogram)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3f   # (DW_AT_external)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x34   # (DW_AT_artificial)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x20   # (abbrev code)
+       .uleb128 0x2    # (TAG: DW_TAG_class_type)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x47   # (DW_AT_specification)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x21   # (abbrev code)
+       .uleb128 0x2e   # (TAG: DW_TAG_subprogram)
+       .byte   0x1     # DW_children_yes
+       .uleb128 0x3f   # (DW_AT_external)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x3    # (DW_AT_name)
+       .uleb128 0x8    # (DW_FORM_string)
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .uleb128 0x3c   # (DW_AT_declaration)
+       .uleb128 0xc    # (DW_FORM_flag)
+       .uleb128 0x1    # (DW_AT_sibling)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
+
+       .uleb128 0x22   # (abbrev code)
+       .uleb128 0x10   # (TAG: DW_TAG_reference_type)
+       .byte   0x0     # DW_children_no
+       .uleb128 0xb    # (DW_AT_byte_size)
+       .uleb128 0xb    # (DW_FORM_data1)
+       .uleb128 0x49   # (DW_AT_type)
+       .uleb128 0x13   # (DW_FORM_ref4)
+       .byte   0x0
+       .byte   0x0
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp b/gdb/testsuite/gdb.dwarf2/dw2-double-set-die-type.exp
new file mode 100644 (file)
index 0000000..50b1182
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Test DW_TAG_inheritance using constant DW_AT_data_member_location
+# introduced by GCC PR debug/40659.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+    && ![istarget *-*-gnu*]
+    && ![istarget *-*-elf*]
+    && ![istarget *-*-openbsd*]
+    && ![istarget arm-*-eabi*]
+    && ![istarget powerpc-*-eabi*]} {
+    return 0  
+}
+
+set testfile "dw2-double-set-die-type"
+set srcfile "$testfile.S"
+set executable "$testfile.x"
+
+if  { [gdb_compile [file join $srcdir $subdir $srcfile] \
+          [file join $objdir $subdir $executable] \
+          object {nodebug}] != "" } {
+    return -1
+}
+
+clean_restart $executable
+gdb_test "ptype a" "type = class .*"
diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.S b/gdb/testsuite/gdb.dwarf2/pr11465.S
new file mode 100644 (file)
index 0000000..8d805dd
--- /dev/null
@@ -0,0 +1,355 @@
+/* Copyright 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Compiled from:
+
+    namespace N
+    {
+      class C
+      {
+      public:
+        typedef void (*t) (C);
+        C (t) {}
+      };
+      typedef C::t u;
+      u f;
+      C c (f);
+    };
+
+    int
+    main ()
+    {
+      return 0;
+    }
+*/
+
+       .text
+_ZN1N1cE:      
+       .section        .debug_info
+d:
+       .long   .Ldebug_info_end - 1f /* Length of CU info */
+1:
+       .2byte  0x2             /* DWARF version number */
+       .long   .Ldebug_abbrev0 /* Abbrev offset */
+       .byte   0x4             /* Pointer size */
+dieb:  .uleb128 0x1            /* DW_TAG_compile_unit */
+       .long   .LASF4          /* DW_AT_producer */
+       .byte   0x4             /* DW_AT_language */
+       .long   .LASF5          /* DW_AT_name */
+       .long   .LASF6          /* DW_AT_comp_dir */
+       .long   0x0             /* DW_AT_low_pc */
+       .long   0x0             /* DW_AT_high_pc */
+       .long   0x0             /* DW_AT_entry_pc */
+die29: .uleb128 0x2            /* DW_TAG_namespace */
+       .string "N"             /* DW_AT_name */
+die32: .uleb128 0x3            /* DW_TAG_class_type */
+       .string "C"             /* DW_AT_name */
+       .byte   0x1             /* DW_AT_declaration */
+die36: .uleb128 0x4            /* DW_TAG_typedef */
+       .string "u"             /* DW_AT_name */
+       .long   die7e-d         /* DW_AT_type */
+die3f: .uleb128 0x5            /* DW_TAG_variable */
+       .string "f"             /* DW_AT_name */
+       .long   .LASF0          /* DW_AT_MIPS_linkage_name */
+       .long   die36-d         /* DW_AT_type */
+       .byte   0x1             /* DW_AT_external */
+       .byte   0x1             /* DW_AT_declaration */
+die4e: .uleb128 0x5            /* DW_TAG_variable */
+       .string "c"             /* DW_AT_name */
+       .long   .LASF1          /* DW_AT_MIPS_linkage_name */
+       .long   die5e-d         /* DW_AT_type */
+       .byte   0x1             /* DW_AT_external */
+       .byte   0x1             /* DW_AT_declaration */
+       .byte   0x0
+die5e: .uleb128 0x6            /* DW_TAG_class_type */
+       .long   die32-d         /* DW_AT_specification */
+       .byte   0x1             /* DW_AT_byte_size */
+die6a: .uleb128 0x7            /* DW_TAG_subprogram */
+       .byte   0x1             /* DW_AT_external */
+       .string "C"             /* DW_AT_name */
+       .byte   0x1             /* DW_AT_declaration */
+die71: .uleb128 0x8            /* DW_TAG_formal_parameter */
+       .long   die8f-d         /* DW_AT_type */
+       .byte   0x1             /* DW_AT_artificial */
+die77: .uleb128 0x9            /* DW_TAG_formal_parameter */
+       .long   die7e-d         /* DW_AT_type */
+       .byte   0x0
+       .byte   0x0
+die7e: .uleb128 0xa            /* DW_TAG_pointer_type */
+       .byte   0x4             /* DW_AT_byte_size */
+       .long   die84-d         /* DW_AT_type */
+die84: .uleb128 0xb            /* DW_TAG_subroutine_type */
+die89: .uleb128 0x9            /* DW_TAG_formal_parameter */
+       .long   die5e-d         /* DW_AT_type */
+       .byte   0x0
+die8f: .uleb128 0xa            /* DW_TAG_pointer_type */
+       .byte   0x4             /* DW_AT_byte_size */
+       .long   die5e-d         /* DW_AT_type */
+die95: .uleb128 0xc            /* DW_TAG_subprogram */
+       .long   die6a-d         /* DW_AT_specification */
+       .byte   0x2             /* DW_AT_inline */
+die9f: .uleb128 0xd            /* DW_TAG_formal_parameter */
+       .long   .LASF7          /* DW_AT_name */
+       .long   dieaf-d         /* DW_AT_type */
+       .byte   0x1             /* DW_AT_artificial */
+diea9: .uleb128 0x9            /* DW_TAG_formal_parameter */
+       .long   die7e-d         /* DW_AT_type */
+       .byte   0x0
+dieaf: .uleb128 0xe            /* DW_TAG_const_type */
+       .long   die8f-d         /* DW_AT_type */
+dieb4: .uleb128 0xf            /* DW_TAG_subprogram */
+       .long   die95-d         /* DW_AT_abstract_origin */
+       .long   _ZN1N1cE        /* DW_AT_low_pc */
+       .long   _ZN1N1cE        /* DW_AT_high_pc */
+diec9: .uleb128 0x10           /* DW_TAG_subprogram */
+       .long   die9f-d         /* DW_AT_abstract_origin */
+       .byte   2f-1f           /* DW_AT_location */
+1:
+       .byte   0x50            /* DW_OP_reg0 */
+2:
+died1: .uleb128 0x10           /* DW_TAG_formal_parameter */
+       .long   diea9-d         /* DW_AT_abstract_origin */
+       .byte   2f-1f           /* DW_AT_location */
+1:
+       .byte   0x51            /* DW_OP_reg1 */
+2:
+       .byte   0x0
+dieda: .uleb128 0x11           /* DW_TAG_subprogram */
+       .byte   0x1             /* DW_AT_external */
+       .long   .LASF8          /* DW_AT_name */
+       .long   dief2-d         /* DW_AT_type */
+       .long   _ZN1N1cE        /* DW_AT_low_pc */
+       .long   _ZN1N1cE        /* DW_AT_high_pc */
+dief2: .uleb128 0x12           /* DW_TAG_base_type */
+       .byte   0x4             /* DW_AT_byte_size */
+       .byte   0x5             /* DW_AT_encoding */
+       .string "int"           /* DW_AT_name */
+die149:        .uleb128 0x16           /* DW_TAG_variable */
+       .long   die4e-d         /* DW_AT_specification */
+       .byte   0x5             /* DW_AT_location */
+       .byte   0x3
+       .long   _ZN1N1cE
+       .byte   0x0
+.Ldebug_info_end:
+       .section        .debug_abbrev
+.Ldebug_abbrev0:
+       .uleb128 0x1            /* abbrev code*/
+       .uleb128 0x11           /* DW_TAG_compile_unit */
+       .byte   0x1             /* DW_children_yes */
+       .uleb128 0x25           /* DW_AT_producer*/
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x13           /* DW_AT_language */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x1b           /* DW_AT_comp_dir */
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x11           /* DW_AT_low_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .uleb128 0x12           /* DW_AT_high_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .uleb128 0x52           /* DW_AT_entry_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x2            /* abbrev code */
+       .uleb128 0x39           /* DW_TAG_namespace */
+       .byte   0x1             /* DW_children_yes */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x3            /* abbrev code */
+       .uleb128 0x2            /* DW_TAG_class_type */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .uleb128 0x3c           /* DW_AT_declaration */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x4            /* abbrev code */
+       .uleb128 0x16           /* DW_TAG_typedef */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x5            /* abbrev code */
+       .uleb128 0x34           /* DW_TAG_variable */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .uleb128 0x2007         /* DW_AT_MIPS_linkage_name */
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x49           /* DW_AT_TYPE */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x3f           /* DW_AT_external */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .uleb128 0x3c           /* DW_AT_declaration */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x6            /* abbrev code */
+       .uleb128 0x2            /* DW_TAG_class_type */
+       .byte   0x1             /* DW_has_children_yes */
+       .uleb128 0x47           /* DW_AT_specification */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0xb            /* DW_AT_byte_size */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x7            /* abbrev code */
+       .uleb128 0x2e           /* DW_TAG_subprogra */
+       .byte   0x1             /* DW_has_children_yes */
+       .uleb128 0x3f           /* DW_AT_external */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .uleb128 0x3c           /* DW_AT_declaration */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x8            /* abbrev code */
+       .uleb128 0x5            /* DW_TAG_formal_parameter */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x34           /* DW_AT_artificial */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x9            /* abbrev code */
+       .uleb128 0x5            /* DW_TAG_formal_parameter */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xa            /* abbrev code */
+       .uleb128 0xf            /* DW_TAG_pointer_type */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0xb            /* DW_AT_byte_size */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xb            /* abbrev code */
+       .uleb128 0x15           /* DW_TAG_subroutine_type */
+       .byte   0x1             /* DW_has_children_yes */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xc            /* abbrev code */
+       .uleb128 0x2e           /* DW_TAG_subprogram */
+       .byte   0x1             /* DW_has_children_yes */
+       .uleb128 0x47           /* DW_AT_specification */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x20           /* DW_AT_inline */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xd            /* abbrev code */
+       .uleb128 0x5            /* DW_TAG_formal_parameter */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x34           /* DW_AT_artificial */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xe            /* abbrev code */
+       .uleb128 0x26           /* DW_TAG_const_type */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0xf            /* abbrev code */
+       .uleb128 0x2e           /* DW_TAG_subprogram */
+       .byte   0x1             /* DW_has_children_yes */
+       .uleb128 0x31           /* DW_AT_abstract_origin */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x11           /* DW_AT_low_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .uleb128 0x12           /* DW_AT_high_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x10           /* abbrev code */
+       .uleb128 0x5            /* DW_TAG_formal_parameter */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x31           /* DW_AT_abstract_origin */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x2            /* DW_AT_location */
+       .uleb128 0xa            /* DW_FORM_block1 */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x11           /* abbrev code */
+       .uleb128 0x2e           /* DW_TAG_subprogram */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x3f           /* DW_AT_external */
+       .uleb128 0xc            /* DW_FORM_flag */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0xe            /* DW_FORM_strp */
+       .uleb128 0x49           /* DW_AT_type */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x11           /* DW_AT_low_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .uleb128 0x12           /* DW_AT_high_pc */
+       .uleb128 0x1            /* DW_FORM_addr */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x12           /* abbrev code */
+       .uleb128 0x24           /* DW_TAG_base_type */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0xb            /* DW_AT_byte_size */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .uleb128 0x3e           /* DW_AT_encoding */
+       .uleb128 0xb            /* DW_FORM_data1 */
+       .uleb128 0x3            /* DW_AT_name */
+       .uleb128 0x8            /* DW_FORM_string */
+       .byte   0x0
+       .byte   0x0
+       .uleb128 0x16           /* abbrev code */
+       .uleb128 0x34           /* DW_TAG_variable */
+       .byte   0x0             /* DW_has_children_no */
+       .uleb128 0x47           /* DW_AT_specification */
+       .uleb128 0x13           /* DW_FORM_ref4 */
+       .uleb128 0x2            /* DW_AT_location */
+       .uleb128 0xa            /* DW_FORM_block1 */
+       .byte   0x0
+       .byte   0x0
+       .byte   0x0
+       .section        .debug_str
+.LASF0:
+       .string "_ZN1N1fE"
+.LASF7:
+       .string "this"
+.LASF6:
+       .string ""
+.LASF8:
+       .string "main"
+.LASF1:
+       .string "_ZN1N1cE"
+.LASF5:
+       .string "pr11465.cc"
+.LASF4:
+       .string "GNU C++ 4.4.2"
+       .ident  "GCC: (GNU) 4.4.2"
diff --git a/gdb/testsuite/gdb.dwarf2/pr11465.exp b/gdb/testsuite/gdb.dwarf2/pr11465.exp
new file mode 100644 (file)
index 0000000..c5bc2f1
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+    && ![istarget *-*-gnu*]
+    && ![istarget *-*-elf*]
+    && ![istarget *-*-openbsd*]
+    && ![istarget arm-*-eabi*]
+    && ![istarget powerpc-*-eabi*]} {
+    return 0  
+}
+
+set testfile "pr11465"
+set srcfile "$testfile.S"
+set executable "$testfile.x"
+set binfile [file join $objdir $subdir $executable]
+
+if  { [gdb_compile [file join $srcdir $subdir $srcfile] \
+          $binfile object {}] != "" } {
+    return -1
+}
+
+clean_restart $executable
+
+# Test delayed physname computations
+gdb_test "p N::c.C" { = {void \(N::C \* const, void \(\*\)\(N::C\)\)}.*}