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:
parent
a9c89a57f6
commit
d78e771d46
241
gcc/ChangeLog
241
gcc/ChangeLog
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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, \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
46
gcc/tree.c
46
gcc/tree.c
|
@ -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)
|
||||
{
|
||||
|
|
34
gcc/tree.def
34
gcc/tree.def
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue