/* This testcase is part of GDB, the GNU debugger.

   Copyright 2011-2021 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 source file was generated by:
   echo 'struct s { char a[1<<24]; int b; } s;' \
   | gcc -dA -o dw2-simple-locdesc.S -S -gdwarf-2 -x c -
   */
	.text
var:

	.section	.debug_info
.Ldebug_info0:
d:
	.4byte	.Lcu_end - 1f	/* Length of Compilation Unit Info */
1:
	.2byte	0x3	/* DWARF version number */
	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
	.byte	0x4	/* Pointer Size (in bytes) */
	.uleb128 0x1	/* (DIE (0xb) DW_TAG_compile_unit) */
	.4byte	.LASF2	/* DW_AT_producer: "GNU C 4.7.0 20110727 (experimental)" */
	.byte	0x1	/* DW_AT_language */
.Ldie19:
	.uleb128 0x2	/* (DIE (0x19) DW_TAG_structure_type) */
	.ascii "s\0"	/* DW_AT_name */
	.4byte	0x1000004	/* DW_AT_byte_size */
	.byte	0x1	/* DW_AT_decl_file (<stdin>) */
	.byte	0x1	/* DW_AT_decl_line */
.Ldie30:
	.uleb128 0x4	/* (DIE (0x30) DW_TAG_member) */
	.ascii "data4\0"	/* DW_AT_name */
	.byte	0x1	/* DW_AT_decl_file (<stdin>) */
	.byte	0x1	/* DW_AT_decl_line */
	.4byte	.Ldie62 - d	/* DW_AT_type */
	.4byte	0x10000	/* DW_AT_data_member_location */
.Ldie32:
	.uleb128 0x3	/* (DIE (0x32) DW_TAG_member) */
	.ascii "shl\0"	/* DW_AT_name */
	.byte	0x1	/* DW_AT_decl_file (<stdin>) */
	.byte	0x1	/* DW_AT_decl_line */
	.4byte	.Ldie62 - d	/* DW_AT_type */
	.byte	0x4	/* DW_AT_data_member_location */
	.byte	0x40	/* DW_OP_lit16 */
	.byte	0x44	/* DW_OP_lit20 */
	.byte	0x24	/* DW_OP_shl */
	.byte	0x22	/* DW_OP_plus */
	.byte	0	/* end of children of DIE 0x19 */
.Ldie62:
	.uleb128 0x7	/* (DIE (0x62) DW_TAG_base_type) */
	.byte	0x4	/* DW_AT_byte_size */
	.byte	0x5	/* DW_AT_encoding */
	.ascii "int\0"	/* DW_AT_name */
.Ldie69:
	.uleb128 0x8	/* (DIE (0x69) DW_TAG_variable) */
	.ascii "s\0"	/* DW_AT_name */
	.byte	0x1	/* DW_AT_decl_file (<stdin>) */
	.byte	0x1	/* DW_AT_decl_line */
	.4byte	.Ldie19 - d	/* DW_AT_type */
	.byte	0x1	/* DW_AT_external */
	.byte	2f - 1f	/* DW_AT_location */
1:
	.byte	0x3	/* DW_OP_addr */
	.4byte	var
2:
	.byte	0	/* end of children of DIE 0xb */
.Lcu_end:
	.section	.debug_abbrev
.Ldebug_abbrev0:
	.uleb128 0x1	/* (abbrev code) */
	.uleb128 0x11	/* (TAG: 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) */
	.byte	0
	.byte	0
	.uleb128 0x2	/* (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 0x6	/* (DW_FORM_data4) */
	.uleb128 0x3a	/* (DW_AT_decl_file) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3b	/* (DW_AT_decl_line) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.byte	0
	.byte	0
	.uleb128 0x3	/* (abbrev code) */
	.uleb128 0xd	/* (TAG: DW_TAG_member) */
	.byte	0	/* DW_children_no */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x3a	/* (DW_AT_decl_file) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3b	/* (DW_AT_decl_line) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x13	/* (DW_FORM_ref4) */
	.uleb128 0x38	/* (DW_AT_data_member_location) */
	.uleb128 0xa	/* (DW_FORM_block1) */
	.byte	0
	.byte	0
	.uleb128 0x4	/* (abbrev code) */
	.uleb128 0xd	/* (TAG: DW_TAG_member) */
	.byte	0	/* DW_children_no */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x3a	/* (DW_AT_decl_file) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3b	/* (DW_AT_decl_line) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x13	/* (DW_FORM_ref4) */
	.uleb128 0x38	/* (DW_AT_data_member_location) */
	.uleb128 0x6	/* (DW_FORM_data4) */
	.byte	0
	.byte	0
	.uleb128 0x7	/* (abbrev code) */
	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
	.byte	0	/* 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	0
	.byte	0
	.uleb128 0x8	/* (abbrev code) */
	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
	.byte	0	/* DW_children_no */
	.uleb128 0x3	/* (DW_AT_name) */
	.uleb128 0x8	/* (DW_FORM_string) */
	.uleb128 0x3a	/* (DW_AT_decl_file) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x3b	/* (DW_AT_decl_line) */
	.uleb128 0xb	/* (DW_FORM_data1) */
	.uleb128 0x49	/* (DW_AT_type) */
	.uleb128 0x13	/* (DW_FORM_ref4) */
	.uleb128 0x3f	/* (DW_AT_external) */
	.uleb128 0xc	/* (DW_FORM_flag) */
	.uleb128 0x2	/* (DW_AT_location) */
	.uleb128 0xa	/* (DW_FORM_block1) */
	.byte	0
	.byte	0
	.byte	0
	.section	.debug_str
.LASF2:
	.string	"GNU C 4.7.0 20110727 (experimental)"
.LASF0:
	.string	"sizetype"
.LASF1:
	.string	"char"
