This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[C++ PATCH] Handle error_mark_node in cp_fold (alt; PR c++/68357)


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]