mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			c-typeck.c (build_c_cast): Warn when qualifiers are added to function types, not when they're taken away.
* c-typeck.c (build_c_cast): Warn when qualifiers are added to function types, not when they're taken away. From-SVN: r49481
This commit is contained in:
		
							parent
							
								
									e89a607588
								
							
						
					
					
						commit
						af702de897
					
				|  | @ -1,3 +1,8 @@ | ||||||
|  | 2002-02-04  Richard Sandiford  <rsandifo@redhat.com> | ||||||
|  | 
 | ||||||
|  | 	* c-typeck.c (build_c_cast): Warn when qualifiers are added to | ||||||
|  | 	function types, not when they're taken away. | ||||||
|  | 
 | ||||||
| Mon Feb  4 09:05:58 2002  Jeffrey A Law  (law@redhat.com) | Mon Feb  4 09:05:58 2002  Jeffrey A Law  (law@redhat.com) | ||||||
| 
 | 
 | ||||||
| 	* cfgrtl.c (try_redirect_by_replacing_jump): Remove associated | 	* cfgrtl.c (try_redirect_by_replacing_jump): Remove associated | ||||||
|  |  | ||||||
|  | @ -3819,7 +3819,8 @@ build_c_cast (type, expr) | ||||||
| 	{ | 	{ | ||||||
| 	  tree in_type = type; | 	  tree in_type = type; | ||||||
| 	  tree in_otype = otype; | 	  tree in_otype = otype; | ||||||
| 	  int warn = 0; | 	  int added = 0; | ||||||
|  | 	  int discarded = 0; | ||||||
| 
 | 
 | ||||||
| 	  /* Check that the qualifiers on IN_TYPE are a superset of
 | 	  /* Check that the qualifiers on IN_TYPE are a superset of
 | ||||||
| 	     the qualifiers of IN_OTYPE.  The outermost level of | 	     the qualifiers of IN_OTYPE.  The outermost level of | ||||||
|  | @ -3829,12 +3830,24 @@ build_c_cast (type, expr) | ||||||
| 	    { | 	    { | ||||||
| 	      in_otype = TREE_TYPE (in_otype); | 	      in_otype = TREE_TYPE (in_otype); | ||||||
| 	      in_type = TREE_TYPE (in_type); | 	      in_type = TREE_TYPE (in_type); | ||||||
| 	      warn |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type)); | 
 | ||||||
|  | 	      /* GNU C allows cv-qualified function types.  'const'
 | ||||||
|  | 		 means the function is very pure, 'volatile' means it | ||||||
|  | 		 can't return.  We need to warn when such qualifiers | ||||||
|  | 		 are added, not when they're taken away.  */ | ||||||
|  | 	      if (TREE_CODE (in_otype) == FUNCTION_TYPE | ||||||
|  | 		  && TREE_CODE (in_type) == FUNCTION_TYPE) | ||||||
|  | 		added |= (TYPE_QUALS (in_type) & ~TYPE_QUALS (in_otype)); | ||||||
|  | 	      else | ||||||
|  | 		discarded |= (TYPE_QUALS (in_otype) & ~TYPE_QUALS (in_type)); | ||||||
| 	    } | 	    } | ||||||
| 	  while (TREE_CODE (in_type) == POINTER_TYPE | 	  while (TREE_CODE (in_type) == POINTER_TYPE | ||||||
| 		 && TREE_CODE (in_otype) == POINTER_TYPE); | 		 && TREE_CODE (in_otype) == POINTER_TYPE); | ||||||
| 
 | 
 | ||||||
| 	  if (warn) | 	  if (added) | ||||||
|  | 	    warning ("cast adds new qualifiers to function type"); | ||||||
|  | 
 | ||||||
|  | 	  if (discarded) | ||||||
| 	    /* There are qualifiers present in IN_OTYPE that are not
 | 	    /* There are qualifiers present in IN_OTYPE that are not
 | ||||||
| 	       present in IN_TYPE.  */ | 	       present in IN_TYPE.  */ | ||||||
| 	    warning ("cast discards qualifiers from pointer target type"); | 	    warning ("cast discards qualifiers from pointer target type"); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Richard Sandiford
						Richard Sandiford