diff mbox

[1/7] New obstack_next_free is not an lvalue

Message ID 20151107080729.GB17177@bubble.grove.modra.org
State New
Headers show

Commit Message

Alan Modra Nov. 7, 2015, 8:07 a.m. UTC
New obstack.h casts obstack_next_free to (void *), resulting in it
being a non-lvalue, and warnings on pointer arithmetic.

gcc/
	* gensupport.c (add_mnemonic_string): Make len param a size_t.
	(gen_mnemonic_setattr): Make "size" var a size_t.  Use
	obstack_blank_fast to shrink obstack.  Cast obstack_next_free
	return value.
gcc/objc/
	* objc-encoding.c (encode_aggregate_within): Cast obstack_next_free
	return value.

Comments

Richard Sandiford Nov. 7, 2015, 11:30 a.m. UTC | #1
Alan Modra <amodra@gmail.com> writes:
> diff --git a/gcc/gensupport.c b/gcc/gensupport.c
> index 0480e17..484ead2 100644
> --- a/gcc/gensupport.c
> +++ b/gcc/gensupport.c
> @@ -2253,7 +2253,7 @@ htab_eq_string (const void *s1, const void *s2)
>     and a permanent heap copy of STR is created.  */
>  
>  static void
> -add_mnemonic_string (htab_t mnemonic_htab, const char *str, int len)
> +add_mnemonic_string (htab_t mnemonic_htab, const char *str, size_t len)
>  {
>    char *new_str;
>    void **slot;
> @@ -2306,7 +2306,7 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn)
>    for (i = 0; *cp; )
>      {
>        const char *ep, *sp;
> -      int size = 0;
> +      size_t size = 0;
>  
>        while (ISSPACE (*cp))
>  	cp++;
> @@ -2333,8 +2333,7 @@ gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn)
>  	    {
>  	      /* Don't set a value if there are more than one
>  		 instruction in the string.  */
> -	      obstack_next_free (&string_obstack) =
> -		obstack_next_free (&string_obstack) - size;
> +	      obstack_blank_fast (&string_obstack, -size);
>  	      size = 0;
>  
>  	      cp = sp;

Maybe ssize_t instead of size_t since we're using the negative?  Or does
that still trigger a warning?

OK either way for gensupport.c, thanks.

Richard
Jeff Law Nov. 8, 2015, 11:19 p.m. UTC | #2
On 11/07/2015 01:07 AM, Alan Modra wrote:
> New obstack.h casts obstack_next_free to (void *), resulting in it
> being a non-lvalue, and warnings on pointer arithmetic.
>
> gcc/
> 	* gensupport.c (add_mnemonic_string): Make len param a size_t.
> 	(gen_mnemonic_setattr): Make "size" var a size_t.  Use
> 	obstack_blank_fast to shrink obstack.  Cast obstack_next_free
> 	return value.
> gcc/objc/
> 	* objc-encoding.c (encode_aggregate_within): Cast obstack_next_free
> 	return value.
Richard S. already approved gensupport.  I'll go ahead and approve the 
objc-encoding changes.

Please install.

Thanks,
jeff
diff mbox

Patch

diff --git a/gcc/gensupport.c b/gcc/gensupport.c
index 0480e17..484ead2 100644
--- a/gcc/gensupport.c
+++ b/gcc/gensupport.c
@@ -2253,7 +2253,7 @@  htab_eq_string (const void *s1, const void *s2)
    and a permanent heap copy of STR is created.  */
 
 static void
-add_mnemonic_string (htab_t mnemonic_htab, const char *str, int len)
+add_mnemonic_string (htab_t mnemonic_htab, const char *str, size_t len)
 {
   char *new_str;
   void **slot;
@@ -2306,7 +2306,7 @@  gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn)
   for (i = 0; *cp; )
     {
       const char *ep, *sp;
-      int size = 0;
+      size_t size = 0;
 
       while (ISSPACE (*cp))
 	cp++;
@@ -2333,8 +2333,7 @@  gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn)
 	    {
 	      /* Don't set a value if there are more than one
 		 instruction in the string.  */
-	      obstack_next_free (&string_obstack) =
-		obstack_next_free (&string_obstack) - size;
+	      obstack_blank_fast (&string_obstack, -size);
 	      size = 0;
 
 	      cp = sp;
@@ -2346,7 +2345,7 @@  gen_mnemonic_setattr (htab_t mnemonic_htab, rtx insn)
 	obstack_1grow (&string_obstack, '*');
       else
 	add_mnemonic_string (mnemonic_htab,
-			     obstack_next_free (&string_obstack) - size,
+			     (char *) obstack_next_free (&string_obstack) - size,
 			     size);
       i++;
     }
diff --git a/gcc/objc/objc-encoding.c b/gcc/objc/objc-encoding.c
index 4848021..9c577e9 100644
--- a/gcc/objc/objc-encoding.c
+++ b/gcc/objc/objc-encoding.c
@@ -495,13 +495,14 @@  encode_aggregate_within (tree type, int curtype, int format, int left,
 
   if (flag_next_runtime)
     {
-      if (ob_size > 0  &&  *(obstack_next_free (&util_obstack) - 1) == '^')
+      if (ob_size > 0
+	  && *((char *) obstack_next_free (&util_obstack) - 1) == '^')
 	pointed_to = true;
 
       if ((format == OBJC_ENCODE_INLINE_DEFS || generating_instance_variables)
 	  && (!pointed_to || ob_size - curtype == 1
 	      || (ob_size - curtype == 2
-		  && *(obstack_next_free (&util_obstack) - 2) == 'r')))
+		  && *((char *) obstack_next_free (&util_obstack) - 2) == 'r')))
 	inline_contents = true;
     }
   else
@@ -512,9 +513,10 @@  encode_aggregate_within (tree type, int curtype, int format, int left,
 	 comment above applies: in that case we should avoid encoding
 	 the names of instance variables.
       */
-      char c1 = ob_size > 1 ? *(obstack_next_free (&util_obstack) - 2) : 0;
-      char c0 = ob_size > 0 ? *(obstack_next_free (&util_obstack) - 1) : 0;
+      char c0, c1;
 
+      c1 = ob_size > 1 ? *((char *) obstack_next_free (&util_obstack) - 2) : 0;
+      c0 = ob_size > 0 ? *((char *) obstack_next_free (&util_obstack) - 1) : 0;
       if (c0 == '^' || (c1 == '^' && c0 == 'r'))
 	pointed_to = true;