This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[C++ PATCH] Handle error_mark_node in cp_fold (alt; PR c++/68357)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Jason Merrill <jason at redhat dot com>, Mike Stump <mikestump at comcast dot net>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 26 Jan 2016 17:39:06 +0100
- Subject: [C++ PATCH] Handle error_mark_node in cp_fold (alt; PR c++/68357)
- Authentication-results: sourceware.org; auth=none
- References: <20160126135624 dot GV3017 at tucnak dot redhat dot com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Tue, Jan 26, 2016 at 02:56:24PM +0100, Jakub Jelinek wrote:
> Another alternative would be to make sure tree folders don't introduce
> error_mark_node (if it wasn't there already), but instead fold the call say
> to build_int_cst (returntype, 0). The known cases that would need to change
> are at least darwin_build_constant_cfstring and darwin_fold_builtin, but
> maybe others.
Here is the alternative (but it is unclear if other targets don't have
similar issues in their folders).
I have no access to Darwin, so all I've done was test it on the preprocessed
source from the PR.
2016-01-26 Jakub Jelinek <jakub@redhat.com>
PR c++/68357
* config/darwin.c (darwin_fold_builtin): For errorneous use
of the __builtin___CFStringMakeConstantString builtin return
constant 0 in the right type rather than error_mark_node.
--- gcc/config/darwin.c.jj 2016-01-04 14:55:54.000000000 +0100
+++ gcc/config/darwin.c 2016-01-26 17:28:12.489018588 +0100
@@ -3345,19 +3345,17 @@ darwin_fold_builtin (tree fndecl, int n_
if (fcode == darwin_builtin_cfstring)
{
if (!darwin_constant_cfstrings)
+ error ("built-in function %qD requires the"
+ " %<-mconstant-cfstrings%> flag", fndecl);
+ else if (n_args != 1)
+ error ("built-in function %qD takes one argument only", fndecl);
+ else
{
- error ("built-in function %qD requires the"
- " %<-mconstant-cfstrings%> flag", fndecl);
- return error_mark_node;
+ tree ret = darwin_build_constant_cfstring (*argp);
+ if (ret != error_mark_node)
+ return ret;
}
-
- if (n_args != 1)
- {
- error ("built-in function %qD takes one argument only", fndecl);
- return error_mark_node;
- }
-
- return darwin_build_constant_cfstring (*argp);
+ return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), 0);
}
return NULL_TREE;
Jakub