aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-12-01 17:51:51 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-12-01 17:51:51 +0000
commitc9f8536c5dc8c115f26aaeb87585dbce0eeb4a10 (patch)
tree58fa62032c3e44c9d8f282780afee759f3d7edba /gcc/builtins.c
parent335c9de73baef4d5c67c1b00dd52caff22d92f21 (diff)
downloadgcc-c9f8536c5dc8c115f26aaeb87585dbce0eeb4a10.zip
gcc-c9f8536c5dc8c115f26aaeb87585dbce0eeb4a10.tar.gz
gcc-c9f8536c5dc8c115f26aaeb87585dbce0eeb4a10.tar.bz2
re PR c++/8332 (strlen/template interaction causes ICE)
PR c++/8332 PR c++/8493 * decl.c (cxx_init_decl_processing): Use size_type_node, not c_size_type_node. * decl2.c (coerce_new_type): Likewise. * except.c (do_allocate_exception): Likewise. * builtin-types.def (BT_SIZE): Use size_type_node. * builtins.c (fold_builtin): Make the builtin strlen returns a size_t, not a sizetype. * c-common.c (c_sizeof_or_alignof_type): Use size_type_node, not c_size_type_node. (c_alignof_expr): Likewise. (c_common_nodes_and_builtins): Likewise. * c-common.h (CTI_C_SIZE_TYPE): Remove. (c_size_type_node): Likewise. * c-format.c (T_ST): Use size_type_node, not c_size_type_node. * tree.h (TI_SIZE_TYPE): New enumeral. (size_type_node): Likewise. PR c++/8332 PR c++/8493 * g++.dg/template/strlen1.C: New test. From-SVN: r59689
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 7eea036..aa0cfaf 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -4198,8 +4198,13 @@ fold_builtin (exp)
if (validate_arglist (arglist, POINTER_TYPE, VOID_TYPE))
{
tree len = c_strlen (TREE_VALUE (arglist));
- if (len != 0)
- return len;
+ if (len)
+ {
+ /* Convert from the internal "sizetype" type to "size_t". */
+ if (size_type_node)
+ len = convert (size_type_node, len);
+ return len;
+ }
}
break;