From b467ecc1d2ff350cbe28bef0d005cb3b22089694 Mon Sep 17 00:00:00 2001 From: neil Date: Wed, 27 Mar 2002 18:28:06 +0000 Subject: [PATCH] * c-common.c (c_expand_expr): Fix prototype. * c-common.h (c_expand_expr): Always declare, update. * c-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. * c-objc-common.c (c_objc_common_init): No global hook. * expr.c (expand_expr): Use langhook. * expr.h (enum expand_modifier): Conditionally declare. * langhooks-def.h (lhd_expand_expr, LANG_HOOKS_EXPAND_EXPR): New. (LANG_HOOKS_INITIALIZER): Update. * langhooks.c (lhd_expand_expr): New. * langhooks.h (struct lang_hooks): New hook. * toplev.c (lang_expand_expr_t, lang_expand_expr): Delete. (lang_independent_init): Don't default hook. ada: * misc.c (LANG_HOOKS_EXPAND_EXPR): Redefine. (gnat_init): Don't set hook. (gnat_expand_expr): Fix prototype. cp: * cp-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. * cp-tree.h (init_cplus_expand): Remove. (cxx_expand_expr): New. * expr.c (cplus_expand_expr): Rename cxx_expand_expr, fix prototype. (init_cplus_expand): Remove. * lex.c (cxx_init): Don't call init_cplus_expand. java: * expr.c (java_lang_expand_expr): Rename java_expand_expr, fix prototype. * java-tree.h (java_lang_expand_expr): Similarly. * lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. (java_init): Don't set hook. objc: * objc-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51462 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 17 +++++++++++++++++ gcc/ada/ChangeLog | 6 ++++++ gcc/ada/misc.c | 8 ++++---- gcc/c-common.c | 2 +- gcc/c-common.h | 9 +++------ gcc/c-lang.c | 2 ++ gcc/c-objc-common.c | 1 - gcc/cp/ChangeLog | 10 ++++++++++ gcc/cp/cp-lang.c | 2 ++ gcc/cp/cp-tree.h | 4 +++- gcc/cp/expr.c | 15 +++------------ gcc/cp/lex.c | 1 - gcc/expr.c | 5 +++-- gcc/java/ChangeLog | 8 ++++++++ gcc/java/expr.c | 4 ++-- gcc/java/java-tree.h | 10 ++++------ gcc/java/lang.c | 3 ++- gcc/langhooks-def.h | 3 +++ gcc/langhooks.c | 12 ++++++++++++ gcc/langhooks.h | 6 ++++++ gcc/objc/objc-lang.c | 2 ++ gcc/toplev.c | 10 ---------- 22 files changed, 93 insertions(+), 47 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 79b9d50..f6a7aef 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2002-03-27 Neil Booth + + * c-common.c (c_expand_expr): Fix prototype. + * c-common.h (c_expand_expr): Always declare, update. + * c-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + * c-objc-common.c (c_objc_common_init): No global hook. + * expr.c (expand_expr): Use langhook. + * expr.h (enum expand_modifier): Conditionally declare. + * langhooks-def.h (lhd_expand_expr, LANG_HOOKS_EXPAND_EXPR): New. + (LANG_HOOKS_INITIALIZER): Update. + * langhooks.c (lhd_expand_expr): New. + * langhooks.h (struct lang_hooks): New hook. + * toplev.c (lang_expand_expr_t, lang_expand_expr): Delete. + (lang_independent_init): Don't default hook. +objc: + * objc-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + 2002-03-27 Richard Henderson PR target/6054 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4a47514..03f7477 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,11 @@ 2002-03-27 Neil Booth + * misc.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + (gnat_init): Don't set hook. + (gnat_expand_expr): Fix prototype. + +2002-03-27 Neil Booth + * misc.c (ggc_p): Remove. 2002-03-27 Geert Bosch diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index bcd9dee..5a2c68a 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -108,6 +108,8 @@ static void gnat_mark_tree PARAMS ((tree)); #define LANG_HOOKS_HONOR_READONLY 1 #undef LANG_HOOKS_GET_ALIAS_SET #define LANG_HOOKS_GET_ALIAS_SET gnat_get_alias_set +#undef LANG_HOOKS_EXPAND_EXPR +#define LANG_HOOKS_EXPAND_EXPR gnat_expand_expr #undef LANG_HOOKS_PRINT_DECL #define LANG_HOOKS_PRINT_DECL gnat_print_decl #undef LANG_HOOKS_PRINT_TYPE @@ -163,7 +165,7 @@ extern char **gnat_argv; static void internal_error_function PARAMS ((const char *, va_list *)); static rtx gnat_expand_expr PARAMS ((tree, rtx, enum machine_mode, - enum expand_modifier)); + int)); static void gnat_adjust_rli PARAMS ((record_layout_info)); /* Declare functions we use as part of startup. */ @@ -358,8 +360,6 @@ gnat_init (filename) Define the additional tree codes here. This isn't the best place to put it, but it's where g++ does it. */ - lang_expand_expr = gnat_expand_expr; - gnat_init_decl_processing (); /* Add the input filename as the last argument. */ @@ -503,7 +503,7 @@ gnat_expand_expr (exp, target, tmode, modifier) tree exp; rtx target; enum machine_mode tmode; - enum expand_modifier modifier; + int modifier; /* Actually an enum expand_modifier. */ { tree type = TREE_TYPE (exp); tree new; diff --git a/gcc/c-common.c b/gcc/c-common.c index 0d5e1e8..f699c86 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -3588,7 +3588,7 @@ c_expand_expr (exp, target, tmode, modifier) tree exp; rtx target; enum machine_mode tmode; - enum expand_modifier modifier; + int modifier; /* Actually enum_modifier. */ { switch (TREE_CODE (exp)) { diff --git a/gcc/c-common.h b/gcc/c-common.h index 3bd5ba0..7b11f70 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -842,12 +842,9 @@ extern tree finish_label_address_expr PARAMS ((tree)); different implementations. Used in c-common.c. */ extern tree lookup_label PARAMS ((tree)); -/* enum expand_modified is in expr.h, as is the macro below. */ - -#ifdef QUEUED_VAR -extern rtx c_expand_expr PARAMS ((tree, rtx, enum machine_mode, - enum expand_modifier)); -#endif +extern rtx c_expand_expr PARAMS ((tree, rtx, + enum machine_mode, + int)); extern int c_safe_from_p PARAMS ((rtx, tree)); diff --git a/gcc/c-lang.c b/gcc/c-lang.c index 5bdd743..a41730c 100644 --- a/gcc/c-lang.c +++ b/gcc/c-lang.c @@ -52,6 +52,8 @@ static void c_post_options PARAMS ((void)); #define LANG_HOOKS_SAFE_FROM_P c_safe_from_p #undef LANG_HOOKS_MARK_TREE #define LANG_HOOKS_MARK_TREE c_mark_tree +#undef LANG_HOOKS_EXPAND_EXPR +#define LANG_HOOKS_EXPAND_EXPR c_expand_expr #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE c_common_parse_file #undef LANG_HOOKS_STATICP diff --git a/gcc/c-objc-common.c b/gcc/c-objc-common.c index 62fd849..416a310 100644 --- a/gcc/c-objc-common.c +++ b/gcc/c-objc-common.c @@ -225,7 +225,6 @@ c_objc_common_init (filename) save_lang_status = &push_c_function_context; restore_lang_status = &pop_c_function_context; mark_lang_status = &mark_c_function_context; - lang_expand_expr = c_expand_expr; lang_expand_decl_stmt = c_expand_decl_stmt; /* These were not defined in the Objective-C front end, but I'm diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e82644c..a9b75a9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2002-03-27 Neil Booth + + * cp-lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + * cp-tree.h (init_cplus_expand): Remove. + (cxx_expand_expr): New. + * expr.c (cplus_expand_expr): Rename cxx_expand_expr, + fix prototype. + (init_cplus_expand): Remove. + * lex.c (cxx_init): Don't call init_cplus_expand. + 2002-03-26 Mark Mitchell PR c++/4884. diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index f198b5e..fd6c29f 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -49,6 +49,8 @@ static bool ok_to_generate_alias_set_for_type PARAMS ((tree)); #define LANG_HOOKS_GET_ALIAS_SET cxx_get_alias_set #undef LANG_HOOKS_EXPAND_CONSTANT #define LANG_HOOKS_EXPAND_CONSTANT cplus_expand_constant +#undef LANG_HOOKS_EXPAND_EXPR +#define LANG_HOOKS_EXPAND_EXPR cxx_expand_expr #undef LANG_HOOKS_SAFE_FROM_P #define LANG_HOOKS_SAFE_FROM_P c_safe_from_p #undef LANG_HOOKS_PARSE_FILE diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 783d382..99cde0f 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3907,8 +3907,10 @@ extern void check_handlers PARAMS ((tree)); extern void choose_personality_routine PARAMS ((enum languages)); /* in expr.c */ -extern void init_cplus_expand PARAMS ((void)); extern int extract_init PARAMS ((tree, tree)); +extern rtx cxx_expand_expr PARAMS ((tree, rtx, + enum machine_mode, + int)); extern tree cplus_expand_constant PARAMS ((tree)); /* friend.c */ diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c index 34f779e..1bb3869 100644 --- a/gcc/cp/expr.c +++ b/gcc/cp/expr.c @@ -32,9 +32,6 @@ Boston, MA 02111-1307, USA. */ #include "except.h" #include "tm_p.h" -static rtx cplus_expand_expr PARAMS ((tree, rtx, enum machine_mode, - enum expand_modifier)); - /* Hook used by output_constant to expand language-specific constants. */ @@ -79,12 +76,12 @@ cplus_expand_constant (cst) /* Hook used by expand_expr to expand language-specific tree codes. */ -static rtx -cplus_expand_expr (exp, target, tmode, modifier) +rtx +cxx_expand_expr (exp, target, tmode, modifier) tree exp; rtx target; enum machine_mode tmode; - enum expand_modifier modifier; + int modifier; /* Actually an enum expand_modifier. */ { tree type = TREE_TYPE (exp); register enum machine_mode mode = TYPE_MODE (type); @@ -131,12 +128,6 @@ cplus_expand_expr (exp, target, tmode, modifier) return NULL; } -void -init_cplus_expand () -{ - lang_expand_expr = cplus_expand_expr; -} - int extract_init (decl, init) tree decl ATTRIBUTE_UNUSED, init ATTRIBUTE_UNUSED; diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index f0c6389..f67ea29 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -647,7 +647,6 @@ cxx_init (filename) init_reswords (); init_spew (); init_tree (); - init_cplus_expand (); init_cp_semantics (); lang_unsafe_for_reeval = c_unsafe_for_reeval; diff --git a/gcc/expr.c b/gcc/expr.c index bc8b6a9..e83e107 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -7240,7 +7240,8 @@ expand_expr (exp, target, tmode, modifier) { if (DECL_BUILT_IN_CLASS (TREE_OPERAND (TREE_OPERAND (exp, 0), 0)) == BUILT_IN_FRONTEND) - return (*lang_expand_expr) (exp, original_target, tmode, modifier); + return (*lang_hooks.expand_expr) + (exp, original_target, tmode, modifier); else return expand_builtin (exp, target, subtarget, tmode, ignore); } @@ -8800,7 +8801,7 @@ expand_expr (exp, target, tmode, modifier) abort (); default: - return (*lang_expand_expr) (exp, original_target, tmode, modifier); + return (*lang_hooks.expand_expr) (exp, original_target, tmode, modifier); } /* Here to do an ordinary binary operator, generating an instruction diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 8fc8e7b..58cf198 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,11 @@ +2002-03-27 Neil Booth + + * expr.c (java_lang_expand_expr): Rename java_expand_expr, + fix prototype. + * java-tree.h (java_lang_expand_expr): Similarly. + * lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + (java_init): Don't set hook. + 2002-03-27 Bryce McKinlay Fix for PR java/5850: diff --git a/gcc/java/expr.c b/gcc/java/expr.c index a1ec332..a251404 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -2480,11 +2480,11 @@ get_primitive_array_vtable (tree elt) } struct rtx_def * -java_lang_expand_expr (exp, target, tmode, modifier) +java_expand_expr (exp, target, tmode, modifier) register tree exp; rtx target; enum machine_mode tmode; - enum expand_modifier modifier; + int modifier; /* Actually an enum expand_modifier. */ { tree current; diff --git a/gcc/java/java-tree.h b/gcc/java/java-tree.h index de7b102..cf272fd 100644 --- a/gcc/java/java-tree.h +++ b/gcc/java/java-tree.h @@ -1247,12 +1247,10 @@ extern void append_gpp_mangled_name PARAMS ((const char *, int)); extern void add_predefined_file PARAMS ((tree)); extern int predefined_filename_p PARAMS ((tree)); -/* We use ARGS_SIZE_RTX to indicate that gcc/expr.h has been included - to declare `enum expand_modifier'. */ -#if defined (TREE_CODE) && defined(RTX_CODE) && defined (HAVE_MACHINE_MODES) && defined (ARGS_SIZE_RTX) -struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode, - enum expand_modifier)); -#endif /* TREE_CODE && RTX_CODE && HAVE_MACHINE_MODES && ARGS_SIZE_RTX */ +#if defined(RTX_CODE) && defined (HAVE_MACHINE_MODES) +struct rtx_def * java_expand_expr PARAMS ((tree, rtx, enum machine_mode, + int)); +#endif #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) diff --git a/gcc/java/lang.c b/gcc/java/lang.c index 99a5e20..56f1619 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -225,6 +225,8 @@ static int dependency_tracking = 0; #define LANG_HOOKS_PARSE_FILE java_parse_file #undef LANG_HOOKS_MARK_TREE #define LANG_HOOKS_MARK_TREE java_mark_tree +#undef LANG_HOOKS_EXPAND_EXPR +#define LANG_HOOKS_EXPAND_EXPR java_expand_expr #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL java_dup_lang_specific_decl #undef LANG_HOOKS_DECL_PRINTABLE_NAME @@ -511,7 +513,6 @@ java_init (filename) jcf_path_seal (version_flag); print_error_function = lang_print_error; - lang_expand_expr = java_lang_expand_expr; java_init_decl_processing (); diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 57c792b..974f862 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -49,6 +49,7 @@ extern void lhd_clear_binding_stack PARAMS ((void)); extern void lhd_print_tree_nothing PARAMS ((FILE *, tree, int)); extern const char *lhd_decl_printable_name PARAMS ((tree, int)); extern void lhd_set_yydebug PARAMS ((int)); +extern rtx lhd_expand_expr PARAMS ((tree, rtx, enum machine_mode, int)); /* Declarations of default tree inlining hooks. */ tree lhd_tree_inlining_walk_subtrees PARAMS ((tree *, int *, @@ -78,6 +79,7 @@ tree lhd_tree_inlining_convert_parm_for_inlining PARAMS ((tree, tree, tree)); #define LANG_HOOKS_POST_OPTIONS lhd_do_nothing #define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set #define LANG_HOOKS_EXPAND_CONSTANT lhd_return_tree +#define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr #define LANG_HOOKS_SAFE_FROM_P lhd_safe_from_p #define LANG_HOOKS_STATICP lhd_staticp #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t @@ -174,6 +176,7 @@ int lhd_tree_dump_type_quals PARAMS ((tree)); LANG_HOOKS_CLEAR_BINDING_STACK, \ LANG_HOOKS_GET_ALIAS_SET, \ LANG_HOOKS_EXPAND_CONSTANT, \ + LANG_HOOKS_EXPAND_EXPR, \ LANG_HOOKS_SAFE_FROM_P, \ LANG_HOOKS_STATICP, \ LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \ diff --git a/gcc/langhooks.c b/gcc/langhooks.c index 4bbcd5e..ec538b8 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -143,6 +143,18 @@ hook_get_alias_set_0 (t) return 0; } +/* This is the default expand_expr function. */ + +rtx +lhd_expand_expr (t, r, mm, em) + tree t ATTRIBUTE_UNUSED; + rtx r ATTRIBUTE_UNUSED; + enum machine_mode mm ATTRIBUTE_UNUSED; + int em ATTRIBUTE_UNUSED; +{ + abort (); +} + /* This is the default decl_printable_name function. */ const char * diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 73a7628..332ede8 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -21,6 +21,8 @@ Boston, MA 02111-1307, USA. */ #ifndef GCC_LANG_HOOKS_H #define GCC_LANG_HOOKS_H +/* This file should be #include-d after tree.h. */ + /* A print hook for print_tree (). */ typedef void (*lang_print_tree_hook) PARAMS ((FILE *, tree, int indent)); @@ -159,6 +161,10 @@ struct lang_hooks constant equivalent to its input. */ tree (*expand_constant) PARAMS ((tree)); + /* Called by expand_expr for language-specific tree codes. + Fourth argument is actually an enum expand_modifier. */ + rtx (*expand_expr) PARAMS ((tree, rtx, enum machine_mode, int)); + /* Hook called by safe_from_p for language-specific tree codes. It is up to the language front-end to install a hook if it has any such codes that safe_from_p needs to know about. Since same_from_p will diff --git a/gcc/objc/objc-lang.c b/gcc/objc/objc-lang.c index aa22ea3..702bbad 100644 --- a/gcc/objc/objc-lang.c +++ b/gcc/objc/objc-lang.c @@ -48,6 +48,8 @@ static void objc_post_options PARAMS ((void)); #define LANG_HOOKS_PARSE_FILE c_common_parse_file #undef LANG_HOOKS_MARK_TREE #define LANG_HOOKS_MARK_TREE c_mark_tree +#undef LANG_HOOKS_EXPAND_EXPR +#define LANG_HOOKS_EXPAND_EXPR c_expand_expr #undef LANG_HOOKS_STATICP #define LANG_HOOKS_STATICP c_staticp #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL diff --git a/gcc/toplev.c b/gcc/toplev.c index ed946ef..86d4d60 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -349,14 +349,6 @@ tree current_function_decl; if none. */ tree current_function_func_begin_label; -/* Pointer to function to compute rtl for a language-specific tree code. */ - -typedef rtx (*lang_expand_expr_t) - PARAMS ((union tree_node *, rtx, enum machine_mode, - enum expand_modifier modifier)); - -lang_expand_expr_t lang_expand_expr = 0; - /* Pointer to function to finish handling an incomplete decl at the end of compilation. */ @@ -4945,8 +4937,6 @@ process_options () static void lang_independent_init () { - lang_expand_expr = (lang_expand_expr_t) do_abort; - /* Initialize the garbage-collector, and string pools. */ init_ggc (); ggc_add_rtx_root (&stack_limit_rtx, 1); -- 2.7.4