aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-01-26 18:13:41 +0000
committerJim Wilson <wilson@gcc.gnu.org>1998-01-26 10:13:41 -0800
commit2a851b5ccfc3c95025e154f5b4c930dd90c21527 (patch)
tree8401a7a70e946b01e5c7597c1298b5221a9fe170 /gcc
parentac2f83cb38a4d1eb9b0ff4705f65bfdaa1b09eaa (diff)
downloadgcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.zip
gcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.tar.gz
gcc-2a851b5ccfc3c95025e154f5b4c930dd90c21527.tar.bz2
Patch from Joern to fix dwarf1 bug: emit debug info for types defined in
parameter lists. * c-decl.c (grokdeclarator): Get parameter tags from last_function_parm_tags. * dwarfout.c (output_formal_types): Set TREE_ASM_WRITTEN before traversing the parameter types. (output_type): No early exit for FUNCTION_TYPE / METHOD_TYPE context. From-SVN: r17490
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/c-decl.c2
-rw-r--r--gcc/dwarfout.c12
3 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fcaa21f..deb2d9c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 26 18:11:30 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * c-decl.c (grokdeclarator): Get parameter tags from
+ last_function_parm_tags.
+ * dwarfout.c (output_formal_types): Set TREE_ASM_WRITTEN before
+ traversing the parameter types.
+ (output_type): No early exit for FUNCTION_TYPE / METHOD_TYPE context.
+
Mon Jan 26 01:44:12 1998 Jeffrey A Law (law@cygnus.com)
* h8300.c (print_operand): Handle CONST_DOUBLE for 'e', 'f', and
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index d7f5737..3c000e2 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -4878,7 +4878,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
{
register tree link;
- for (link = current_function_parm_tags;
+ for (link = last_function_parm_tags;
link;
link = TREE_CHAIN (link))
TYPE_CONTEXT (TREE_VALUE (link)) = type;
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index 34527a3..406fb89 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -4018,6 +4018,12 @@ output_formal_types (function_or_method_type)
register tree formal_type = NULL;
register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
+ /* Set TREE_ASM_WRITTEN while processing the parameters, lest we
+ get bogus recursion when outputting tagged types local to a
+ function declaration. */
+ int save_asm_written = TREE_ASM_WRITTEN (function_or_method_type);
+ TREE_ASM_WRITTEN (function_or_method_type) = 1;
+
/* In the case where we are generating a formal types list for a C++
non-static member function type, skip over the first thing on the
TYPE_ARG_TYPES list because it only represents the type of the
@@ -4063,6 +4069,8 @@ output_formal_types (function_or_method_type)
output_type (formal_type, function_or_method_type);
}
+
+ TREE_ASM_WRITTEN (function_or_method_type) = save_asm_written;
}
/* Remember a type in the pending_types_list. */
@@ -4353,7 +4361,9 @@ output_type (type, containing_scope)
if (TYPE_SIZE (type) == 0
&& (TYPE_CONTEXT (type) == NULL
- || TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't')
+ || (TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't'
+ && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE
+ && TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE))
&& !finalizing)
return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */