tree.c (tree_size): For all 'c' and 'x' nodes...

* tree.c (tree_size): For all 'c' and 'x' nodes, look directly
        at the sizes of the relevant structures, rather than relying
        on TREE_CODE_LENGTH.  Call lang_hooks.tree_size to get the
        sizes of any such we don't know about.  Use
        lang_hooks.identifier_size for IDENTIFIER_NODE.

        (initializer_zerop): Use CONSTRUCTOR_ELTS.
        * tree.def: Update commentary.  Make fourth element of
        the definition for all 'c' and 'x' nodes zero.

        * langhooks.h: New hook, tree_size / LANG_HOOKS_TREE_SIZE.
        * langhooks-def.h: Update to match.
        * langhooks.c: New default, lhd_tree_size.

        * c-common.def (SRCLOC): Kill.
        * c-pretty-print.c (pp_c_postfix_expression [case SRCLOC]):
        Remove entirely - was already #if-ed out.

ada:
        * ada-tree.def: Make fourth element for GNAT_LOOP_ID zero.
        * misc.c (gnat_tree_size): New function.
        (LANG_HOOKS_TREE_SIZE): Override.
cp:
        * cp-tree.def: Make fourth element for all 'c' and 'x' nodes zero.
        * cp-lang.c (cp_tree_size): New function.
        (LANG_HOOKS_TREE_SIZE): Override.

        * cp-tree.h (SOURCE_LOCUS, SRCLOC_FILE, SRCLOC_LINE, struct
        tree_srcloc, TS_CP_COMMON, TS_CP_SRCLOC): Kill.
        (union lang_tree_node): Remove common and srcloc members.
        (build_srcloc_here): Don't prototype.
        * decl.c (cp_tree_node_structure): Kill SRCLOC case.
        * pt.c (pending_templates): Correct comment.
        * tree.c (build_srcloc, build_srcloc_here): Kill.

From-SVN: r65323
This commit is contained in:
Zack Weinberg 2003-04-07 06:03:17 +00:00
parent a9c89a57f6
commit d78e771d46
18 changed files with 266 additions and 238 deletions

View File

@ -1,3 +1,24 @@
2003-04-06 Zack Weinberg <zack@codesourcery.com>
* tree.c (tree_size): For all 'c' and 'x' nodes, look directly
at the sizes of the relevant structures, rather than relying
on TREE_CODE_LENGTH. Call lang_hooks.tree_size to get the
sizes of any such we don't know about. Use
lang_hooks.identifier_size for IDENTIFIER_NODE.
(initializer_zerop): Use CONSTRUCTOR_ELTS.
* tree.def: Update commentary. Make fourth element of
the definition for all 'c' and 'x' nodes zero.
* langhooks.h: New hook, tree_size / LANG_HOOKS_TREE_SIZE.
* langhooks-def.h: Update to match.
* langhooks.c: New default, lhd_tree_size.
* c-common.def (SRCLOC): Kill.
* c-pretty-print.c (pp_c_postfix_expression [case SRCLOC]):
Remove entirely - was already #if-ed out.
2003-04-06 Zack Weinberg <zack@codesourcery.com>
* mklibgcc.in: Use a here document to avoid running afoul of
@ -5,29 +26,29 @@
2003-04-06 Aldy Hernandez <aldyh@redhat.com>
* doc/invoke.texi (RS/6000 and PowerPC Options): Document -mspe
option.
* doc/invoke.texi (RS/6000 and PowerPC Options): Document -mspe
option.
* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Set
rs6000_spe.
* config/rs6000/eabispe.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Set
rs6000_spe.
* config/rs6000/eabi.h (TARGET_E500): Define.
* config/rs6000/eabi.h (TARGET_E500): Define.
* config/rs6000/rs6000.h (TARGET_E500): Define.
(TARGET_OPTIONS): Add spe= option.
Declare rs6000_spe and rs6000_spe_string extern.
* config/rs6000/rs6000.h (TARGET_E500): Define.
(TARGET_OPTIONS): Add spe= option.
Declare rs6000_spe and rs6000_spe_string extern.
* config/rs6000/rs6000.c (branch_positive_comparison_operator):
Change TARGET_SPE to TARGET_E500.
(ccr_bit): Change TARGET_SPE to TARGET_E500. Check for
!TARGET_FPRS.
(print_operand): Same.
(rs6000_generate_compare): Same.
(output_cbranch): Same.
(rs6000_spe): Declare.
(rs6000_spe_string): Declare.
(rs6000_override_options): Call rs6000_parse_spe_option.
(rs6000_parse_spe_option): New.
* config/rs6000/rs6000.c (branch_positive_comparison_operator):
Change TARGET_SPE to TARGET_E500.
(ccr_bit): Change TARGET_SPE to TARGET_E500. Check for
!TARGET_FPRS.
(print_operand): Same.
(rs6000_generate_compare): Same.
(output_cbranch): Same.
(rs6000_spe): Declare.
(rs6000_spe_string): Declare.
(rs6000_override_options): Call rs6000_parse_spe_option.
(rs6000_parse_spe_option): New.
2003-04-06 Steven Bosscher <steven@gcc.gnu.org>
@ -150,15 +171,15 @@
Fri Apr 4 17:43:52 2003 Olivier Hainque <hainque@act-europe.fr>
* emit-rtl.c (get_mem_attrs): Adjust alignment tests determining
use of default attributes to agree MEM_ALIGN macro.
* emit-rtl.c (get_mem_attrs): Adjust alignment tests determining
use of default attributes to agree MEM_ALIGN macro.
Fri Apr 4 17:33:24 2003 Joel Brobecker <brobecker@gnat.com>
* dbxout.c (dbxout_type): When printing type index of range type
* dbxout.c (dbxout_type): When printing type index of range type
whose bounds are printed in octal format, print type of parent type if
it exists so enumerated type descriptions are not transformed
into unsigned types.
into unsigned types.
2003-04-04 Kazu Hirata <kazu@cs.umass.edu>
@ -307,7 +328,7 @@ Thu Apr 3 17:08:09 2003 J"orn Rennecke <joern.rennecke@superh.com>
2003-04-03 Nick Clifton <nickc@redhat.com>
* config/sparc/sol2-bi.h (ASM_CPU64_DEFAULT_SPEC): Add -TSO.
(DEF_ARCH64_SPEC): Likewise.
(DEF_ARCH64_SPEC): Likewise.
Thu Apr 3 09:53:40 CEST 2003 Jan Hubicka <jh@suse.cz>
@ -367,8 +388,8 @@ Thu Apr 3 00:18:49 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-04-02 Richard Henderson <rth@redhat.com>
* dwarf2out.c (output_call_frame_info): Ignore fde->nothrow as an
optimization when flag_exceptions not enabled.
* dwarf2out.c (output_call_frame_info): Ignore fde->nothrow as an
optimization when flag_exceptions not enabled.
2003-04-02 Vladimir Makarov <vmakarov@redhat.com>
@ -394,42 +415,42 @@ Thu Apr 3 00:18:49 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-04-01 Richard Henderson <rth@redhat.com>
* except.c (convert_from_eh_region_ranges_1): Smash REG_EH_REGION
notes for nothrow calls if flag_forced_unwind_exceptions.
(build_post_landing_pads): Mind flag_forced_unwind_exceptions.
(sjlj_find_directly_reachable_regions): Likewise.
(reachable_handlers): Likewise.
(can_throw_external): Likewise.
(collect_one_action_chain): Record cleanups after catch-all and
must-not-throw if flag_forced_unwind_exceptions.
* flags.h (flag_forced_unwind_exceptions): Declare.
* toplev.c (flag_forced_unwind_exceptions): New.
(lang_independent_options): Add it.
* except.c (convert_from_eh_region_ranges_1): Smash REG_EH_REGION
notes for nothrow calls if flag_forced_unwind_exceptions.
(build_post_landing_pads): Mind flag_forced_unwind_exceptions.
(sjlj_find_directly_reachable_regions): Likewise.
(reachable_handlers): Likewise.
(can_throw_external): Likewise.
(collect_one_action_chain): Record cleanups after catch-all and
must-not-throw if flag_forced_unwind_exceptions.
* flags.h (flag_forced_unwind_exceptions): Declare.
* toplev.c (flag_forced_unwind_exceptions): New.
(lang_independent_options): Add it.
* doc/invoke.text: Add it.
2003-04-01 David Mosberger <davidm@hpl.hp.com>
* config/ia64/crti.asm: Clean up trailing whitespace.
Remove trailing hashes (#) from identifiers.
* config/ia64/crti.asm: Clean up trailing whitespace.
Remove trailing hashes (#) from identifiers.
* config/ia64/crtn.asm: Ditto.
* config/ia64/crtn.asm: Ditto.
* config/ia64/crtend.asm: Remove trailing hashes (#) from
identifiers.
(__do_global_ctors_aux): Align to 32-byte boundary. Add unwind
directives. Drop explicit bundling---it just makes the code
harder to read. Don't save/restore gp needlessly.
* config/ia64/crtend.asm: Remove trailing hashes (#) from
identifiers.
(__do_global_ctors_aux): Align to 32-byte boundary. Add unwind
directives. Drop explicit bundling---it just makes the code
harder to read. Don't save/restore gp needlessly.
* config/ia64/crtbegin.asm: Remove trailing hashes (#) from
identifiers (they're only needed if the identifier would clash
with a register name otherwise).
(__do_global_dtors_aux): Align to 32-byte boundary. Add unwind
directives. Drop explicit bundling---it just makes the code
harder to read.
(__do_jv_register_classes): Ditto.
(.fini_array): Remove "progbits" (newer
assemblers don't like wrong section-types).
(.init_array): Ditto.
* config/ia64/crtbegin.asm: Remove trailing hashes (#) from
identifiers (they're only needed if the identifier would clash
with a register name otherwise).
(__do_global_dtors_aux): Align to 32-byte boundary. Add unwind
directives. Drop explicit bundling---it just makes the code
harder to read.
(__do_jv_register_classes): Ditto.
(.fini_array): Remove "progbits" (newer
assemblers don't like wrong section-types).
(.init_array): Ditto.
2003-04-01 Roger Sayle <roger@eyesopen.com>
@ -546,56 +567,56 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-02-31 Aldy Hernandez <aldyh@redhat.com>
* testsuite/gcc.c-torture/execute/simd-3.c: New.
* testsuite/gcc.c-torture/execute/simd-3.c: New.
* expr.c (expand_expr): Handle VECTOR_CST.
(const_vector_from_tree): New.
* expr.c (expand_expr): Handle VECTOR_CST.
(const_vector_from_tree): New.
* varasm.c (output_constant): Handle VECTOR_CST.
* varasm.c (output_constant): Handle VECTOR_CST.
* c-typeck.c (digest_init): Build a vector constant from a
VECTOR_TYPE.
* c-typeck.c (digest_init): Build a vector constant from a
VECTOR_TYPE.
* config/rs6000/rs6000.c: Remove prototype for
easy_vector_constant.
(easy_vector_constant): Add mode parameter. Rewrite to handle
more easy constants.
(rs6000_emit_move): Pass mode to easy_vector_constant.
Call emit_easy_vector_insn for SPE V2SI vector constant moves.
(emit_easy_vector_insn): New.
(easy_vector_same): New.
(EASY_VECTOR_15): New macro.
(EASY_VECTOR_15_ADD_SELF): New macro.
(bdesc_2arg): Rename to xorv2si3.
(easy_vector_constant_add_self): New.
(input_operand): Allow vector constants.
* config/rs6000/rs6000.c: Remove prototype for
easy_vector_constant.
(easy_vector_constant): Add mode parameter. Rewrite to handle
more easy constants.
(rs6000_emit_move): Pass mode to easy_vector_constant.
Call emit_easy_vector_insn for SPE V2SI vector constant moves.
(emit_easy_vector_insn): New.
(easy_vector_same): New.
(EASY_VECTOR_15): New macro.
(EASY_VECTOR_15_ADD_SELF): New macro.
(bdesc_2arg): Rename to xorv2si3.
(easy_vector_constant_add_self): New.
(input_operand): Allow vector constants.
* config/rs6000/rs6000.h (PREDICATE_CODES): Add
easy_vector_constant, easy_vector_constant_add_self.
(EXTRA_CONSTRAINT): Add 'W'.
* config/rs6000/rs6000.h (PREDICATE_CODES): Add
easy_vector_constant, easy_vector_constant_add_self.
(EXTRA_CONSTRAINT): Add 'W'.
* config/rs6000/rs6000-protos.h: Add prototype for
easy_vector_constant, emit_easy_vector_insn.
* config/rs6000/rs6000-protos.h: Add prototype for
easy_vector_constant, emit_easy_vector_insn.
* config/rs6000/altivec.md (xorv8hi3): New.
(xorv16qi3): New.
Remove all _const0 patterns.
(movv4si_internal): Rewrite to use code. Add vector constant to
vector alternative. Add splitter.
(movv8hi_internal): Same.
(movv16qi_internal): Same.
(movv4sf_internal): Same.
Change the unspecs for vspltis* to use constants.
* config/rs6000/altivec.md (xorv8hi3): New.
(xorv16qi3): New.
Remove all _const0 patterns.
(movv4si_internal): Rewrite to use code. Add vector constant to
vector alternative. Add splitter.
(movv8hi_internal): Same.
(movv16qi_internal): Same.
(movv4sf_internal): Same.
Change the unspecs for vspltis* to use constants.
* config/rs6000/spe.md ("xorv4hi3"): New.
("spe_evxor"): Rename to xorv2si3.
("xorv1di3"): New.
Remove all _const0 patterns.
(movv2si_internal): Rewrite to use code. Add vector constant to
alternatives. Add splitter.
(movv4hi_internal): Add vector constant to alternatives.
(movv1di_internal): Same.
(movv2sf_internal): Same.
* config/rs6000/spe.md ("xorv4hi3"): New.
("spe_evxor"): Rename to xorv2si3.
("xorv1di3"): New.
Remove all _const0 patterns.
(movv2si_internal): Rewrite to use code. Add vector constant to
alternatives. Add splitter.
(movv4hi_internal): Add vector constant to alternatives.
(movv1di_internal): Same.
(movv2sf_internal): Same.
2003-03-31 Mark Mitchell <mark@codesourcery.com>
@ -759,8 +780,8 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-03-30 Richard Henderson <rth@redhat.com>
PR opt/10011, opt/10252:
* toplev.c (rest_of_compilation): Run purge_builtin_constant_p
before post-gcse cse pass.
* toplev.c (rest_of_compilation): Run purge_builtin_constant_p
before post-gcse cse pass.
2003-03-30 Roger Sayle <roger@eyesopen.com>
@ -786,8 +807,8 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-03-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
* Makefile.in (STRICT_WARN): Don't warn for ISO C constructs.
(STRICT2_WARN): Likewise.
* Makefile.in (STRICT_WARN): Don't warn for ISO C constructs.
(STRICT2_WARN): Likewise.
2003-03-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
@ -910,7 +931,7 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
(load_mems): Adjust replace_loop_mems call.
2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
Richard Henderson <rth@redhat.com>
Richard Henderson <rth@redhat.com>
PR target/10114 and PR target/10084
* dwarf2out.c (mem_loc_descriptor): Handle LO_SUM.
@ -961,13 +982,13 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-03-27 David Mosberger <davidm@hpl.hp.com>
* unwind-libunwind.c (uw_frame_state_for): Adjust for libunwind
v0.9 API change: replace read of UNW_REG_HANDLER with
unw_get_proc_info().
(_Unwind_GetLanguageSpecificData): Replace read of UNW_REG_LSDA
with unw_get_proc_info().
(_Unwind_GetRegionStart): Replace UNW_REG_PROC_START with
unw_get_proc_info().
* unwind-libunwind.c (uw_frame_state_for): Adjust for libunwind
v0.9 API change: replace read of UNW_REG_HANDLER with
unw_get_proc_info().
(_Unwind_GetLanguageSpecificData): Replace read of UNW_REG_LSDA
with unw_get_proc_info().
(_Unwind_GetRegionStart): Replace UNW_REG_PROC_START with
unw_get_proc_info().
2003-03-27 Vladimir Makarov <vmakarov@redhat.com>
@ -993,7 +1014,7 @@ Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
2003-03-26 Vladimir Makarov <vmakarov@redhat.com>
* config/rs6000/8540.md: New file.
* config/rs6000/8540.md: New file.
* config/rs6000/{40x.md, 603.md, 6xx.md, 7450.md, 7xx.md, mpc.md,
power4.md, rios1.md, rios2.md, rs64.md}: Add mult_compare to

View File

@ -1,3 +1,9 @@
2003-04-06 Zack Weinberg <zack@codesourcery.com>
* ada-tree.def: Make fourth element for GNAT_LOOP_ID zero.
* misc.c (gnat_tree_size): New function.
(LANG_HOOKS_TREE_SIZE): Override.
2003-04-03 Jason Merrill <jason@redhat.com>
* misc.c (gnat_adjust_rli): #if 0.
@ -90,10 +96,10 @@
2003-01-29 Laurent Guerby <guerby@acm.org>
PR ada/8344
* final.c: rename to adafinal.c to avoid file name conflicts with gcc file.
* Makefile.in: match previous change.
* Make-lang.in: match previous change.
PR ada/8344
* final.c: rename to adafinal.c to avoid file name conflicts with gcc file.
* Makefile.in: match previous change.
* Make-lang.in: match previous change.
2003-01-29 Joel Sherrill <joel@OARcorp.com>

View File

@ -77,4 +77,4 @@ DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", '1', 1)
??? This should be redone at some point. */
DEFTREECODE (GNAT_LOOP_ID, "gnat_loop_id", 'x', 1)
DEFTREECODE (GNAT_LOOP_ID, "gnat_loop_id", 'x', 0)

View File

@ -79,6 +79,7 @@ extern FILE *asm_out_file;
extern int save_argc;
extern char **save_argv;
static size_t gnat_tree_size PARAMS ((enum tree_code));
static bool gnat_init PARAMS ((void));
static void gnat_init_options PARAMS ((void));
static int gnat_decode_option PARAMS ((int, char **));
@ -98,6 +99,8 @@ static rtx gnat_expand_expr PARAMS ((tree, rtx, enum machine_mode,
#define LANG_HOOKS_NAME "GNU Ada"
#undef LANG_HOOKS_IDENTIFIER_SIZE
#define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct tree_identifier)
#undef LANG_HOOKS_TREE_SIZE
#define LANG_HOOKS_TREE_SIZE gnat_tree_size
#undef LANG_HOOKS_INIT
#define LANG_HOOKS_INIT gnat_init
#undef LANG_HOOKS_INIT_OPTIONS
@ -335,6 +338,19 @@ internal_error_function (msgid, ap)
Compiler_Abort (fp, -1);
}
/* Langhook for tree_size: determine size of our 'x' and 'c' nodes. */
static size_t
gnat_tree_size (enum tree_code code)
{
switch (code)
{
case GNAT_LOOP_ID: return sizeof (struct tree_loop_id);
default:
abort ();
}
/* NOTREACHED */
}
/* Perform all the initialization steps that are language-specific. */
static bool

View File

@ -25,9 +25,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Tree nodes relevant to both C and C++. These were originally in
cp-tree.def in the cp subdir. */
/* A node to remember a source position. */
DEFTREECODE (SRCLOC, "srcloc", 'x', 2)
DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", '1', 1)
DEFTREECODE (ARROW_EXPR, "arrow_expr", 'e', 1)
DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", '1', 1)

View File

@ -718,30 +718,6 @@ pp_c_postfix_expression (ppi, e)
pp_initializer (ppi, e);
break;
#if 0
case SRCLOC:
pp_left_paren (ppi);
pp_identifier (ppi, "__location__");
pp_right_paren (ppi);
pp_whitespace (ppi);
pp_left_brace (ppi);
pp_dot (ppi);
pp_identifier (ppi, "file");
pp_whitespace (ppi);
pp_equal (ppi);
pp_c_whitespace (ppi);
pp_c_expression (ppi, SRCLOC_FILE (e));
pp_separate_with (ppi, ',');
pp_dot (ppi);
pp_identifier (ppi, "line");
pp_whitespace (ppi);
pp_equal (ppi);
pp_c_whitespace (ppi);
pp_c_expression (ppi, SRCLOC_LINE (e));
pp_right_brace (ppi);
break;
#endif
case VA_ARG_EXPR:
pp_c_identifier (ppi, "__builtin_va_arg");
pp_c_left_paren (ppi);

View File

@ -1,3 +1,17 @@
2003-04-06 Zack Weinberg <zack@codesourcery.com>
* cp-tree.def: Make fourth element for all 'c' and 'x' nodes zero.
* cp-lang.c (cp_tree_size): New function.
(LANG_HOOKS_TREE_SIZE): Override.
* cp-tree.h (SOURCE_LOCUS, SRCLOC_FILE, SRCLOC_LINE, struct
tree_srcloc, TS_CP_COMMON, TS_CP_SRCLOC): Kill.
(union lang_tree_node): Remove common and srcloc members.
(build_srcloc_here): Don't prototype.
* decl.c (cp_tree_node_structure): Kill SRCLOC case.
* pt.c (pending_templates): Correct comment.
* tree.c (build_srcloc, build_srcloc_here): Kill.
2003-04-06 Zack Weinberg <zack@codesourcery.com>
* call.c: Include intl.h.
@ -3897,7 +3911,7 @@
2002-08-11 Gabriel Dos Reis <gdr@nerim.net>
* decl.c (duplicate_decls): Replace DECL_SOURCE_FILE +
* decl.c (duplicate_decls): Replace DECL_SOURCE_FILE
DECL_SOURCE_LINE with DECL_SOURCE_LOCATION.
* optimize.c (maybe_clone_body): Likewise.
* pt.c (tsubst_enum): Likewise.

View File

@ -34,10 +34,13 @@ static HOST_WIDE_INT cxx_get_alias_set (tree);
static bool ok_to_generate_alias_set_for_type (tree);
static bool cxx_warn_unused_global_decl (tree);
static tree cp_expr_size (tree);
static size_t cp_tree_size (enum tree_code);
static bool cp_var_mod_type_p (tree);
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU C++"
#undef LANG_HOOKS_TREE_SIZE
#define LANG_HOOKS_TREE_SIZE cp_tree_size
#undef LANG_HOOKS_INIT
#define LANG_HOOKS_INIT cxx_init
#undef LANG_HOOKS_FINISH
@ -318,6 +321,24 @@ cp_expr_size (tree exp)
return lhd_expr_size (exp);
}
/* Langhook for tree_size: determine size of our 'x' and 'c' nodes. */
static size_t
cp_tree_size (enum tree_code code)
{
switch (code)
{
case PTRMEM_CST: return sizeof (struct ptrmem_cst);
case BASELINK: return sizeof (struct tree_baselink);
case TEMPLATE_PARM_INDEX: return sizeof (template_parm_index);
case DEFAULT_ARG: return sizeof (struct tree_default_arg);
case OVERLOAD: return sizeof (struct tree_overload);
case WRAPPER: return sizeof (struct tree_wrapper);
default:
abort ();
}
/* NOTREACHED */
}
/* Returns true if T is a variably modified type, in the sense of C99.
This routine needs only check cases that cannot be handled by the
language-independent logic in tree-inline.c. */

View File

@ -47,7 +47,7 @@ DEFTREECODE (OFFSET_REF, "offset_ref", 'r', 2)
/* A pointer-to-member constant. For a pointer-to-member constant
`X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
PTRMEM_CST_MEMBER is the _DECL for `Y'. */
DEFTREECODE (PTRMEM_CST, "ptrmem_cst", 'c', 2)
DEFTREECODE (PTRMEM_CST, "ptrmem_cst", 'c', 0)
/* For NEW_EXPR, operand 0 is the placement list.
Operand 1 is the new-declarator.
@ -105,7 +105,7 @@ DEFTREECODE (ALIAS_DECL, "alias_decl", 'd', 0)
the type of the expression. This type is either a FUNCTION_TYPE,
METHOD_TYPE, or `unknown_type_node' indicating that the function is
overloaded. */
DEFTREECODE (BASELINK, "baselink", 'x', 3)
DEFTREECODE (BASELINK, "baselink", 'x', 0)
/* Template definition. The following fields have the specified uses,
although there are other macros in cp-tree.h that should be used for
@ -157,16 +157,7 @@ DEFTREECODE (TEMPLATE_DECL, "template_decl", 'd', 0)
The LEVEL is the level of the parameter when we are worrying about
the types of things; the ORIG_LEVEL is the level when we are
worrying about instantiating things. */
DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", 'x',
/* The addition of (sizeof(tree) - 1) in the next expression
is to handle the case when padding pushes us past an even
multiple of sizeof(tree). */
/* We used to try to calculate this using
1+3*sizeof(HOST_WIDE_INT), but that fails if alignment
makes it bigger. */
((sizeof (template_parm_index) - sizeof (struct tree_common))
+ sizeof (tree) - 1)
/ sizeof (tree))
DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", 'x', 0)
/* Index into a template parameter list. This parameter must be a type.
The TYPE_FIELDS value will be a TEMPLATE_PARM_INDEX. */
@ -212,7 +203,7 @@ DEFTREECODE (USING_DECL, "using_decl", 'd', 0)
DEFTREECODE (USING_STMT, "using_directive", 'e', 1)
/* An un-parsed default argument. Looks like an IDENTIFIER_NODE. */
DEFTREECODE (DEFAULT_ARG, "default_arg", 'x', 2)
DEFTREECODE (DEFAULT_ARG, "default_arg", 'x', 0)
/* A template-id, like foo<int>. The first operand is the template.
The second is the TREE_LIST or TREE_VEC of explicitly specified
@ -224,11 +215,11 @@ DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2)
/* A list-like node for chaining overloading candidates. TREE_TYPE is
the original name, and the parameter is the FUNCTION_DECL. */
DEFTREECODE (OVERLOAD, "overload", 'x', 1)
DEFTREECODE (OVERLOAD, "overload", 'x', 0)
/* A generic wrapper for something not tree that we want to include in
tree structure. */
DEFTREECODE (WRAPPER, "wrapper", 'x', 1)
DEFTREECODE (WRAPPER, "wrapper", 'x', 0)
/* Used to represent deferred name lookup for dependent names while
parsing a template declaration. The first argument is an

View File

@ -353,17 +353,6 @@ struct tree_wrapper GTY(())
struct z_candidate *z_c;
};
#define SOURCE_LOCUS(NODE) \
(((struct tree_srcloc*)SRCLOC_CHECK (NODE))->locus)
#define SRCLOC_FILE(NODE) SOURCE_LOCUS (NODE).file
#define SRCLOC_LINE(NODE) SOURCE_LOCUS (NODE).line
struct tree_srcloc GTY(())
{
struct tree_common common;
location_t locus;
};
/* Macros for access to language-specific slots in an identifier. */
#define IDENTIFIER_NAMESPACE_BINDINGS(NODE) \
@ -466,7 +455,6 @@ struct tree_default_arg GTY (())
};
enum cp_tree_node_structure_enum {
TS_CP_COMMON,
TS_CP_GENERIC,
TS_CP_IDENTIFIER,
TS_CP_TPI,
@ -475,7 +463,6 @@ enum cp_tree_node_structure_enum {
TS_CP_OVERLOAD,
TS_CP_BASELINK,
TS_CP_WRAPPER,
TS_CP_SRCLOC,
TS_CP_DEFAULT_ARG,
LAST_TS_CP_ENUM
};
@ -484,7 +471,6 @@ enum cp_tree_node_structure_enum {
union lang_tree_node GTY((desc ("cp_tree_node_structure (&%h)"),
chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)")))
{
struct tree_common GTY ((tag ("TS_CP_COMMON"))) common;
union tree_node GTY ((tag ("TS_CP_GENERIC"),
desc ("tree_node_structure (&%h)"))) generic;
struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi;
@ -492,7 +478,6 @@ union lang_tree_node GTY((desc ("cp_tree_node_structure (&%h)"),
struct tree_overload GTY ((tag ("TS_CP_OVERLOAD"))) overload;
struct tree_baselink GTY ((tag ("TS_CP_BASELINK"))) baselink;
struct tree_wrapper GTY ((tag ("TS_CP_WRAPPER"))) wrapper;
struct tree_srcloc GTY ((tag ("TS_CP_SRCLOC"))) srcloc;
struct tree_default_arg GTY ((tag ("TS_CP_DEFAULT_ARG"))) default_arg;
struct lang_identifier GTY ((tag ("TS_CP_IDENTIFIER"))) identifier;
};
@ -4212,7 +4197,6 @@ extern tree decl_namespace_context (tree);
extern tree lvalue_type (tree);
extern tree error_type (tree);
extern tree build_zc_wrapper (struct z_candidate *);
extern tree build_srcloc_here (void);
extern int varargs_function_p (tree);
extern int really_overloaded_fn (tree);
extern int cp_tree_equal (tree, tree);

View File

@ -14405,7 +14405,6 @@ cp_tree_node_structure (union lang_tree_node * t)
case PTRMEM_CST: return TS_CP_PTRMEM;
case BASELINK: return TS_CP_BASELINK;
case WRAPPER: return TS_CP_WRAPPER;
case SRCLOC: return TS_CP_SRCLOC;
default: return TS_CP_GENERIC;
}
}

View File

@ -49,11 +49,10 @@ typedef int (*tree_fn_t) PARAMS ((tree, void*));
/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
instantiations have been deferred, either because their definitions
were not yet available, or because we were putting off doing the
work. The TREE_PURPOSE of each entry is a SRCLOC indicating where
the instantiate request occurred; the TREE_VALUE is either a DECL
(for a function or static data member), or a TYPE (for a class)
indicating what we are hoping to instantiate. */
were not yet available, or because we were putting off doing the work.
The TREE_PURPOSE of each entry is either a DECL (for a function or
static data member), or a TYPE (for a class) indicating what we are
hoping to instantiate. The TREE_VALUE is not used. */
static GTY(()) tree pending_templates;
static GTY(()) tree last_pending_template;

View File

@ -43,7 +43,6 @@ static hashval_t list_hash_pieces PARAMS ((tree, tree, tree));
static hashval_t list_hash PARAMS ((const void *));
static cp_lvalue_kind lvalue_p_1 PARAMS ((tree, int, int));
static tree no_linkage_helper PARAMS ((tree *, int *, void *));
static tree build_srcloc PARAMS ((const char *, int));
static tree mark_local_for_remap_r PARAMS ((tree *, int *, void *));
static tree cp_unsave_r PARAMS ((tree *, int *, void *));
static tree build_target_expr PARAMS ((tree, tree));
@ -1824,26 +1823,6 @@ build_zc_wrapper (ptr)
return t;
}
static tree
build_srcloc (file, line)
const char *file;
int line;
{
tree t;
t = make_node (SRCLOC);
SRCLOC_FILE (t) = file;
SRCLOC_LINE (t) = line;
return t;
}
tree
build_srcloc_here ()
{
return build_srcloc (input_filename, lineno);
}
/* The type of ARG when used as an lvalue. */
tree

View File

@ -65,6 +65,7 @@ extern bool lhd_warn_unused_global_decl PARAMS ((tree));
extern void lhd_incomplete_type_error PARAMS ((tree, tree));
extern tree lhd_type_promotes_to PARAMS ((tree));
extern tree lhd_expr_size PARAMS ((tree));
extern size_t lhd_tree_size PARAMS ((enum tree_code));
/* Declarations of default tree inlining hooks. */
tree lhd_tree_inlining_walk_subtrees PARAMS ((tree *, int *,
@ -116,6 +117,7 @@ void write_global_declarations PARAMS ((void));
#define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
#define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
#define LANG_HOOKS_EXPR_SIZE lhd_expr_size
#define LANG_HOOKS_TREE_SIZE lhd_tree_size
#define LANG_HOOKS_FUNCTION_INIT lhd_do_nothing_f
#define LANG_HOOKS_FUNCTION_FINAL lhd_do_nothing_f
@ -238,6 +240,7 @@ int lhd_tree_dump_type_quals PARAMS ((tree));
#define LANG_HOOKS_INITIALIZER { \
LANG_HOOKS_NAME, \
LANG_HOOKS_IDENTIFIER_SIZE, \
LANG_HOOKS_TREE_SIZE, \
LANG_HOOKS_INIT_OPTIONS, \
LANG_HOOKS_DECODE_OPTION, \
LANG_HOOKS_POST_OPTIONS, \

View File

@ -458,6 +458,17 @@ lhd_expr_size (exp)
return size_in_bytes (TREE_TYPE (exp));
}
/* lang_hooks.tree_size: Determine the size of a tree with code C,
which is a language-specific tree code in category 'x'. The
default expects never to be called. */
size_t
lhd_tree_size (c)
enum tree_code c ATTRIBUTE_UNUSED;
{
abort ();
return 0;
}
/* lang_hooks.decls.final_write_globals: perform final processing on
global variables. */
void

View File

@ -193,6 +193,11 @@ struct lang_hooks
identifier nodes long enough for the language-specific slots. */
size_t identifier_size;
/* Determines the size of any language-specific 'x' or 'c' nodes.
Since it is called from make_node, the only information available
is the tree code. Expected to abort on unrecognized codes. */
size_t (*tree_size) PARAMS ((enum tree_code));
/* The first callback made to the front end, for simple
initialization needed before any calls to decode_option. */
void (*init_options) PARAMS ((void));

View File

@ -182,28 +182,32 @@ tree_size (node)
+ TREE_CODE_LENGTH (code) * sizeof (char *) - sizeof (char *));
case 'c': /* a constant */
/* We can't use TREE_CODE_LENGTH for INTEGER_CST, since the number of
words is machine-dependent due to varying length of HOST_WIDE_INT,
which might be wider than a pointer (e.g., long long). Similarly
for REAL_CST, since the number of words is machine-dependent due
to varying size and alignment of `double'. */
if (code == INTEGER_CST)
return sizeof (struct tree_int_cst);
else if (code == REAL_CST)
return sizeof (struct tree_real_cst);
else
return (sizeof (struct tree_common)
+ TREE_CODE_LENGTH (code) * sizeof (char *));
switch (code)
{
case INTEGER_CST: return sizeof (struct tree_int_cst);
case REAL_CST: return sizeof (struct tree_real_cst);
case COMPLEX_CST: return sizeof (struct tree_complex);
case VECTOR_CST: return sizeof (struct tree_vector);
case STRING_CST: return sizeof (struct tree_string);
default:
return (*lang_hooks.tree_size) (code);
}
case 'x': /* something random, like an identifier. */
{
size_t length;
length = (sizeof (struct tree_common)
+ TREE_CODE_LENGTH (code) * sizeof (char *));
if (code == TREE_VEC)
length += TREE_VEC_LENGTH (node) * sizeof (char *) - sizeof (char *);
return length;
}
switch (code)
{
case IDENTIFIER_NODE: return lang_hooks.identifier_size;
case TREE_LIST: return sizeof (struct tree_list);
case TREE_VEC: return (sizeof (struct tree_vec)
+ TREE_VEC_LENGTH(node) * sizeof(char *)
- sizeof (char *));
case ERROR_MARK:
case PLACEHOLDER_EXPR: return sizeof (struct tree_common);
default:
return (*lang_hooks.tree_size) (code);
}
default:
abort ();
@ -4817,7 +4821,7 @@ initializer_zerop (init)
{
if (AGGREGATE_TYPE_P (TREE_TYPE (init)))
{
tree aggr_init = TREE_OPERAND (init, 1);
tree aggr_init = CONSTRUCTOR_ELTS (init);
while (aggr_init)
{

View File

@ -34,9 +34,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
's' for codes for expressions with inherent side effects.
'e' for codes for other kinds of expressions. */
/* For `r', `e', `<', `1', `2', `s' and `x' nodes,
the 4th element is the number of argument slots to allocate.
This determines the size of the tree node object. */
/* For `r', `e', `<', `1', `2', and `s' nodes, which use struct
tree_exp, the 4th element is the number of argument slots to
allocate. This determines the size of the tree node object.
Other nodes use different structures, and the size is determined
by the tree_union member structure; the 4th element should be
zero. Languages that define language-specific 'x' or 'c' codes
must define the tree_size langhook to say how big they are. */
/* Any erroneous construct is parsed into a node of this type.
This type of node is accepted without complaint in all contexts
@ -49,17 +53,17 @@ DEFTREECODE (ERROR_MARK, "error_mark", 'x', 0)
Internally it looks like a STRING_CST node.
There is only one IDENTIFIER_NODE ever made for any particular name.
Use `get_identifier' to get it (or create it, the first time). */
DEFTREECODE (IDENTIFIER_NODE, "identifier_node", 'x', ((LANG_HOOKS_IDENTIFIER_SIZE - sizeof (struct tree_common) + sizeof (tree) - 1) / sizeof (tree)))
DEFTREECODE (IDENTIFIER_NODE, "identifier_node", 'x', 0)
/* Has the TREE_VALUE and TREE_PURPOSE fields. */
/* These nodes are made into lists by chaining through the
TREE_CHAIN field. The elements of the list live in the
TREE_VALUE fields, while TREE_PURPOSE fields are occasionally
used as well to get the effect of Lisp association lists. */
DEFTREECODE (TREE_LIST, "tree_list", 'x', 2)
DEFTREECODE (TREE_LIST, "tree_list", 'x', 0)
/* These nodes contain an array of tree nodes. */
DEFTREECODE (TREE_VEC, "tree_vec", 'x', 2)
DEFTREECODE (TREE_VEC, "tree_vec", 'x', 0)
/* A symbol binding block. These are arranged in a tree,
where the BLOCK_SUBBLOCKS field contains a chain of subblocks
@ -257,22 +261,20 @@ DEFTREECODE (LANG_TYPE, "lang_type", 't', 0)
Note: constants of type char in Pascal are INTEGER_CST,
and so are pointer constants such as nil in Pascal or NULL in C.
`(int *) 1' in C also results in an INTEGER_CST. */
DEFTREECODE (INTEGER_CST, "integer_cst", 'c', 2)
DEFTREECODE (INTEGER_CST, "integer_cst", 'c', 0)
/* Contents are in TREE_REAL_CST field. Also there is TREE_CST_RTL. */
DEFTREECODE (REAL_CST, "real_cst", 'c', 3)
/* Contents are in TREE_REAL_CST field. */
DEFTREECODE (REAL_CST, "real_cst", 'c', 0)
/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
whose contents are other constant nodes.
Also there is TREE_CST_RTL. */
DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 3)
whose contents are other constant nodes. */
DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 0)
/* Contents are in TREE_VECTOR_CST_ELTS field. */
DEFTREECODE (VECTOR_CST, "vector_cst", 'c', 3)
DEFTREECODE (VECTOR_CST, "vector_cst", 'c', 0)
/* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields.
Also there is TREE_CST_RTL. */
DEFTREECODE (STRING_CST, "string_cst", 'c', 3)
/* Contents are TREE_STRING_LENGTH and TREE_STRING_POINTER fields. */
DEFTREECODE (STRING_CST, "string_cst", 'c', 0)
/* Declarations. All references to names are represented as ..._DECL nodes.
The decls in one binding context are chained through the TREE_CHAIN field.