aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-17 19:29:11 +0000
committerRichard Stallman <rms@gnu.org>1992-05-17 19:29:11 +0000
commit64309441e0685d95ea54f896d9eb91332afcac10 (patch)
tree9f5621ef1eeb9b9436687c99e97684ab589a5e6d /gcc
parent001910d1fb84ca9ea88ba7074d453cc4c5cd5924 (diff)
downloadgcc-64309441e0685d95ea54f896d9eb91332afcac10.zip
gcc-64309441e0685d95ea54f896d9eb91332afcac10.tar.gz
gcc-64309441e0685d95ea54f896d9eb91332afcac10.tar.bz2
*** empty log message ***
From-SVN: r1001
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-decl.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 48e9b41..f1bc32f 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -377,6 +377,7 @@ static struct binding_level *label_level_chain;
static tree grokparms (), grokdeclarator ();
tree pushdecl ();
tree builtin_function ();
+static void declare_function_name ();
static tree lookup_tag ();
static tree lookup_tag_reverse ();
@@ -2590,11 +2591,35 @@ init_decl_processing ()
builtin_function ("__builtin_getman", double_ftype_double, BUILT_IN_GETMAN, 0);
#endif
+ /* Create the global binding of __NAME__. */
+ declare_function_name ("top level");
+
start_identifier_warnings ();
init_format_info_table ();
}
+/* Make a binding for __NAME__. */
+
+static void
+declare_function_name (name)
+ char *name;
+{
+ tree decl, init;
+
+ push_obstacks_nochange ();
+ decl = pushdecl (build_decl (VAR_DECL,
+ get_identifier ("__NAME__"),
+ char_array_type_node));
+ TREE_STATIC (decl) = 1;
+ TREE_READONLY (decl) = 1;
+ DECL_IGNORED_P (decl) = 1;
+ init = build_string (strlen (name) + 1, name);
+ TREE_TYPE (init) = char_array_type_node;
+ DECL_INITIAL (decl) = init;
+ finish_decl (decl, init, NULL_TREE);
+}
+
/* Return a definition for a builtin function named NAME and whose data type
is TYPE. TYPE should be a function type with argument types.
FUNCTION_CODE tells later passes how to compile calls to this function.
@@ -4210,7 +4235,7 @@ get_parm_info (void_at_end)
if (TREE_ASM_WRITTEN (decl))
{
- error_with_decl (decl, "no real declaration for parameter `%s'");
+ error_with_decl (decl, "parameter `%s' has just a forward declaration");
TREE_CHAIN (decl) = new_parms;
new_parms = decl;
}
@@ -5057,6 +5082,9 @@ start_function (declspecs, declarator, nested)
if (TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (current_function_decl)))
TREE_ADDRESSABLE (current_function_decl) = 1;
+ /* Declare __NAME__ for this function. */
+ declare_function_name (IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+
return 1;
}