mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			Add illegal cilk checks to C++ front.
Add calls for several illegal Cilk cases to the C++ frontend. C++ usually doesn't ICE unlike C on illegal cilk, but it's better to match C in what is allowed and what is not. if (_Cilk_spawn ...) is still not errored, but at least it doesn't ICE. gcc/cp/: 2014-11-10 Andi Kleen <ak@linux.intel.com> * semantics.c (finish_goto_stmt): Call check_no_cilk. (finish_while_stmt_cond): Dito. (finish_do_stmt): Dito. (finish_for_cond): Dito. (finish_switch_cond): Dito. From-SVN: r217337
This commit is contained in:
		
							parent
							
								
									e5e4425247
								
							
						
					
					
						commit
						14f68c3965
					
				|  | @ -1,3 +1,11 @@ | ||||||
|  | 2014-11-10  Andi Kleen  <ak@linux.intel.com> | ||||||
|  | 
 | ||||||
|  | 	* semantics.c (finish_goto_stmt): Call check_no_cilk. | ||||||
|  | 	(finish_while_stmt_cond): Dito. | ||||||
|  | 	(finish_do_stmt): Dito. | ||||||
|  | 	(finish_for_cond): Dito. | ||||||
|  | 	(finish_switch_cond): Dito. | ||||||
|  | 
 | ||||||
| 2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com> | 2014-11-10  Paolo Carlini  <paolo.carlini@oracle.com> | ||||||
| 
 | 
 | ||||||
| 	* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and | 	* typeck.c (cp_build_binary_op): Use OPT_Wshift_count_negative and | ||||||
|  |  | ||||||
|  | @ -625,6 +625,10 @@ finish_goto_stmt (tree destination) | ||||||
|     TREE_USED (destination) = 1; |     TREE_USED (destination) = 1; | ||||||
|   else |   else | ||||||
|     { |     { | ||||||
|  |       if (check_no_cilk (destination, | ||||||
|  | 	 "Cilk array notation cannot be used as a computed goto expression", | ||||||
|  | 	 "%<_Cilk_spawn%> statement cannot be used as a computed goto expression")) | ||||||
|  | 	destination = error_mark_node; | ||||||
|       destination = mark_rvalue_use (destination); |       destination = mark_rvalue_use (destination); | ||||||
|       if (!processing_template_decl) |       if (!processing_template_decl) | ||||||
| 	{ | 	{ | ||||||
|  | @ -796,6 +800,10 @@ begin_while_stmt (void) | ||||||
| void | void | ||||||
| finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep) | finish_while_stmt_cond (tree cond, tree while_stmt, bool ivdep) | ||||||
| { | { | ||||||
|  |   if (check_no_cilk (cond, | ||||||
|  |       "Cilk array notation cannot be used as a condition for while statement", | ||||||
|  |       "%<_Cilk_spawn%> statement cannot be used as a condition for while statement")) | ||||||
|  |     cond = error_mark_node; | ||||||
|   cond = maybe_convert_cond (cond); |   cond = maybe_convert_cond (cond); | ||||||
|   finish_cond (&WHILE_COND (while_stmt), cond); |   finish_cond (&WHILE_COND (while_stmt), cond); | ||||||
|   begin_maybe_infinite_loop (cond); |   begin_maybe_infinite_loop (cond); | ||||||
|  | @ -851,6 +859,10 @@ finish_do_body (tree do_stmt) | ||||||
| void | void | ||||||
| finish_do_stmt (tree cond, tree do_stmt, bool ivdep) | finish_do_stmt (tree cond, tree do_stmt, bool ivdep) | ||||||
| { | { | ||||||
|  |   if (check_no_cilk (cond, | ||||||
|  |   "Cilk array notation cannot be used as a condition for a do-while statement", | ||||||
|  |   "%<_Cilk_spawn%> statement cannot be used as a condition for a do-while statement")) | ||||||
|  |     cond = error_mark_node; | ||||||
|   cond = maybe_convert_cond (cond); |   cond = maybe_convert_cond (cond); | ||||||
|   end_maybe_infinite_loop (cond); |   end_maybe_infinite_loop (cond); | ||||||
|   if (ivdep && cond != error_mark_node) |   if (ivdep && cond != error_mark_node) | ||||||
|  | @ -960,6 +972,10 @@ finish_for_init_stmt (tree for_stmt) | ||||||
| void | void | ||||||
| finish_for_cond (tree cond, tree for_stmt, bool ivdep) | finish_for_cond (tree cond, tree for_stmt, bool ivdep) | ||||||
| { | { | ||||||
|  |   if (check_no_cilk (cond, | ||||||
|  | 	 "Cilk array notation cannot be used in a condition for a for-loop", | ||||||
|  | 	 "%<_Cilk_spawn%> statement cannot be used in a condition for a for-loop")) | ||||||
|  |     cond = error_mark_node; | ||||||
|   cond = maybe_convert_cond (cond); |   cond = maybe_convert_cond (cond); | ||||||
|   finish_cond (&FOR_COND (for_stmt), cond); |   finish_cond (&FOR_COND (for_stmt), cond); | ||||||
|   begin_maybe_infinite_loop (cond); |   begin_maybe_infinite_loop (cond); | ||||||
|  | @ -1122,6 +1138,12 @@ void | ||||||
| finish_switch_cond (tree cond, tree switch_stmt) | finish_switch_cond (tree cond, tree switch_stmt) | ||||||
| { | { | ||||||
|   tree orig_type = NULL; |   tree orig_type = NULL; | ||||||
|  | 
 | ||||||
|  |   if (check_no_cilk (cond, | ||||||
|  | 	"Cilk array notation cannot be used as a condition for switch statement", | ||||||
|  | 	"%<_Cilk_spawn%> statement cannot be used as a condition for switch statement")) | ||||||
|  |     cond = error_mark_node; | ||||||
|  | 
 | ||||||
|   if (!processing_template_decl) |   if (!processing_template_decl) | ||||||
|     { |     { | ||||||
|       /* Convert the condition to an integer or enumeration type.  */ |       /* Convert the condition to an integer or enumeration type.  */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Andi Kleen
						Andi Kleen