diff options
author | Mark Mitchell <mark@codesourcery.com> | 2002-12-01 17:51:51 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2002-12-01 17:51:51 +0000 |
commit | c9f8536c5dc8c115f26aaeb87585dbce0eeb4a10 (patch) | |
tree | 58fa62032c3e44c9d8f282780afee759f3d7edba /gcc/builtins.c | |
parent | 335c9de73baef4d5c67c1b00dd52caff22d92f21 (diff) | |
download | gcc-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.c | 9 |
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; |