New obstack_next_free is not an lvalue
authorAlan Modra <amodra@gmail.com>
Mon, 9 Nov 2015 04:17:53 +0000 (14:47 +1030)
committerAlan Modra <amodra@gcc.gnu.org>
Mon, 9 Nov 2015 04:17:53 +0000 (14:47 +1030)
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.

From-SVN: r229984

gcc/ChangeLog
gcc/gensupport.c
gcc/objc/ChangeLog
gcc/objc/objc-encoding.c

index dcb6d55ca6b8b89625c733926e53edade009de91..dfb83509b1a66aee8aea340df858f8e886eb5dff 100644 (file)
@@ -1,3 +1,10 @@
+2015-11-09  Alan Modra  <amodra@gmail.com>
+
+       * 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.
+
 2015-11-09  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR rtl-optimization/68182
index 0480e17fac36ae4d4233eb52ee528d27c9ebb671..484ead2f3e700a4695453fcc487ca12f6cf23b49 100644 (file)
@@ -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++;
     }
index 23721f600058bb6154d1963c58a05f20a08b6254..57b5db48bcb6e314b1cae1144afde5494dd806b6 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-09  Alan Modra  <amodra@gmail.com>
+
+       * objc-encoding.c (encode_aggregate_within): Cast obstack_next_free
+       return value.
+
 2015-10-29  Andrew MacLeod  <amacleod@redhat.com>
 
        * objc-lang.c: Reorder #include's and remove duplicates.
index 48480213534cbedce4439d65814e4dc609f78032..9c577e93bae8c699da1b0a45477861450499b460 100644 (file)
@@ -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;