From 0f4fd75d9a8c1b923d996e05c0ae4f048c1cc795 Mon Sep 17 00:00:00 2001 From: Franz Sirl Date: Fri, 8 Oct 1999 05:48:29 +0000 Subject: [PATCH] tree.c (make_lang_type_fn): New funtion pointer. * tree.c (make_lang_type_fn): New funtion pointer. (make_lang_type): Call it. * tree.h (make_lang_type): Declare. (make_lang_type_fn): Likewise. * rs6000.c (rs6000_build_va_list): Use make_lang_type. Co-Authored-By: Mark Mitchell From-SVN: r29864 --- gcc/ChangeLog | 9 +++++++++ gcc/config/rs6000/rs6000.c | 4 ++-- gcc/tree.c | 15 +++++++++++++++ gcc/tree.h | 2 ++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cec17c332df..821d3575041 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Thu Oct 7 22:53:00 1999 Franz Sirl + Mark Mitchell + + * tree.c (make_lang_type_fn): New funtion pointer. + (make_lang_type): Call it. + * tree.h (make_lang_type): Declare. + (make_lang_type_fn): Likewise. + * rs6000.c (rs6000_build_va_list): Use make_lang_type. + Thu Oct 7 00:36:17 MDT 1999 Diego Novillo * config/rs6000/rs6000.c (secondary_reload_class): For TARGET_ELF diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 2e961c43ccd..408091982c3 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1782,10 +1782,10 @@ rs6000_build_va_list () if (DEFAULT_ABI != ABI_V4 && DEFAULT_ABI != ABI_SOLARIS) return ptr_type_node; - record = make_node (RECORD_TYPE); + record = make_lang_type (RECORD_TYPE); type_decl = build_decl (TYPE_DECL, get_identifier ("__va_list_tag"), record); uchar_type_node = make_unsigned_type (CHAR_TYPE_SIZE); - + f_gpr = build_decl (FIELD_DECL, get_identifier ("gpr"), uchar_type_node); f_fpr = build_decl (FIELD_DECL, get_identifier ("fpr"), uchar_type_node); f_ovf = build_decl (FIELD_DECL, get_identifier ("overflow_arg_area"), diff --git a/gcc/tree.c b/gcc/tree.c index 8f707474d23..3538022038d 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -1103,6 +1103,21 @@ make_node (code) return t; } + +/* A front-end can reset this to an appropriate function if types need + special handling. */ + +tree (*make_lang_type_fn) PROTO((enum tree_code)) = make_node; + +/* Return a new type (with the indicated CODE), doing whatever + language-specific processing is required. */ + +tree +make_lang_type (code) + enum tree_code code; +{ + return (*make_lang_type_fn) (code); +} /* Return a new node with the same contents as NODE except that its TREE_CHAIN is zero and it has a fresh uid. Unlike make_node, this diff --git a/gcc/tree.h b/gcc/tree.h index cacdb28f203..d5a4b458a3c 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1560,6 +1560,8 @@ extern char *expralloc PROTO((int)); to zero except for a few of the common fields. */ extern tree make_node PROTO((enum tree_code)); +extern tree make_lang_type PROTO((enum tree_code)); +extern tree (*make_lang_type_fn) PROTO((enum tree_code)); /* Make a copy of a node, with all the same contents except for TREE_PERMANENT. (The copy is permanent