mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			* gcc-interface/trans.c (Case_Statement_to_gnu): Revert latest change.
From-SVN: r209415
This commit is contained in:
		
							parent
							
								
									4b3f982994
								
							
						
					
					
						commit
						f51b85728a
					
				|  | @ -12,8 +12,6 @@ | ||||||
| 	(lvalue_required_p) <N_Object_Renaming_Declaration>: Always return 1. | 	(lvalue_required_p) <N_Object_Renaming_Declaration>: Always return 1. | ||||||
| 	(Identifier_to_gnu): Reference the renamed object of constant renaming | 	(Identifier_to_gnu): Reference the renamed object of constant renaming | ||||||
| 	pointers directly. | 	pointers directly. | ||||||
| 	(Case_Statement_to_gnu): Do not re-fold the bounds of integer types. |  | ||||||
| 	Assert that the case values are constant. |  | ||||||
| 	* gcc-interface/utils.c (invalidate_global_renaming_pointers): Do not | 	* gcc-interface/utils.c (invalidate_global_renaming_pointers): Do not | ||||||
| 	invalidate constant renaming pointers. | 	invalidate constant renaming pointers. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2400,11 +2400,9 @@ Case_Statement_to_gnu (Node_Id gnat_node) | ||||||
|       /* First compile all the different case choices for the current WHEN
 |       /* First compile all the different case choices for the current WHEN
 | ||||||
| 	 alternative.  */ | 	 alternative.  */ | ||||||
|       for (gnat_choice = First (Discrete_Choices (gnat_when)); |       for (gnat_choice = First (Discrete_Choices (gnat_when)); | ||||||
| 	   Present (gnat_choice); | 	   Present (gnat_choice); gnat_choice = Next (gnat_choice)) | ||||||
| 	   gnat_choice = Next (gnat_choice)) |  | ||||||
| 	{ | 	{ | ||||||
| 	  tree gnu_low = NULL_TREE, gnu_high = NULL_TREE; | 	  tree gnu_low = NULL_TREE, gnu_high = NULL_TREE; | ||||||
| 	  tree label = create_artificial_label (input_location); |  | ||||||
| 
 | 
 | ||||||
| 	  switch (Nkind (gnat_choice)) | 	  switch (Nkind (gnat_choice)) | ||||||
| 	    { | 	    { | ||||||
|  | @ -2428,8 +2426,8 @@ Case_Statement_to_gnu (Node_Id gnat_node) | ||||||
| 		{ | 		{ | ||||||
| 		  tree gnu_type = get_unpadded_type (Entity (gnat_choice)); | 		  tree gnu_type = get_unpadded_type (Entity (gnat_choice)); | ||||||
| 
 | 
 | ||||||
| 		  gnu_low = TYPE_MIN_VALUE (gnu_type); | 		  gnu_low = fold (TYPE_MIN_VALUE (gnu_type)); | ||||||
| 		  gnu_high = TYPE_MAX_VALUE (gnu_type); | 		  gnu_high = fold (TYPE_MAX_VALUE (gnu_type)); | ||||||
| 		  break; | 		  break; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -2447,14 +2445,21 @@ Case_Statement_to_gnu (Node_Id gnat_node) | ||||||
| 	      gcc_unreachable (); | 	      gcc_unreachable (); | ||||||
| 	    } | 	    } | ||||||
| 
 | 
 | ||||||
| 	  /* Everything should be folded into constants at this point.  */ | 	  /* If the case value is a subtype that raises Constraint_Error at
 | ||||||
| 	  gcc_assert (!gnu_low  || TREE_CODE (gnu_low)  == INTEGER_CST); | 	     run time because of a wrong bound, then gnu_low or gnu_high is | ||||||
| 	  gcc_assert (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST); | 	     not translated into an INTEGER_CST.  In such a case, we need | ||||||
| 
 | 	     to ensure that the when statement is not added in the tree, | ||||||
| 	  add_stmt_with_node (build_case_label (gnu_low, gnu_high, label), | 	     otherwise it will crash the gimplifier.  */ | ||||||
|  | 	  if ((!gnu_low || TREE_CODE (gnu_low) == INTEGER_CST) | ||||||
|  | 	      && (!gnu_high || TREE_CODE (gnu_high) == INTEGER_CST)) | ||||||
|  | 	    { | ||||||
|  | 	      add_stmt_with_node (build_case_label | ||||||
|  | 				  (gnu_low, gnu_high, | ||||||
|  | 				   create_artificial_label (input_location)), | ||||||
| 				  gnat_choice); | 				  gnat_choice); | ||||||
| 	      choices_added_p = true; | 	      choices_added_p = true; | ||||||
| 	    } | 	    } | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
|       /* This construct doesn't define a scope so we shouldn't push a binding
 |       /* This construct doesn't define a scope so we shouldn't push a binding
 | ||||||
| 	 level around the statement list.  Except that we have always done so | 	 level around the statement list.  Except that we have always done so | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Eric Botcazou
						Eric Botcazou