PR bootstrap/78817 - stage2 bootstrap failure in vec.h:1613:5: error: argument 1...
authorMartin Sebor <msebor@redhat.com>
Fri, 16 Dec 2016 02:57:22 +0000 (02:57 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Fri, 16 Dec 2016 02:57:22 +0000 (19:57 -0700)
gcc/ChangeLog:
* vec.h (vec<T, va_heap, vl_ptr>::safe_grow_cleared): Assert
a pointer is non-null.

From-SVN: r243736

gcc/ChangeLog
gcc/vec.h

index fcb9410..3ebbc1c 100644 (file)
@@ -1,3 +1,9 @@
+2016-12-15  Martin Sebor  <msebor@redhat.com>
+
+       PR bootstrap/78817
+       * vec.h (vec<T, va_heap, vl_ptr>::safe_grow_cleared): Assert
+       a pointer is non-null.
+
 2016-12-15  Andrew Senkevich  <andrew.senkevich@intel.com>
 
        * config/i386/avx512bwintrin.h: Add new k-mask intrinsics.
index aa93411..3877f2d 100644 (file)
--- a/gcc/vec.h
+++ b/gcc/vec.h
@@ -1607,10 +1607,16 @@ inline void
 vec<T, va_heap, vl_ptr>::safe_grow_cleared (unsigned len MEM_STAT_DECL)
 {
   unsigned oldlen = length ();
-  size_t sz = sizeof (T) * (len - oldlen);
-  safe_grow (len PASS_MEM_STAT);
-  if (sz != 0)
-    memset (&(address ()[oldlen]), 0, sz);
+  gcc_checking_assert (oldlen <= len);
+
+  if (size_t sz = sizeof (T) * (len - oldlen))
+    {
+      safe_grow (len PASS_MEM_STAT);
+
+      T *p = address ();
+      gcc_assert (p != NULL);
+      memset (p + oldlen, 0, sz);
+    }
 }