+2003-07-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * c-tree.h (define_label): Replace filename and lineno arguments
+ with a location_t.
+ * c-decl.c (poplevel): Adjust define_label call.
+ (pop_label_level): Likewise.
+ (define_label): Replace filename and lineno arguments with a
+ location_t.
+ (store_parm_decls): Use DECL_SOURCE_LOCATION.
+ * c-parse.in (label): Adjust define_label call.
+
2003-07-01 Neil Booth <neil@daikokuya.co.uk>
* config/sol2.h, config/alpha/alpha.h, config/alpha/linux.h,
{
error_with_decl (label, "label `%s' used but not defined");
/* Avoid crashing later. */
- define_label (input_filename, input_line,
- DECL_NAME (label));
+ define_label (input_location, DECL_NAME (label));
}
else if (warn_unused_label && !TREE_USED (label))
warning_with_decl (label, "label `%s' defined but not used");
error_with_decl (TREE_VALUE (link),
"label `%s' used but not defined");
/* Avoid crashing later. */
- define_label (input_filename, input_line,
- DECL_NAME (TREE_VALUE (link)));
+ define_label (input_location, DECL_NAME (TREE_VALUE (link)));
}
else if (warn_unused_label && !TREE_USED (TREE_VALUE (link)))
warning_with_decl (TREE_VALUE (link),
Otherwise return 0. */
tree
-define_label (const char* filename, int line, tree name)
+define_label (location_t location, tree name)
{
- location_t locus;
tree decl = lookup_label (name);
- locus.file = filename;
- locus.line = line;
/* If label with this name is known from an outer context, shadow it. */
if (decl != 0 && DECL_CONTEXT (decl) != current_function_decl)
if (warn_traditional && !in_system_header && lookup_name (name))
warning ("%Htraditional C lacks a separate namespace for labels, "
- "identifier `%s' conflicts", &locus, IDENTIFIER_POINTER (name));
+ "identifier `%s' conflicts", &location, IDENTIFIER_POINTER (name));
if (DECL_INITIAL (decl) != 0)
{
- error ("%Hduplicate label `%s'", &locus, IDENTIFIER_POINTER (name));
+ error ("%Hduplicate label `%s'", &location, IDENTIFIER_POINTER (name));
return 0;
}
else
/* Mark label as having been defined. */
DECL_INITIAL (decl) = error_mark_node;
/* Say where in the source. */
- DECL_SOURCE_LOCATION (decl) = locus;
+ DECL_SOURCE_LOCATION (decl) = location;
return decl;
}
}
found = build_decl (PARM_DECL, TREE_VALUE (parm),
integer_type_node);
DECL_ARG_TYPE (found) = TREE_TYPE (found);
- DECL_SOURCE_LINE (found) = DECL_SOURCE_LINE (fndecl);
- DECL_SOURCE_FILE (found) = DECL_SOURCE_FILE (fndecl);
+ DECL_SOURCE_LOCATION (found) = DECL_SOURCE_LOCATION (fndecl);
if (flag_isoc99)
pedwarn_with_decl (found, "type of `%s' defaults to `int'");
else if (extra_warnings)
{ stmt_count++;
$$ = do_case (NULL_TREE, NULL_TREE); }
| identifier save_location ':' maybe_attribute
- { tree label = define_label ($2.file, $2.line, $1);
+ { tree label = define_label ($2, $1);
stmt_count++;
if (label)
{
extern void clear_parm_order (void);
extern int complete_array_type (tree, tree, int);
extern void declare_parm_level (int);
-extern tree define_label (const char *, int, tree);
+extern tree define_label (location_t, tree);
extern void finish_decl (tree, tree, tree);
extern tree finish_enum (tree, tree, tree);
extern void finish_function (int, int);
+2003-07-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * cp-tree.h (define_label): Replace filename and lineno
+ arguments with a location_t.
+ * decl.c (pop_label): Adjust define_label call.
+ (define_label): Replace filename and lineno arguments with a
+ location_t.
+ * semantics.c (finish_label): Adjust define_label call.
+
2003-07-01 Mark Mitchell <mark@codesourcery.com>
PR c++/9559
extern bool push_class_level_binding (tree, tree);
extern tree implicitly_declare (tree);
extern tree declare_local_label (tree);
-extern tree define_label (const char *, int, tree);
+extern tree define_label (location_t, tree);
extern void check_goto (tree);
extern void define_case_label (void);
extern tree namespace_binding (tree, tree);
{
if (DECL_INITIAL (label) == NULL_TREE)
{
+ location_t location;
+
cp_error_at ("label `%D' used but not defined", label);
+ location.file = input_filename;
+ location.line = 0;
/* Avoid crashing later. */
- define_label (input_filename, 1, DECL_NAME (label));
+ define_label (location, DECL_NAME (label));
}
else if (warn_unused_label && !TREE_USED (label))
cp_warning_at ("label `%D' defined but not used", label);
Otherwise return 0. */
tree
-define_label (const char* filename, int line, tree name)
+define_label (location_t location, tree name)
{
tree decl = lookup_label (name);
struct named_label_list *ent;
/* Mark label as having been defined. */
DECL_INITIAL (decl) = error_mark_node;
/* Say where in the source. */
- DECL_SOURCE_FILE (decl) = filename;
- DECL_SOURCE_LINE (decl) = line;
+ DECL_SOURCE_LOCATION (decl) = location;
if (ent)
{
ent->names_in_scope = current_binding_level->names;
tree
finish_label_stmt (tree name)
{
- tree decl = define_label (input_filename, input_line, name);
+ tree decl = define_label (input_location, name);
return add_stmt (build_stmt (LABEL_STMT, decl));
}
+2003-07-01 Nathan Sidwell <nathan@codesourcery.com>
+
+ * decl.c (poplevel): Adjust define_label call.
+
2003-06-27 Zack Weinberg <zack@codesourcery.com>
* gjavah.c (flag_jni): Make non-static.
{
error_with_decl (label, "label `%s' used but not defined");
/* Avoid crashing later. */
- define_label (input_filename, lineno,
- DECL_NAME (label));
+ define_label (input_location, DECL_NAME (label));
}
else if (warn_unused[UNUSED_LABEL] && !TREE_USED (label))
warning_with_decl (label, "label `%s' defined but not used");