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> 2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (components_to_record): Do not reorder in non- * 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) ...@@ -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); = build_subst_list (gnat_entity, gnat_parent_type, definition);
/* Set the layout of the type to match that of the parent type, /* Set the layout of the type to match that of the parent type,
doing required substitutions. */ doing required substitutions. If we are in minimal GNAT
copy_and_substitute_in_layout (gnat_entity, gnat_parent_type, encodings mode, we don't need debug info for the inner record
gnu_type, gnu_parent_type, types, as they will be part of the embedding variant record's
gnu_subst_list, debug_info_p); 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 else
{ {
...@@ -3439,7 +3443,17 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) ...@@ -3439,7 +3443,17 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
gnu_type = make_node (RECORD_TYPE); gnu_type = make_node (RECORD_TYPE);
TYPE_NAME (gnu_type) = gnu_entity_name; TYPE_NAME (gnu_type) = gnu_entity_name;
if (gnat_encodings == DWARF_GNAT_ENCODINGS_MINIMAL) 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_PACKED (gnu_type) = TYPE_PACKED (gnu_base_type);
TYPE_REVERSE_STORAGE_ORDER (gnu_type) TYPE_REVERSE_STORAGE_ORDER (gnu_type)
= Reverse_Storage_Order (gnat_entity); = Reverse_Storage_Order (gnat_entity);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* * * *
* C Implementation File * * 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 * * 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- * * 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> 2017-09-09 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/atomic3.ads: New test. * gnat.dg/specs/atomic3.ads: New test.
......
-- { dg-do compile }
-- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" } -- { dg-options "-cargs -O0 -g -dA -fgnat-encodings=minimal -margs" }
-- --
-- This testcase checks that in the DWARF description of the variant type -- 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-options "-cargs -gdwarf-4 -fdebug-types-section -dA -margs" }
-- { dg-final { scan-assembler-times "DW_AT_location" 4 } } -- { 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 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