diff options
52 files changed, 210 insertions, 171 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c14137b..a288901 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * tree.h (TREE_LOCUS): Rename from DECL_SOURCE_LOCATION; make const. + (TREE_FILENAME, TREE_LINENO): Likewise. + (set_tree_locus, copy_tree_locus, set_tree_file_line): New. + (TREE_LOCUS_SET_P): New. + * c-aux-info.c, c-decl.c, c-parse.in, coverage.c, dbxout.c, + diagnostic.c, dwarf2out.c, dwarfout.c, function.c, integrate.c, + print-tree.c, stmt.c, toplev.c, tree-dump.c, tree-inline.c, + tree-optimize.c, tree.c, tree.def, xcoffout.c, config/alpha/alpha.c, + config/mips/mips.c, doc/c-tree.texi, objc/objc-act.c: Update to match. + 2003-09-21 Nathanael Nerode <neroden@gcc.gnu.org> * config/vax/vax-protos.h: Convert to ISO C90. diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2dfbc37..51ba6b4 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * trans.c, utils.c: Update for DECL_SOURCE_LOCATION rename and + change to const. + 2003-09-04 Michael Matz <matz@suse.de> * misc.c: Include "target.h". diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index 8e6f9ac..889b267 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -2611,7 +2611,7 @@ tree_transform (gnat_node) the body so that the line number notes are written correctly. */ set_lineno (gnat_node, 0); - DECL_SOURCE_LOCATION (gnu_subprog_decl) = input_location; + set_tree_locus (gnu_subprog_decl, input_location); begin_subprog_body (gnu_subprog_decl); set_lineno (gnat_node, 1); @@ -5333,7 +5333,7 @@ build_unit_elab (gnat_unit, body_p, gnu_elab_list) { tree lhs = TREE_PURPOSE (gnu_elab_list); - input_location = DECL_SOURCE_LOCATION (lhs); + input_location = TREE_LOCUS (lhs); /* If LHS has a padded type, convert it to the unpadded type so the assignment is done properly. */ diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index 186b0fd..eddfb32 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -1655,9 +1655,9 @@ create_label_decl (label_name) { tree label_decl = build_decl (LABEL_DECL, label_name, void_type_node); - DECL_CONTEXT (label_decl) = current_function_decl; - DECL_MODE (label_decl) = VOIDmode; - DECL_SOURCE_LOCATION (label_decl) = input_location; + DECL_CONTEXT (label_decl) = current_function_decl; + DECL_MODE (label_decl) = VOIDmode; + set_tree_locus (label_decl, input_location); return label_decl; } diff --git a/gcc/c-aux-info.c b/gcc/c-aux-info.c index e785ade..0a14839 100644 --- a/gcc/c-aux-info.c +++ b/gcc/c-aux-info.c @@ -569,8 +569,8 @@ gen_aux_info_record (tree fndecl, int is_definition, int is_implicit, /* Write the actual line of auxiliary info. */ fprintf (aux_info_file, "/* %s:%d:%c%c */ %s;", - DECL_SOURCE_FILE (fndecl), - DECL_SOURCE_LINE (fndecl), + TREE_FILENAME (fndecl), + TREE_LINENO (fndecl), (is_implicit) ? 'I' : (is_prototyped) ? 'N' : 'O', (is_definition) ? 'F' : 'C', gen_decl (fndecl, is_definition, ansi)); diff --git a/gcc/c-decl.c b/gcc/c-decl.c index db35f9a..f58f560 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -905,8 +905,7 @@ duplicate_decls (tree newdecl, tree olddecl, int different_binding_level, return 0; } } - else if (TREE_CODE (olddecl) == FUNCTION_DECL - && DECL_SOURCE_LINE (olddecl) == 0) + else if (TREE_CODE (olddecl) == FUNCTION_DECL && !TREE_LOCUS_SET_P (olddecl)) { /* A function declaration for a predeclared function that isn't actually built in. */ @@ -1175,7 +1174,7 @@ duplicate_decls (tree newdecl, tree olddecl, int different_binding_level, } /* Optionally warn about more than one declaration for the same name. */ - if (errmsg == 0 && warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0 + if (errmsg == 0 && warn_redundant_decls && TREE_LOCUS_SET_P (olddecl) /* Don't warn about a function declaration followed by a definition. */ && !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0 @@ -1272,10 +1271,7 @@ duplicate_decls (tree newdecl, tree olddecl, int different_binding_level, information so that meaningful diagnostics can be given. */ if (DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0 && ! different_binding_level) - { - DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl); - DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl); - } + copy_tree_locus (newdecl, olddecl); /* Merge the unused-warning information. */ if (DECL_IN_SYSTEM_HEADER (olddecl)) @@ -1525,7 +1521,7 @@ warn_if_shadowing (tree x, tree old) /* Shadow warnings not wanted? */ || !warn_shadow /* No shadow warnings for internally generated vars. */ - || DECL_SOURCE_LINE (x) == 0 + || !TREE_LOCUS_SET_P (x) /* No shadow warnings for vars made for inlining. */ || DECL_FROM_INLINE (x) /* Don't warn about the parm names in function declarator @@ -1593,7 +1589,7 @@ warn_if_shadowing (tree x, tree old) static void clone_underlying_type (tree x) { - if (DECL_SOURCE_LINE (x) == 0) + if (!TREE_LOCUS_SET_P (x)) { if (TYPE_NAME (TREE_TYPE (x)) == 0) TYPE_NAME (TREE_TYPE (x)) = x; @@ -1948,7 +1944,7 @@ make_label (tree name, location_t location) DECL_CONTEXT (label) = current_function_decl; DECL_MODE (label) = VOIDmode; - DECL_SOURCE_LOCATION (label) = location; + set_tree_locus (label, location); return label; } @@ -1995,7 +1991,7 @@ lookup_label (tree name) location to point here, for better diagnostics if it turns out not to have been defined. */ if (!TREE_USED (label)) - DECL_SOURCE_LOCATION (label) = input_location; + set_tree_locus (label, input_location); return label; } @@ -2074,7 +2070,7 @@ define_label (location_t location, tree name) /* The label has been used or declared already in this function, but not defined. Update its location to point to this definition. */ - DECL_SOURCE_LOCATION (label) = location; + set_tree_locus (label, location); } else { @@ -5462,7 +5458,7 @@ start_function (tree declspecs, tree declarator, tree attributes) && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0) { TREE_TYPE (decl1) = TREE_TYPE (old_decl); - current_function_prototype_locus = DECL_SOURCE_LOCATION (old_decl); + current_function_prototype_locus = TREE_LOCUS (old_decl); } /* Optionally warn of old-fashioned def with no previous prototype. */ @@ -5755,7 +5751,7 @@ store_parm_decls_oldstyle (void) { decl = build_decl (PARM_DECL, TREE_VALUE (parm), integer_type_node); DECL_ARG_TYPE (decl) = TREE_TYPE (decl); - DECL_SOURCE_LOCATION (decl) = DECL_SOURCE_LOCATION (fndecl); + copy_tree_locus (decl, fndecl); pushdecl (decl); if (flag_isoc99) diff --git a/gcc/c-parse.in b/gcc/c-parse.in index bb9cc1a..3582546 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -414,7 +414,7 @@ fndef: YYERROR1; } old_style_parm_decls save_location - { DECL_SOURCE_LOCATION (current_function_decl) = $6; + { set_tree_locus (current_function_decl, $6); store_parm_decls (); } compstmt_or_error { finish_function (); @@ -427,7 +427,7 @@ fndef: YYERROR1; } old_style_parm_decls save_location - { DECL_SOURCE_LOCATION (current_function_decl) = $6; + { set_tree_locus (current_function_decl, $6); store_parm_decls (); } compstmt_or_error { finish_function (); @@ -440,7 +440,7 @@ fndef: YYERROR1; } old_style_parm_decls save_location - { DECL_SOURCE_LOCATION (current_function_decl) = $5; + { set_tree_locus (current_function_decl, $5); store_parm_decls (); } compstmt_or_error { finish_function (); @@ -1563,7 +1563,7 @@ nested_function: } old_style_parm_decls save_location { tree decl = current_function_decl; - DECL_SOURCE_LOCATION (decl) = $4; + set_tree_locus (decl, $4); store_parm_decls (); } /* This used to use compstmt_or_error. That caused a bug with input `f(g) int g {}', @@ -1594,7 +1594,7 @@ notype_nested_function: } old_style_parm_decls save_location { tree decl = current_function_decl; - DECL_SOURCE_LOCATION (decl) = $4; + set_tree_locus (decl, $4); store_parm_decls (); } /* This used to use compstmt_or_error. That caused a bug with input `f(g) int g {}', diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 72d01af..4b32ca0 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -7349,13 +7349,11 @@ alpha_start_function (FILE *file, const char *fnname, if (write_symbols == SDB_DEBUG) { #ifdef ASM_OUTPUT_SOURCE_FILENAME - ASM_OUTPUT_SOURCE_FILENAME (file, - DECL_SOURCE_FILE (current_function_decl)); + ASM_OUTPUT_SOURCE_FILENAME (file, TREE_FILENAME (current_function_decl)); #endif #ifdef ASM_OUTPUT_SOURCE_LINE if (debug_info_level != DINFO_LEVEL_TERSE) - ASM_OUTPUT_SOURCE_LINE (file, - DECL_SOURCE_LINE (current_function_decl), 0); + ASM_OUTPUT_SOURCE_LINE (file, TREE_LINENO (current_function_decl), 0); #endif } diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 8bd2139..307027e 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -6507,11 +6507,11 @@ mips_output_function_prologue (FILE *file, HOST_WIDE_INT size ATTRIBUTE_UNUSED) need the source filename more than once in the file, beyond what is emitted by the debug information. */ if (!TARGET_GAS) - ASM_OUTPUT_SOURCE_FILENAME (file, DECL_SOURCE_FILE (current_function_decl)); + ASM_OUTPUT_SOURCE_FILENAME (file, TREE_FILENAME (current_function_decl)); #ifdef SDB_DEBUGGING_INFO if (debug_info_level != DINFO_LEVEL_TERSE && write_symbols == SDB_DEBUG) - ASM_OUTPUT_SOURCE_LINE (file, DECL_SOURCE_LINE (current_function_decl), 0); + ASM_OUTPUT_SOURCE_LINE (file, TREE_LINENO (current_function_decl), 0); #endif /* In mips16 mode, we may need to generate a 32 bit to handle diff --git a/gcc/coverage.c b/gcc/coverage.c index e6f4129..dc10206 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -410,9 +410,9 @@ checksum_string (unsigned chksum, const char *string) static unsigned compute_checksum (void) { - unsigned chksum = DECL_SOURCE_LINE (current_function_decl); + unsigned chksum = TREE_LINENO (current_function_decl); - chksum = checksum_string (chksum, DECL_SOURCE_FILE (current_function_decl)); + chksum = checksum_string (chksum, TREE_FILENAME (current_function_decl)); chksum = checksum_string (chksum, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl))); @@ -432,8 +432,8 @@ coverage_begin_output (void) if (!bbg_function_announced) { - const char *file = DECL_SOURCE_FILE (current_function_decl); - unsigned line = DECL_SOURCE_LINE (current_function_decl); + const char *file = TREE_FILENAME (current_function_decl); + unsigned line = TREE_LINENO (current_function_decl); unsigned long offset; if (!bbg_file_opened) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2734bf6..19c3c48 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * class.c, cp-tree.h, decl.c, decl2.c, error.c, init.c, + method.c, optimize.c, pt.c, semantics.c, tree.c: Update for + DECL_SOURCE_LOCATION rename and change to const. + 2003-09-20 Richard Henderson <rth@redhat.com> * decl.c, decl2.c, pt.c: Use %J in diagnostics. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 17ff0e4..ebcad80 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5212,7 +5212,7 @@ finish_struct (tree t, tree attributes) /* Nadger the current location so that diagnostics point to the start of the struct, not the end. */ - input_location = DECL_SOURCE_LOCATION (TYPE_NAME (t)); + input_location = TREE_LOCUS (TYPE_NAME (t)); if (processing_template_decl) { diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index ef38d55..8f931aa 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -390,7 +390,7 @@ typedef enum cp_id_kind /* The IDENTIFIER_VALUE is the value of the IDENTIFIER_BINDING, or NULL_TREE if there is no binding. */ #define IDENTIFIER_VALUE(NODE) \ - (IDENTIFIER_BINDING (NODE) ? IDENTIFIER_BINDING (NODE)->value : NULL) + (IDENTIFIER_BINDING (NODE) ? IDENTIFIER_BINDING (NODE)->value : NULL_TREE) /* If IDENTIFIER_CLASS_VALUE is set, then NODE is bound in the current class, and IDENTIFIER_CLASS_VALUE is the value binding. This is diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 892affa..376d8de 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1787,7 +1787,7 @@ print_binding_level (struct cp_binding_level* lvl) continue; if (no_print_builtins && (TREE_CODE (t) == TYPE_DECL) - && (!strcmp (DECL_SOURCE_FILE (t),"<built-in>"))) + && (!strcmp (TREE_FILENAME (t), "<built-in>"))) continue; /* Function decls tend to have longer names. */ @@ -3153,9 +3153,8 @@ duplicate_decls (tree newdecl, tree olddecl) if (DECL_INITIAL (DECL_TEMPLATE_RESULT (olddecl)) == NULL_TREE && DECL_INITIAL (DECL_TEMPLATE_RESULT (newdecl)) != NULL_TREE) { - DECL_SOURCE_LOCATION (olddecl) - = DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (olddecl)) - = DECL_SOURCE_LOCATION (newdecl); + copy_tree_locus (olddecl, newdecl); + copy_tree_locus (DECL_TEMPLATE_RESULT (olddecl), newdecl); } return 1; @@ -3195,13 +3194,13 @@ duplicate_decls (tree newdecl, tree olddecl) TYPE_RAISES_EXCEPTIONS (oldtype)); if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl)) - && DECL_SOURCE_LINE (olddecl) != 0 + && TREE_LOCUS_SET_P (olddecl) && flag_exceptions && !comp_except_specs (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (newdecl)), TYPE_RAISES_EXCEPTIONS (TREE_TYPE (olddecl)), 1)) { error ("declaration of `%F' throws different exceptions", - newdecl); + newdecl); cp_error_at ("than previous declaration `%F'", olddecl); } } @@ -3232,7 +3231,7 @@ duplicate_decls (tree newdecl, tree olddecl) && DECL_INITIAL (olddecl) != NULL_TREE) { DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl); - DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl); + copy_tree_locus (newdecl, olddecl); if (CAN_HAVE_FULL_LANG_DECL_P (newdecl) && DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl)) @@ -3701,7 +3700,7 @@ pushdecl (tree x) if (TREE_CODE (x) == TYPE_DECL) { tree type = TREE_TYPE (x); - if (DECL_SOURCE_LINE (x) == 0) + if (!TREE_LOCUS_SET_P (x)) { if (TYPE_NAME (type) == 0) TYPE_NAME (type) = x; @@ -4075,7 +4074,7 @@ pushdecl_class_level (tree x) for (f = TYPE_FIELDS (TREE_TYPE (x)); f; f = TREE_CHAIN (f)) { location_t save_location = input_location; - input_location = DECL_SOURCE_LOCATION (f); + input_location = TREE_LOCUS (f); if (!pushdecl_class_level (f)) is_valid = false; input_location = save_location; @@ -4520,7 +4519,7 @@ make_label_decl (tree id, int local_p) /* Say where one reference is to the label, for the sake of the error if it is not defined. */ - DECL_SOURCE_LOCATION (decl) = input_location; + set_tree_locus (decl, input_location); /* Record the fact that this identifier is bound to this label. */ SET_IDENTIFIER_LABEL_VALUE (id, decl); @@ -4831,7 +4830,7 @@ define_label (location_t location, tree name) /* Mark label as having been defined. */ DECL_INITIAL (decl) = error_mark_node; /* Say where in the source. */ - DECL_SOURCE_LOCATION (decl) = location; + set_tree_locus (decl, location); if (ent) { ent->names_in_scope = current_binding_level->names; diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index b1ee970..084cc9b 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2240,7 +2240,7 @@ start_static_initialization_or_destruction (tree decl, int initp) where DECL was declared so that error-messages make sense, and so that the debugger will show somewhat sensible file and line information. */ - input_location = DECL_SOURCE_LOCATION (decl); + input_location = TREE_LOCUS (decl); /* Because of: diff --git a/gcc/cp/error.c b/gcc/cp/error.c index a10dcf6..74d1218 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -1959,7 +1959,7 @@ location_of (tree t) else if (TREE_CODE (t) == OVERLOAD) t = OVL_FUNCTION (t); - return DECL_SOURCE_LOCATION (t); + return TREE_LOCUS (t); } /* Now the interfaces from error et al to dump_type et al. Each takes an diff --git a/gcc/cp/init.c b/gcc/cp/init.c index ace82cd..4427754 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2414,9 +2414,9 @@ create_temporary_var (tree type) decl = build_decl (VAR_DECL, NULL_TREE, type); TREE_USED (decl) = 1; DECL_ARTIFICIAL (decl) = 1; - DECL_SOURCE_LOCATION (decl) = input_location; DECL_IGNORED_P (decl) = 1; DECL_CONTEXT (decl) = current_function_decl; + set_tree_locus (decl, input_location); return decl; } diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 5277004..b5d5e32 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -719,7 +719,7 @@ synthesize_method (tree fndecl) where the attempt to generate the function occurs, giving the user a hint as to why we are attempting to generate the function. */ - DECL_SOURCE_LOCATION (fndecl) = input_location; + set_tree_locus (fndecl, input_location); interface_unknown = 1; start_function (NULL_TREE, fndecl, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED); diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index 2b7df6c..a817084 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -109,7 +109,7 @@ update_cloned_parm (tree parm, tree cloned_parm) /* The name may have changed from the declaration. */ DECL_NAME (cloned_parm) = DECL_NAME (parm); - DECL_SOURCE_LOCATION (cloned_parm) = DECL_SOURCE_LOCATION (parm); + copy_tree_locus (cloned_parm, parm); } /* FN is a function that has a complete body. Clone the body as @@ -146,7 +146,7 @@ maybe_clone_body (tree fn) splay_tree decl_map; /* Update CLONE's source position information to match FN's. */ - DECL_SOURCE_LOCATION (clone) = DECL_SOURCE_LOCATION (fn); + copy_tree_locus (clone, fn); DECL_INLINE (clone) = DECL_INLINE (fn); DECL_DECLARED_INLINE_P (clone) = DECL_DECLARED_INLINE_P (fn); DECL_COMDAT (clone) = DECL_COMDAT (fn); diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 12baea1..c1d49e7 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -966,10 +966,9 @@ register_specialization (tree spec, tree tmpl, tree args) else if (DECL_TEMPLATE_SPECIALIZATION (fn)) { if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec)) - /* Dup decl failed, but this is a new - definition. Set the line number so any errors - match this new definition. */ - DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec); + /* Dup decl failed, but this is a new definition. Set the + line number so any errors match this new definition. */ + copy_tree_locus (fn, spec); return fn; } @@ -1783,9 +1782,8 @@ check_explicit_specialization (tree declarator, DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE; if (have_def) { - DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl); - DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl)) - = DECL_SOURCE_LOCATION (decl); + copy_tree_locus (tmpl, decl); + copy_tree_locus (DECL_TEMPLATE_RESULT (tmpl), decl); } return tmpl; } @@ -4255,8 +4253,7 @@ lookup_template_class (tree d1, type_decl = create_implicit_typedef (DECL_NAME (template), t); DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t); TYPE_STUB_DECL (t) = type_decl; - DECL_SOURCE_LOCATION (type_decl) - = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type)); + copy_tree_locus (type_decl, TYPE_STUB_DECL (template_type)); } else type_decl = TYPE_NAME (t); @@ -4712,7 +4709,7 @@ tsubst_friend_function (tree decl, tree args) tree new_friend; location_t saved_loc = input_location; - input_location = DECL_SOURCE_LOCATION (decl); + input_location = TREE_LOCUS (decl); if (TREE_CODE (decl) == FUNCTION_DECL && DECL_TEMPLATE_INSTANTIATION (decl) @@ -5153,7 +5150,7 @@ instantiate_class_template (tree type) /* Set the input location to the template definition. This is needed if tsubsting causes an error. */ - input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern)); + input_location = TREE_LOCUS (TYPE_NAME (pattern)); TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern); TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern); @@ -5302,7 +5299,7 @@ instantiate_class_template (tree type) assist in error message reporting. Since we called push_tinst_level above, we don't need to restore these. */ - input_location = DECL_SOURCE_LOCATION (t); + input_location = TREE_LOCUS (t); if (TREE_CODE (t) == TEMPLATE_DECL) processing_template_decl++; @@ -5411,7 +5408,7 @@ instantiate_class_template (tree type) implicit functions at a predictable point, and the same point that would be used for non-template classes. */ typedecl = TYPE_MAIN_DECL (type); - input_location = DECL_SOURCE_LOCATION (typedecl); + input_location = TREE_LOCUS (typedecl); unreverse_member_declarations (type); finish_struct_1 (type); @@ -5708,7 +5705,7 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain) /* Set the filename and linenumber to improve error-reporting. */ saved_loc = input_location; - input_location = DECL_SOURCE_LOCATION (t); + input_location = TREE_LOCUS (t); switch (TREE_CODE (t)) { @@ -10774,7 +10771,7 @@ instantiate_decl (tree d, int defer_ok) else pattern_defined = ! DECL_IN_AGGR_P (code_pattern); - input_location = DECL_SOURCE_LOCATION (d); + input_location = TREE_LOCUS (d); if (pattern_defined) { @@ -10890,7 +10887,7 @@ instantiate_decl (tree d, int defer_ok) /* We already set the file and line above. Reset them now in case they changed as a result of calling regenerate_decl_from_template. */ - input_location = DECL_SOURCE_LOCATION (d); + input_location = TREE_LOCUS (d); if (TREE_CODE (d) == VAR_DECL) { @@ -11178,8 +11175,7 @@ tsubst_enum (tree tag, tree newtag, tree args) } finish_enum (newtag); - DECL_SOURCE_LOCATION (TYPE_NAME (newtag)) - = DECL_SOURCE_LOCATION (TYPE_NAME (tag)); + copy_tree_locus (TYPE_NAME (newtag), TYPE_NAME (tag)); } /* DECL is a FUNCTION_DECL that is a template specialization. Return diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index ef42579..ca04ddf 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2030,7 +2030,7 @@ begin_class_definition (tree t) } /* Update the location of the decl. */ - DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location; + set_tree_locus (TYPE_NAME (t), input_location); if (TYPE_BEING_DEFINED (t)) { diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 0c729d6..6dce605 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2153,7 +2153,7 @@ cp_copy_res_decl_for_inlining (tree result, && DECL_NAME (var) == NULL_TREE) { DECL_NAME (var) = DECL_NAME (nrv); - DECL_SOURCE_LOCATION (var) = DECL_SOURCE_LOCATION (nrv); + copy_tree_locus (var, nrv); DECL_ABSTRACT_ORIGIN (var) = DECL_ORIGIN (nrv); /* Don't lose initialization info. */ DECL_INITIAL (var) = DECL_INITIAL (nrv); diff --git a/gcc/dbxout.c b/gcc/dbxout.c index e4c7978..3f457b5 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -2689,7 +2689,7 @@ static void dbxout_prepare_symbol (tree decl ATTRIBUTE_UNUSED) { #ifdef WINNING_GDB - const char *filename = DECL_SOURCE_FILE (decl); + const char *filename = TREE_FILENAME (decl); dbxout_source_file (asmfile, filename); #endif @@ -2703,7 +2703,7 @@ dbxout_finish_symbol (tree sym) #else int line = 0; if (use_gnu_debug_info_extensions && sym != 0) - line = DECL_SOURCE_LINE (sym); + line = TREE_LINENO (sym); fprintf (asmfile, "\",%d,0,%d,", current_sym_code, line); if (current_sym_addr) diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index c29867a..9537339 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -139,7 +139,7 @@ text_specifies_location (text_info *text, location_t *locus) else if (p[0] == '%' && p[1] == 'J') { tree t = va_arg (*text->args_ptr, tree); - *locus = DECL_SOURCE_LOCATION (t); + *locus = TREE_LOCUS (t); text->format_spec = p + 2; return true; } diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi index 29ccaec..7f125ee 100644 --- a/gcc/doc/c-tree.texi +++ b/gcc/doc/c-tree.texi @@ -856,13 +856,13 @@ entity. @item TREE_TYPE This macro returns the type of the entity declared. -@item DECL_SOURCE_FILE +@item TREE_FILENAME This macro returns the name of the file in which the entity was declared, as a @code{char*}. For an entity declared implicitly by the compiler (like @code{__builtin_memcpy}), this will be the string @code{"<internal>"}. -@item DECL_SOURCE_LINE +@item TREE_LINENO This macro returns the line number at which the entity was declared, as an @code{int}. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5fa730e..dc28f11 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -9907,10 +9907,10 @@ add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl) static void add_src_coords_attributes (dw_die_ref die, tree decl) { - unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); + unsigned file_index = lookup_filename (TREE_FILENAME (decl)); add_AT_unsigned (die, DW_AT_decl_file, file_index); - add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl)); + add_AT_unsigned (die, DW_AT_decl_line, TREE_LINENO (decl)); } /* Add a DW_AT_name attribute and source coordinate attribute for the @@ -10596,7 +10596,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) } else if (old_die) { - unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); + unsigned file_index = lookup_filename (TREE_FILENAME (decl)); if (!get_AT_flag (old_die, DW_AT_declaration) /* We can have a normal definition following an inline one in the @@ -10625,7 +10625,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) && (DECL_ARTIFICIAL (decl) || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index && (get_AT_unsigned (old_die, DW_AT_decl_line) - == (unsigned) DECL_SOURCE_LINE (decl))))) + == (unsigned) TREE_LINENO (decl))))) { subr_die = old_die; @@ -10640,9 +10640,9 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index) add_AT_unsigned (subr_die, DW_AT_decl_file, file_index); if (get_AT_unsigned (old_die, DW_AT_decl_line) - != (unsigned) DECL_SOURCE_LINE (decl)) + != (unsigned) TREE_LINENO (decl)) add_AT_unsigned - (subr_die, DW_AT_decl_line, DECL_SOURCE_LINE (decl)); + (subr_die, DW_AT_decl_line, TREE_LINENO (decl)); } } else @@ -10859,16 +10859,16 @@ gen_variable_die (tree decl, dw_die_ref context_die) add_AT_die_ref (var_die, DW_AT_specification, old_die); if (DECL_NAME (decl)) { - unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl)); + unsigned file_index = lookup_filename (TREE_FILENAME (decl)); if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index) add_AT_unsigned (var_die, DW_AT_decl_file, file_index); if (get_AT_unsigned (old_die, DW_AT_decl_line) - != (unsigned) DECL_SOURCE_LINE (decl)) + != (unsigned) TREE_LINENO (decl)) add_AT_unsigned (var_die, DW_AT_decl_line, - DECL_SOURCE_LINE (decl)); + TREE_LINENO (decl)); } } else @@ -12036,7 +12036,7 @@ dwarf2out_decl (tree decl) /* Don't bother trying to generate any DIEs to represent any of the normal built-in types for the language we are compiling. */ - if (DECL_SOURCE_LINE (decl) == 0) + if (!TREE_LOCUS_SET_P (decl)) { /* OK, we need to generate one for `bool' so GDB knows what type comparisons have. */ diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index dfd1f0b..0ad9d0f 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -3411,10 +3411,10 @@ name_and_src_coords_attributes (tree decl) Fred Fish sez that m68k/svr4 assemblers botch those. */ ASM_OUTPUT_POP_SECTION (asm_out_file); - file_index = lookup_filename (DECL_SOURCE_FILE (decl)); + file_index = lookup_filename (TREE_FILENAME (decl)); ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION); - src_coords_attribute (file_index, DECL_SOURCE_LINE (decl)); + src_coords_attribute (file_index, TREE_LINENO (decl)); } #endif /* defined(DWARF_DECL_COORDINATES) */ } @@ -5618,7 +5618,7 @@ dwarfout_file_scope_decl (tree decl, int set_finalizing) /* ??? This code is different than the equivalent code in dwarf2out.c. The dwarf2out.c code is probably more correct. */ - if (DECL_SOURCE_LINE (decl) == 0 + if (!TREE_LOCUS_SET_P (decl) && (type_is_fundamental (TREE_TYPE (decl)) || TREE_CODE (TREE_TYPE (decl)) == LANG_TYPE)) return; diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index e985070..5d588e9 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,8 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * com.c, ste.c: Update for DECL_SOURCE_LOCATION rename and + change to const. + 2003-09-21 Toon Moene <toon@moene.indiv.nluug.nl> * news.texi: Update with fixed PR's. diff --git a/gcc/f/com.c b/gcc/f/com.c index a5100d9..9658a54 100644 --- a/gcc/f/com.c +++ b/gcc/f/com.c @@ -13227,7 +13227,7 @@ duplicate_decls (tree newdecl, tree olddecl) return 0; } else if (TREE_CODE (olddecl) == FUNCTION_DECL - && DECL_SOURCE_LINE (olddecl) == 0) + && !TREE_LOCUS_SET_P (olddecl)) { /* A function declaration for a predeclared function that isn't actually built in. */ @@ -13297,8 +13297,7 @@ duplicate_decls (tree newdecl, tree olddecl) if ((DECL_INITIAL (newdecl) == 0 && DECL_INITIAL (olddecl) != 0) || (DECL_CONTEXT (newdecl) != 0 && DECL_CONTEXT (olddecl) == 0)) { - DECL_SOURCE_LINE (newdecl) = DECL_SOURCE_LINE (olddecl); - DECL_SOURCE_FILE (newdecl) = DECL_SOURCE_FILE (olddecl); + copy_tree_locus (newdecl, olddecl); if (DECL_CONTEXT (olddecl) == 0 && TREE_CODE (newdecl) != FUNCTION_DECL) @@ -14535,7 +14534,7 @@ pushdecl (tree x) if (TREE_CODE (x) == TYPE_DECL) { - if (DECL_SOURCE_LINE (x) == 0) + if (!TREE_LOCUS_SET_P (x)) { if (TYPE_NAME (TREE_TYPE (x)) == 0) TYPE_NAME (TREE_TYPE (x)) = x; diff --git a/gcc/f/ste.c b/gcc/f/ste.c index 82435bc..dc0d27e 100644 --- a/gcc/f/ste.c +++ b/gcc/f/ste.c @@ -2392,8 +2392,8 @@ ffeste_labeldef_branch (ffelab label) assert (DECL_INITIAL (glabel) == NULL_TREE); DECL_INITIAL (glabel) = error_mark_node; - DECL_SOURCE_FILE (glabel) = ffelab_definition_filename (label); - DECL_SOURCE_LINE (glabel) = ffelab_definition_filelinenum (label); + set_tree_file_line (glabel, ffelab_definition_filename (label), + ffelab_definition_filelinenum (label)); emit_nop (); diff --git a/gcc/function.c b/gcc/function.c index baec4ab..1af4d38 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6399,8 +6399,8 @@ init_function_start (tree subr) function. Also tell final how to output a linenum before the function prologue. Note linenums could be missing, e.g. when compiling a Java .class file. */ - if (DECL_SOURCE_LINE (subr)) - emit_line_note (DECL_SOURCE_LOCATION (subr)); + if (TREE_LOCUS_SET_P (subr)) + emit_line_note (TREE_LOCUS (subr)); /* Make sure first insn is a note even if we don't want linenums. This makes sure the first insn will never be deleted. diff --git a/gcc/integrate.c b/gcc/integrate.c index 21a738e..2c6ff17 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -987,7 +987,7 @@ expand_inline_function (tree fndecl, tree parms, rtx target, int ignore, && ! (GET_CODE (XEXP (loc, 0)) == REG && REGNO (XEXP (loc, 0)) > LAST_VIRTUAL_REGISTER)) { - rtx note = emit_line_note (DECL_SOURCE_LOCATION (formal)); + rtx note = emit_line_note (TREE_LOCUS (formal)); if (note) RTX_INTEGRATED_P (note) = 1; @@ -2985,7 +2985,7 @@ output_inline_function (tree fndecl) /* Make sure warnings emitted by the optimizers (e.g. control reaches end of non-void function) is not wildly incorrect. */ - input_location = DECL_SOURCE_LOCATION (fndecl); + input_location = TREE_LOCUS (fndecl); /* Compile this function all the way down to assembly code. As a side effect this destroys the saved RTL representation, but diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index a14c1db..be46849 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,8 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * class.c, decl.c, jcf-parse.c, jcf-write.c, parse.y, + resource.c: Update for DECL_SOURCE_LOCATION rename and change to const. + 2003-09-20 Richard Henderson <rth@redhat.com> * check-init.c, class.c, decl.c, expr.c: Use %J in diagnostics. diff --git a/gcc/java/class.c b/gcc/java/class.c index e3e6cc3..289dbfa 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1728,8 +1728,8 @@ maybe_layout_super_class (tree super_class, tree this_class) { tree this_decl = TYPE_NAME (this_class); this_wrap = build_expr_wfl (this_class, - DECL_SOURCE_FILE (this_decl), - DECL_SOURCE_LINE (this_decl), 0); + TREE_FILENAME (this_decl), + TREE_LINENO (this_decl), 0); } super_class = do_resolve_class (NULL_TREE, /* FIXME? */ super_class, NULL_TREE, this_wrap); @@ -1767,8 +1767,8 @@ layout_class (tree this_class) tree decl = TYPE_NAME (TREE_PURPOSE (current)); sprintf (buffer, "\n which inherits from `%s' (%s:%d)", IDENTIFIER_POINTER (DECL_NAME (decl)), - DECL_SOURCE_FILE (decl), - DECL_SOURCE_LINE (decl)); + TREE_FILENAME (decl), + TREE_LINENO (decl)); obstack_grow (&temporary_obstack, buffer, strlen (buffer)); } obstack_1grow (&temporary_obstack, '\0'); @@ -2059,7 +2059,6 @@ emit_register_classes (void) init_decl = build_decl (FUNCTION_DECL, init_name, init_type); SET_DECL_ASSEMBLER_NAME (init_decl, init_name); - DECL_SOURCE_LINE (init_decl) = 0; TREE_STATIC (init_decl) = 1; current_function_decl = init_decl; DECL_RESULT (init_decl) = build_decl (RESULT_DECL, NULL_TREE, @@ -2084,7 +2083,7 @@ emit_register_classes (void) for ( t = registered_class; t; t = TREE_CHAIN (t)) emit_library_call (registerClass_libfunc, 0, VOIDmode, 1, XEXP (DECL_RTL (t), 0), Pmode); - input_location = DECL_SOURCE_LOCATION (init_decl); + input_location = TREE_LOCUS (init_decl); expand_function_end (); poplevel (1, 0, 1); rest_of_compilation (init_decl); diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 7ddf704..d92bbdc 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -1070,7 +1070,7 @@ pushdecl (tree x) /* Maybe warn if shadowing something else. */ else if (warn_shadow && !DECL_EXTERNAL (x) /* No shadow warnings for internally generated vars. */ - && DECL_SOURCE_LINE (x) != 0 + && TREE_LOCUS_SET_P (x) /* No shadow warnings for vars made for inlining. */ && ! DECL_FROM_INLINE (x)) { @@ -1817,8 +1817,7 @@ java_expand_body (tree fndecl) int saved_lineno = input_line; current_function_decl = fndecl; - input_filename = DECL_SOURCE_FILE (fndecl); - input_line = DECL_SOURCE_LINE (fndecl); + input_location = TREE_LOCUS (fndecl); timevar_push (TV_EXPAND); diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index f47dbe0..eea2a15 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -145,8 +145,10 @@ set_source_filename (JCF *jcf, int index) return; } input_filename = sfname; - DECL_SOURCE_FILE (TYPE_NAME (current_class)) = sfname; - if (current_class == main_class) main_input_filename = input_filename; + set_tree_file_line (TYPE_NAME (current_class), sfname, + TREE_LINENO (TYPE_NAME (current_class))); + if (current_class == main_class) + main_input_filename = input_filename; } #define HANDLE_SOURCEFILE(INDEX) set_source_filename (jcf, INDEX) @@ -418,7 +420,7 @@ give_name_to_class (JCF *jcf, int i) tree class_name = unmangle_classname (JPOOL_UTF_DATA (jcf, j), JPOOL_UTF_LENGTH (jcf, j)); this_class = lookup_class (class_name); - input_filename = DECL_SOURCE_FILE (TYPE_NAME (this_class)); + input_filename = TREE_FILENAME (TYPE_NAME (this_class)); input_line = 0; if (main_input_filename == NULL && jcf == main_jcf) main_input_filename = input_filename; @@ -708,7 +710,7 @@ parse_class_file (void) java_layout_seen_class_methods (); - input_filename = DECL_SOURCE_FILE (TYPE_NAME (current_class)); + input_filename = TREE_FILENAME (TYPE_NAME (current_class)); input_line = 0; (*debug_hooks->start_source_file) (input_line, input_filename); init_outgoing_cpool (); diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c index 82c77b1..bc76c88 100644 --- a/gcc/java/jcf-write.c +++ b/gcc/java/jcf-write.c @@ -3113,7 +3113,7 @@ generate_classfile (tree clas, struct jcf_partial *state) } ptr = methods_count_ptr; UNSAFE_PUT2 (methods_count); - source_file = DECL_SOURCE_FILE (TYPE_NAME (clas)); + source_file = TREE_FILENAME (TYPE_NAME (clas)); for (s = source_file; ; s++) { char ch = *s; @@ -3299,7 +3299,7 @@ make_class_file_name (tree clas) /* Make sure we put the class file into the .java file's directory, and not into some subdirectory thereof. */ char *t; - dname = DECL_SOURCE_FILE (TYPE_NAME (clas)); + dname = TREE_FILENAME (TYPE_NAME (clas)); slash = strrchr (dname, DIR_SEPARATOR); #ifdef DIR_SEPARATOR_2 if (! slash) diff --git a/gcc/java/parse.y b/gcc/java/parse.y index a5064e1..de0a7d4 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -3208,7 +3208,7 @@ classitf_redefinition_error (const char *context, tree id, tree decl, tree cl) { parse_error_context (cl, "%s `%s' already defined in %s:%d", context, IDENTIFIER_POINTER (id), - DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl)); + TREE_FILENAME (decl), TREE_LINENO (decl)); /* Here we should point out where its redefined. It's a unicode. FIXME */ } @@ -3716,12 +3716,10 @@ maybe_create_class_interface_decl (tree decl, tree raw_name, decl = push_class (make_class (), qualified_name); /* Take care of the file and line business */ - DECL_SOURCE_FILE (decl) = EXPR_WFL_FILENAME (cl); - /* If we're emiting xrefs, store the line/col number information */ - if (flag_emit_xref) - DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (cl); - else - DECL_SOURCE_LINE (decl) = EXPR_WFL_LINENO (cl); + set_tree_file_line (decl, EXPR_WFL_FILENAME (cl), + (flag_emit_xref + ? EXPR_WFL_LINECOL (cl) : EXPR_WFL_LINENO (cl))); + CLASS_FROM_SOURCE_P (TREE_TYPE (decl)) = 1; CLASS_PARSED_P (TREE_TYPE (decl)) = 1; CLASS_FROM_CURRENTLY_COMPILED_P (TREE_TYPE (decl)) = @@ -4205,7 +4203,7 @@ duplicate_declaration_error_p (tree new_field_name, tree new_type, tree cl) (cl , "Duplicate variable declaration: `%s %s' was `%s %s' (%s:%d)", t1, IDENTIFIER_POINTER (new_field_name), t2, IDENTIFIER_POINTER (DECL_NAME (decl)), - DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl)); + TREE_FILENAME (decl), TREE_LINENO (decl)); free (t1); free (t2); return 1; @@ -4687,7 +4685,7 @@ method_header (int flags, tree type, tree mdecl, tree throws) /* If doing xref, store column and line number information instead of the line number only. */ if (flag_emit_xref) - DECL_SOURCE_LINE (meth) = EXPR_WFL_LINECOL (id); + set_tree_file_line (meth, TREE_FILENAME (meth), EXPR_WFL_LINECOL (id)); return meth; } @@ -6705,8 +6703,8 @@ lookup_cl (tree decl) cl_v = build_expr_wfl (NULL_TREE, NULL, 0, 0); } - EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (DECL_SOURCE_FILE (decl)); - EXPR_WFL_SET_LINECOL (cl_v, DECL_SOURCE_LINE (decl), -1); + EXPR_WFL_FILENAME_NODE (cl_v) = get_identifier (TREE_FILENAME (decl)); + EXPR_WFL_SET_LINECOL (cl_v, TREE_LINENO (decl), -1); line = java_get_line_col (EXPR_WFL_FILENAME (cl_v), EXPR_WFL_LINENO (cl_v), EXPR_WFL_COLNO (cl_v)); @@ -7286,7 +7284,7 @@ declare_local_variables (int modifier, tree type, tree vlist) if ((other = lookup_name_in_blocks (name))) { variable_redefinition_error (wfl, name, TREE_TYPE (other), - DECL_SOURCE_LINE (other)); + TREE_LINENO (other)); continue; } @@ -7306,7 +7304,8 @@ declare_local_variables (int modifier, tree type, tree vlist) /* If doing xreferencing, replace the line number with the WFL compound value */ if (flag_emit_xref) - DECL_SOURCE_LINE (decl) = EXPR_WFL_LINECOL (wfl); + set_tree_file_line (decl, TREE_FILENAME (decl), + EXPR_WFL_LINECOL (wfl)); /* Don't try to use an INIT statement when an error was found */ if (init && java_error_count) @@ -7414,7 +7413,7 @@ create_artificial_method (tree class, int flags, tree type, static void start_artificial_method_body (tree mdecl) { - DECL_SOURCE_LINE (mdecl) = 1; + set_tree_file_line (mdecl, TREE_FILENAME (mdecl), 1); DECL_FUNCTION_LAST_LINE (mdecl) = 1; source_start_java_method (mdecl); enter_block (); @@ -7980,7 +7979,7 @@ start_complete_expand_method (tree mdecl) TREE_CHAIN (tem) = next; } pushdecl_force_head (DECL_ARGUMENTS (mdecl)); - input_line = DECL_SOURCE_LINE (mdecl); + input_location = TREE_LOCUS (mdecl); build_result_decl (mdecl); } @@ -10145,7 +10144,7 @@ check_deprecation (tree wfl, tree decl) to the record. */ decl = TYPE_NAME (TREE_TYPE (elt)); } - file = DECL_SOURCE_FILE (decl); + file = TREE_FILENAME (decl); /* Complain if the field is deprecated and the file it was defined in isn't compiled at the same time the file which contains its diff --git a/gcc/java/resource.c b/gcc/java/resource.c index b71a670..25b8a81 100644 --- a/gcc/java/resource.c +++ b/gcc/java/resource.c @@ -114,7 +114,6 @@ write_resource_constructor (void) init_type = build_function_type (void_type_node, end_params_node); init_decl = build_decl (FUNCTION_DECL, init_name, init_type); - DECL_SOURCE_LINE (init_decl) = 0; SET_DECL_ASSEMBLER_NAME (init_decl, init_name); TREE_STATIC (init_decl) = 1; current_function_decl = init_decl; @@ -140,7 +139,7 @@ write_resource_constructor (void) Pmode); } - input_location = DECL_SOURCE_LOCATION (init_decl); + input_location = TREE_LOCUS (init_decl); expand_function_end (); poplevel (1, 0, 1); { diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 0c07543..02678a4 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -1984,13 +1984,12 @@ build_selector_translation_table (void) } if (!found) { - /* Adjust line number for warning message. */ - int save_lineno = input_line; + location_t loc = input_location; if (flag_next_runtime && TREE_PURPOSE (chain)) - input_line = DECL_SOURCE_LINE (TREE_PURPOSE (chain)); - warning ("creating selector for non existant method %s", - IDENTIFIER_POINTER (TREE_VALUE (chain))); - input_line = save_lineno; + loc = TREE_LOCUS (TREE_PURPOSE (chain)); + + warning ("%Hcreating selector for non existant method %s", + &loc, IDENTIFIER_POINTER (TREE_VALUE (chain))); } } @@ -2857,7 +2856,6 @@ build_tmp_function_decl (void) expr_decl = build1 (INDIRECT_REF, NULL_TREE, expr_decl); tmp_decl = define_decl (expr_decl, decl_specs); - DECL_SOURCE_LINE (tmp_decl) = 0; return tmp_decl; } diff --git a/gcc/print-tree.c b/gcc/print-tree.c index 3d6c01e..4049500 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -368,7 +368,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent) fprintf (file, " %s", GET_MODE_NAME (mode)); fprintf (file, " file %s line %d", - DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node)); + TREE_FILENAME (node), TREE_LINENO (node)); print_node (file, "size", DECL_SIZE (node), indent + 4); print_node (file, "unit size", DECL_SIZE_UNIT (node), indent + 4); @@ -3981,7 +3981,7 @@ expand_decl_init (tree decl) } else if (DECL_INITIAL (decl) && TREE_CODE (DECL_INITIAL (decl)) != TREE_LIST) { - emit_line_note (DECL_SOURCE_LOCATION (decl)); + emit_line_note (TREE_LOCUS (decl)); expand_assignment (decl, DECL_INITIAL (decl), 0); emit_queue (); } diff --git a/gcc/toplev.c b/gcc/toplev.c index 03485bc..559e682 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1709,7 +1709,7 @@ warn_deprecated_use (tree node) if (DECL_P (node)) warning ("`%s' is deprecated (declared at %s:%d)", IDENTIFIER_POINTER (DECL_NAME (node)), - DECL_SOURCE_FILE (node), DECL_SOURCE_LINE (node)); + TREE_FILENAME (node), TREE_LINENO (node)); else if (TYPE_P (node)) { const char *what = NULL; @@ -1725,13 +1725,13 @@ warn_deprecated_use (tree node) { if (decl) warning ("`%s' is deprecated (declared at %s:%d)", what, - DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl)); + TREE_FILENAME (decl), TREE_LINENO (decl)); else warning ("`%s' is deprecated", what); } else if (decl) warning ("type is deprecated (declared at %s:%d)", - DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl)); + TREE_FILENAME (decl), TREE_LINENO (decl)); else warning ("type is deprecated"); } diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index c369633..296d19c 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -321,18 +321,18 @@ dequeue_and_dump (dump_info_p di) queue_and_dump_type (di, t); dump_child ("scpe", DECL_CONTEXT (t)); /* And a source position. */ - if (DECL_SOURCE_FILE (t)) + if (TREE_FILENAME (t)) { - const char *filename = strrchr (DECL_SOURCE_FILE (t), '/'); + const char *filename = strrchr (TREE_FILENAME (t), '/'); if (!filename) - filename = DECL_SOURCE_FILE (t); + filename = TREE_FILENAME (t); else /* Skip the slash. */ ++filename; dump_maybe_newline (di); fprintf (di->stream, "srcp: %s:%-6d ", filename, - DECL_SOURCE_LINE (t)); + TREE_LINENO (t)); di->column += 6 + strlen (filename) + 8; } /* And any declaration can be compiler-generated. */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index e4e24b2..13cb5bb 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1322,7 +1322,7 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data) line numbers corresponding to the function we are calling. We wrap the whole inlined body in an EXPR_WITH_FILE_AND_LINE as well because individual statements don't record the filename. */ - push_srcloc (DECL_SOURCE_FILE (fn), DECL_SOURCE_LINE (fn)); + push_srcloc (TREE_FILENAME (fn), TREE_LINENO (fn)); #ifndef INLINER_FOR_JAVA /* Build a statement-expression containing code to initialize the @@ -1522,7 +1522,7 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data) #ifndef INLINER_FOR_JAVA chain = TREE_CHAIN (*tp); #endif /* INLINER_FOR_JAVA */ - *tp = build_expr_wfl (expr, DECL_SOURCE_FILE (fn), DECL_SOURCE_LINE (fn), + *tp = build_expr_wfl (expr, TREE_FILENAME (fn), TREE_LINENO (fn), /*col=*/0); EXPR_WFL_EMIT_LINE_NOTE (*tp) = 1; #ifndef INLINER_FOR_JAVA diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index e6049cb..ab11f4d 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -105,7 +105,7 @@ tree_rest_of_compilation (tree fndecl, bool nested_p) /* Initialize the RTL code for the function. */ current_function_decl = fndecl; saved_loc = input_location; - input_location = DECL_SOURCE_LOCATION (fndecl); + input_location = TREE_LOCUS (fndecl); init_function_start (fndecl); /* This function is being processed in whole-function mode. */ @@ -287,7 +287,7 @@ make_node (enum tree_code code) DECL_ALIGN (t) = 1; DECL_USER_ALIGN (t) = 0; DECL_IN_SYSTEM_HEADER (t) = in_system_header; - DECL_SOURCE_LOCATION (t) = input_location; + set_tree_locus (t, input_location); DECL_UID (t) = next_decl_uid++; /* We have not yet computed the alias set for this declaration. */ diff --git a/gcc/tree.def b/gcc/tree.def index 4b6d236..f603f24 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -327,7 +327,7 @@ DEFTREECODE (STRING_CST, "string_cst", 'c', 0) built-in functions. Its value is an enum built_in_function that says which built-in function it is. - DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE + TREE_FILENAME holds a filename string and TREE_LINENO holds a line number. In some cases these can be the location of a reference, if no definition has been seen. @@ -802,6 +802,29 @@ struct tree_vec GTY(()) #define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I) #define TREE_COMPLEXITY(NODE) (EXPR_CHECK (NODE)->exp.complexity) +/* These macros access the location of a declaration. For 3.4, this is + only defined for DECLs, but for 3.5 it will be valid on EXPRs as well; + thus the name is not decl specific. The values accessed from the + uppercase macros are intentionally read-only. Use the setter functions + to write to this field. */ + +#define TREE_LOCUS(NODE) \ + (*(const location_t *)&DECL_CHECK (NODE)->decl.locus) +#define TREE_FILENAME(NODE) (TREE_LOCUS (NODE).file) +#define TREE_LINENO(NODE) (TREE_LOCUS (NODE).line) +#define TREE_LOCUS_SET_P(NODE) (TREE_LINENO (NODE) != 0) + +#define set_tree_locus(NODE, LOC) \ + ((void)(DECL_CHECK (NODE)->decl.locus = (LOC))) +#define copy_tree_locus(DEST, SRC) \ + ((void)(DECL_CHECK (DEST)->decl.locus = DECL_CHECK (SRC)->decl.locus)) +#define set_tree_file_line(NODE, FILE, LINE) \ + do { \ + location_t *l_ = &DECL_CHECK (NODE)->decl.locus; \ + l_->file = (FILE); \ + l_->line = (LINE); \ + } while (0) + /* In a LABELED_BLOCK_EXPR node. */ #define LABELED_BLOCK_LABEL(NODE) \ TREE_OPERAND_CHECK_CODE (NODE, LABELED_BLOCK_EXPR, 0) @@ -1309,13 +1332,6 @@ struct tree_type GTY(()) /* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which if nonzero, indicates that the field occupies the type. */ #define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->decl.initial) -/* These two fields describe where in the source code the declaration - was. If the declaration appears in several places (as for a C - function that is declared first and then defined later), this - information should refer to the definition. */ -#define DECL_SOURCE_LOCATION(NODE) (DECL_CHECK (NODE)->decl.locus) -#define DECL_SOURCE_FILE(NODE) (DECL_SOURCE_LOCATION (NODE).file) -#define DECL_SOURCE_LINE(NODE) (DECL_SOURCE_LOCATION (NODE).line) /* Holds the size of the datum, in bits, as a tree expression. Need not be constant. */ #define DECL_SIZE(NODE) (DECL_CHECK (NODE)->decl.size) diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog index 7b8a5a5..75b9b2f 100644 --- a/gcc/treelang/ChangeLog +++ b/gcc/treelang/ChangeLog @@ -1,3 +1,8 @@ +2003-09-21 Richard Henderson <rth@redhat.com> + + * treetree.c: Update for DECL_SOURCE_LOCATION rename and + change to const. + 2003-07-28 Andreas Jaeger <aj@suse.de> * treetree.c: Convert remaining K&R prototypes to ISO C90. diff --git a/gcc/treelang/treetree.c b/gcc/treelang/treetree.c index 7697e3c..da92110 100644 --- a/gcc/treelang/treetree.c +++ b/gcc/treelang/treetree.c @@ -313,8 +313,9 @@ tree_code_create_function_prototype (unsigned char* chars, id = get_identifier ((const char*)chars); fn_decl = build_decl (FUNCTION_DECL, id, fn_type); - DECL_CONTEXT (fn_decl) = NULL_TREE; /* Nested functions not supported here. */ - DECL_SOURCE_LOCATION (fn_decl) = loc; + /* Nested functions not supported here. */ + DECL_CONTEXT (fn_decl) = NULL_TREE; + set_tree_locus (fn_decl, loc); TREE_USED (fn_decl) = 1; @@ -387,14 +388,14 @@ tree_code_create_function_initial (tree prev_saved, current_function_decl = fn_decl; DECL_INITIAL (fn_decl) = error_mark_node; - DECL_SOURCE_LOCATION (fn_decl) = loc; + set_tree_locus (fn_decl, loc); /* Prepare creation of rtl for a new function. */ resultdecl = DECL_RESULT (fn_decl) = build_decl (RESULT_DECL, NULL_TREE, TREE_TYPE (TREE_TYPE (fn_decl))); DECL_CONTEXT (DECL_RESULT (fn_decl)) = fn_decl; - DECL_SOURCE_LOCATION (resultdecl) = loc; + set_tree_locus (resultdecl, loc); /* Work out the size. ??? is this needed. */ layout_decl (DECL_RESULT (fn_decl), 0); @@ -414,7 +415,7 @@ tree_code_create_function_initial (tree prev_saved, if (!fn_decl) abort (); DECL_CONTEXT (parm_decl) = fn_decl; - DECL_SOURCE_LOCATION (parm_decl) = loc; + set_tree_locus (parm_decl, loc); parm_list = chainon (parm_decl, parm_list); } @@ -582,7 +583,7 @@ tree_code_create_variable (unsigned int storage_class, DECL_CONTEXT (var_decl) = current_function_decl; - DECL_SOURCE_LOCATION (var_decl) = loc; + set_tree_locus (var_decl, loc); /* Set the storage mode and whether only visible in the same file. */ switch (storage_class) diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index 7c03ca5..0999af9 100644 --- a/gcc/xcoffout.c +++ b/gcc/xcoffout.c @@ -411,7 +411,7 @@ xcoffout_declare_function (FILE *file, tree decl, const char *name) /* Any pending .bi or .ei must occur before the .function pseudo op. Otherwise debuggers will think that the function is in the previous file and/or at the wrong line number. */ - xcoffout_source_file (file, DECL_SOURCE_FILE (decl), 0); + xcoffout_source_file (file, TREE_FILENAME (decl), 0); dbxout_symbol (decl, 0); /* .function NAME, TOP, MAPPING, TYPE, SIZE |