diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 12 |
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d94432f..0e48f78 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2009-04-21 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (create_type_decl): Do not pass declarations + of dummy fat pointer types to the debug back-end. + 2009-04-20 Eric Botcazou <ebotcazou@adacore.com> * gcc-interface/decl.c (gnat_to_gnu_entity): Rewrite Esize calculation. diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 55e474c..8802827 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -1244,15 +1244,19 @@ create_type_decl (tree type_name, tree type, struct attrib *attr_list, TYPE_STUB_DECL (type) = type_decl; /* Pass the type declaration to the debug back-end unless this is an - UNCONSTRAINED_ARRAY_TYPE that the back-end does not support, an - ENUMERAL_TYPE or RECORD_TYPE which are handled separately, or a - type for which debugging information was not requested. */ + UNCONSTRAINED_ARRAY_TYPE that the back-end does not support, or a + type for which debugging information was not requested, or else an + ENUMERAL_TYPE or RECORD_TYPE (except for fat pointers) which are + handled separately. And do not pass dummy types either. */ if (code == UNCONSTRAINED_ARRAY_TYPE || !debug_info_p) DECL_IGNORED_P (type_decl) = 1; else if (code != ENUMERAL_TYPE && (code != RECORD_TYPE || TYPE_IS_FAT_POINTER_P (type)) && !((code == POINTER_TYPE || code == REFERENCE_TYPE) - && TYPE_IS_DUMMY_P (TREE_TYPE (type)))) + && TYPE_IS_DUMMY_P (TREE_TYPE (type))) + && !(code == RECORD_TYPE + && TYPE_IS_DUMMY_P + (TREE_TYPE (TREE_TYPE (TYPE_FIELDS (type)))))) rest_of_type_decl_compilation (type_decl); return type_decl; |