aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-09-29 19:02:39 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-09-29 19:02:39 -0400
commitb217d7febe66988b50d0dd41303dc332c0281acc (patch)
treee8047acb948312a724d16e4692c42d2624ba5a3b
parenta5ee6e448487ac6c76cce0da796451a8c2c54ea4 (diff)
downloadgcc-b217d7febe66988b50d0dd41303dc332c0281acc.zip
gcc-b217d7febe66988b50d0dd41303dc332c0281acc.tar.gz
gcc-b217d7febe66988b50d0dd41303dc332c0281acc.tar.bz2
(build_complex): Add new argument, TYPE.
From-SVN: r12863
-rw-r--r--gcc/tree.c11
-rw-r--r--gcc/tree.h2
2 files changed, 7 insertions, 6 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index d42458a..a5b67dd 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1444,18 +1444,19 @@ build_string (len, str)
/* Return a newly constructed COMPLEX_CST node whose value is
specified by the real and imaginary parts REAL and IMAG.
- Both REAL and IMAG should be constant nodes.
- The TREE_TYPE is not initialized. */
+ Both REAL and IMAG should be constant nodes. TYPE, if specified,
+ will be the type of the COMPLEX_CST; otherwise a new type will be made. */
tree
-build_complex (real, imag)
+build_complex (type, real, imag)
+ tree type;
tree real, imag;
{
register tree t = make_node (COMPLEX_CST);
TREE_REALPART (t) = real;
TREE_IMAGPART (t) = imag;
- TREE_TYPE (t) = build_complex_type (TREE_TYPE (real));
+ TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
TREE_CONSTANT_OVERFLOW (t)
= TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
@@ -3164,7 +3165,7 @@ build_type_variant (type, constp, volatilep)
like the one we need to have. If so, use that existing one. We must
preserve the TYPE_NAME, since there is code that depends on this. */
- for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
+ for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
&& TYPE_NAME (t) == TYPE_NAME (type))
return t;
diff --git a/gcc/tree.h b/gcc/tree.h
index ee2f72f..2d37be9 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1251,7 +1251,7 @@ extern tree build_parse_node PVPROTO((enum tree_code, ...));
extern tree build_int_2_wide PROTO((HOST_WIDE_INT, HOST_WIDE_INT));
extern tree build_real PROTO((tree, REAL_VALUE_TYPE));
extern tree build_real_from_int_cst PROTO((tree, tree));
-extern tree build_complex PROTO((tree, tree));
+extern tree build_complex PROTO((tree, tree, tree));
extern tree build_string PROTO((int, char *));
extern tree build1 PROTO((enum tree_code, tree, tree));
extern tree build_tree_list PROTO((tree, tree));