OSDN Git Service

* expr.h (lang_expand_constant): Declare.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 1999 10:37:50 +0000 (10:37 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 May 1999 10:37:50 +0000 (10:37 +0000)
* toplev.c (lang_expand_constant): Define it.
* varasm.c (output_constant): Use it.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27058 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.h
gcc/toplev.c
gcc/varasm.c

index d934486..82c95ac 100644 (file)
@@ -1,3 +1,9 @@
+Thu May 20 10:38:43 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * expr.h (lang_expand_constant): Declare.
+       * toplev.c (lang_expand_constant): Define it.
+       * varasm.c (output_constant): Use it.
+
 Thu May 20 11:28:53 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * optabs.c (expand_cmplxdiv_straight, expand_cmplxdiv_wide):
index 1a6008a..2164ccd 100644 (file)
@@ -1015,6 +1015,12 @@ extern rtx (*lang_expand_expr) PROTO ((union tree_node *, rtx,
                                       enum machine_mode,
                                       enum expand_modifier modifier));
 
+/* Hook called by output_constant for language-specific tree codes.
+   It is up to the language front-end to install a hook if it has any
+   such codes that output_constant needs to know about.  Returns a
+   language-independent constant equivalent to its input.  */
+extern union tree_node * (*lang_expand_constant) PROTO((tree));
+
 extern void init_all_optabs                    PROTO ((void));
 extern void init_mov_optab                     PROTO ((void));
 extern void do_jump_by_parts_equality_rtx      PROTO((rtx, rtx, rtx));
index 1945351..92617f7 100644 (file)
@@ -375,6 +375,8 @@ typedef rtx (*lang_expand_expr_t)
 
 lang_expand_expr_t lang_expand_expr = 0;
 
+tree (*lang_expand_constant) PROTO((tree)) = 0;
+
 /* Pointer to function to finish handling an incomplete decl at the
    end of compilation.  */
 
index e4eef2d..4f92290 100644 (file)
@@ -3897,6 +3897,13 @@ output_constant (exp, size)
 {
   register enum tree_code code = TREE_CODE (TREE_TYPE (exp));
 
+  /* Some front-ends use constants other than the standard
+     language-indepdent varieties, but which may still be output
+     directly.  Give the front-end a chance to convert EXP to a
+     language-independent representation.  */
+  if (lang_expand_constant)
+    exp = (*lang_expand_constant) (exp);
+
   if (size == 0 || flag_syntax_only)
     return;