case RESULT_DECL:
if (DECL_HAS_VALUE_EXPR_P (loc))
- return loc_list_from_tree_1 (DECL_VALUE_EXPR (loc),
- want_address, context);
+ {
+ tree value_expr = DECL_VALUE_EXPR (loc);
+
+ /* Non-local frame structures are DECL_IGNORED_P variables so we need
+ to wait until they get an RTX in order to reference them. */
+ if (early_dwarf
+ && TREE_CODE (value_expr) == COMPONENT_REF
+ && VAR_P (TREE_OPERAND (value_expr, 0))
+ && DECL_NONLOCAL_FRAME (TREE_OPERAND (value_expr, 0)))
+ ;
+ else
+ return loc_list_from_tree_1 (value_expr, want_address, context);
+ }
+
/* FALLTHRU */
case FUNCTION_DECL:
void
gimplify_type_sizes (tree type, gimple_seq *list_p)
{
- tree field, t;
-
if (type == NULL || type == error_mark_node)
return;
+ const bool ignored_p
+ = TYPE_NAME (type)
+ && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+ && DECL_IGNORED_P (TYPE_NAME (type));
+ tree t;
+
/* We first do the main variant, then copy into any other variants. */
type = TYPE_MAIN_VARIANT (type);
/* Ensure VLA bounds aren't removed, for -O0 they should be variables
with assigned stack slots, for -O1+ -g they should be tracked
by VTA. */
- if (!(TYPE_NAME (type)
- && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
- && DECL_IGNORED_P (TYPE_NAME (type)))
+ if (!ignored_p
&& TYPE_DOMAIN (type)
&& INTEGRAL_TYPE_P (TYPE_DOMAIN (type)))
{
case RECORD_TYPE:
case UNION_TYPE:
case QUAL_UNION_TYPE:
- for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
+ for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
if (TREE_CODE (field) == FIELD_DECL)
{
gimplify_one_sizepos (&DECL_FIELD_OFFSET (field), list_p);
+ /* Likewise, ensure variable offsets aren't removed. */
+ if (!ignored_p
+ && (t = DECL_FIELD_OFFSET (field))
+ && VAR_P (t)
+ && DECL_ARTIFICIAL (t))
+ DECL_IGNORED_P (t) = 0;
gimplify_one_sizepos (&DECL_SIZE (field), list_p);
gimplify_one_sizepos (&DECL_SIZE_UNIT (field), list_p);
gimplify_type_sizes (TREE_TYPE (field), list_p);
--- { dg-do compile }
--- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
--- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
--
--- This testcase checks that in the DWARF description of the variant type
--- below, the C discriminant is properly described as unsigned, hence the 0x5a
--- ('Z') and 0x80 (128) values in the DW_AT_discr_list attribute. If it was
--- described as signed, we would have instead 90 and -128.
---
--- { dg-final { scan-assembler-times "0x5a.*DW_AT_discr_list" 1 } }
--- { dg-final { scan-assembler-times "0x80.*DW_AT_discr_list" 1 } }
+-- This testcase checks that in the DWARF description of the variant type
+-- below, the C discriminant is properly described as unsigned, hence the 0x5a
+-- ('Z') and 0x80 (128) values in the DW_AT_discr_list attribute. If it was
+-- described as signed, we would have instead 90 and -128.
with Ada.Text_IO;
R.I := 0;
Ada.Text_IO.Put_Line ("" & R.C);
end Debug11;
+
+-- { dg-final { scan-assembler-times "0x5a.*DW_AT_discr_list" 1 } }
+-- { dg-final { scan-assembler-times "0x80.*DW_AT_discr_list" 1 } }
--- { dg-do compile }
--- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
--- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
procedure Debug16 is
end if;
end;
--- { dg-final { scan-assembler-times "DW_AT_discr" 4 } }
+-- { dg-final { scan-assembler-times "DW_AT_discr" 4 } }
--- /dev/null
+-- { dg-do compile }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
+
+pragma No_Component_Reordering;
+
+procedure Debug17 (Number_Of_Bits : Natural) is
+
+ type Bitinfos_T is array (Natural range 1 .. Number_Of_Bits) of Float;
+
+ type Inner_Record_T is
+ record
+ Bitinfos : Bitinfos_T := (others => 1.5);
+ Check1 : Integer := 1983;
+ Check2 : Integer := 1995;
+ Flag : Boolean := False;
+ Check3 : Integer := 2005;
+
+ end record;
+
+ Rfield : Inner_Record_T;
+
+begin
+ null;
+end;
+
+-- { dg-final { scan-assembler-not "DW_AT_data_member_location (0)" } }
-- { dg-do compile }
--- { dg-options "-cargs -g -fgnat-encodings=minimal -dA -margs" }
--- { dg-final { scan-assembler-not "DW_OP_const4u" } }
--- { dg-final { scan-assembler-not "DW_OP_const8u" } }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
-- The DW_AT_byte_size attribute DWARF expression for the
-- DW_TAG_structure_type DIE that describes Rec_Type contains the -4u literal.
begin
null;
end Debug8;
+
+-- { dg-final { scan-assembler-not "DW_OP_const4u" } }
+-- { dg-final { scan-assembler-not "DW_OP_const8u" } }
-- { dg-do compile }
--- { dg-options "-cargs -g -dA -fgnat-encodings=minimal -margs" }
+-- { dg-skip-if "No Dwarf" { { hppa*-*-hpux* } && { ! lp64 } } }
+-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
package Debug1 is