Commit 95b7c2e0 by Pierre-Marie de Rodat Committed by Eric Botcazou

decl.c (gnat_to_gnu_entity): Don't generate debug info for inner record types if…

decl.c (gnat_to_gnu_entity): Don't generate debug info for inner record types if -fgnat-encodings=minimal.

	* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Don't
	generate debug info for inner record types if -fgnat-encodings=minimal.
	(gnat_to_gnu_entity) <E_Record_Subtype>: Use the ultimate base record
	type as the debug type.

From-SVN: r251937
parent a713e7bb
2017-09-09 Pierre-Marie de Rodat <derodat@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Type>: Don't
generate debug info for inner record types if -fgnat-encodings=minimal.
(gnat_to_gnu_entity) <E_Record_Subtype>: Use the ultimate base record
type as the debug type.
2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (components_to_record): Do not reorder in non-
......
......@@ -3308,10 +3308,14 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
= build_subst_list (gnat_entity, gnat_parent_type, definition);
/* Set the layout of the type to match that of the parent type,
doing required substitutions. */
copy_and_substitute_in_layout (gnat_entity, gnat_parent_type,
gnu_type, gnu_parent_type,
gnu_subst_list, debug_info_p);
doing required substitutions. If we are in minimal GNAT
encodings mode, we don't need debug info for the inner record
types, as they will be part of the embedding variant record's
debug info. */
copy_and_substitute_in_layout
(gnat_entity, gnat_parent_type, gnu_type, gnu_parent_type,
gnu_subst_list,
debug_info_p && gnat_encodings != DWARF_GNAT_ENCODINGS_MINIMAL);
}
else
{
......@@ -3439,7 +3443,17 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
gnu_type = make_node (RECORD_TYPE);
TYPE_NAME (gnu_type) = gnu_entity_name;
if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL)
SET_TYPE_DEBUG_TYPE (gnu_type, gnu_base_type);
{
/* Use the ultimate base record type as the debug type.
Subtypes and derived types bring no useful
information. */
Entity_Id gnat_debug_type = gnat_entity;
while (Etype (gnat_debug_type) != gnat_debug_type)
gnat_debug_type = Etype (gnat_debug_type);
tree gnu_debug_type
= TYPE_MAIN_VARIANT (gnat_to_gnu_type (gnat_debug_type));
SET_TYPE_DEBUG_TYPE (gnu_type, gnu_debug_type);
}
TYPE_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
TYPE_REVERSE_STORAGE_ORDER (gnu_type)
= Reverse_Storage_Order (gnat_entity);
......
......@@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* Copyright (C) 1992-2016, Free Software Foundation, Inc. *
* Copyright (C) 1992-2017, Free Software Foundation, Inc. *
* *
* GNAT is free software; you can redistribute it and/or modify it under *
* terms of the GNU General Public License as published by the Free Soft- *
......
2017-09-09 Pierre-Marie de Rodat <derodat@adacore.com>
* gnat.dg/debug14.adb: New test.
2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/atomic3.ads: New test.
......
-- { dg-do compile }
-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
--
-- This testcase checks that in the DWARF description of the variant type
......
-- { dg-do compile }
-- { dg-options "-cargs -gdwarf-4 -fdebug-types-section -dA -margs" }
-- { dg-final { scan-assembler-times "DW_AT_location" 4 } }
......
-- { dg-options "-cargs -O2 -g -margs" }
-- { dg-do compile }
-- { dg-options "-O2 -g" }
package body Debug13 is
......
-- { dg-do compile }
-- { dg-options "-g -fgnat-encodings=minimal" }
procedure Debug14 is
type Db_Kind_T is (Raw, Relational, Object);
type Db_Model_T (Kind : Db_Kind_T) is
record
case Kind is
when Raw =>
Fs_Type : Integer;
when Relational | Object =>
Vendor_Id : Integer;
case Kind is
when Relational =>
N_Tables : Integer;
when others =>
null;
end case;
end case;
end record;
type Raw_Db_T is new Db_Model_T (Kind => Raw);
type Raw_Db_P is access Raw_Db_T;
Db : Raw_Db_P := new Raw_Db_T;
begin
null;
end;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment