Fix all tests that fail with -sanitize=return.
authorMartin Liska <mliska@suse.cz>
Mon, 6 Nov 2017 09:02:33 +0000 (10:02 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 6 Nov 2017 09:02:33 +0000 (09:02 +0000)
2017-11-06  Martin Liska  <mliska@suse.cz>

* c-c++-common/dfp/call-by-value.c (foo32): Return a default
value of change return type to void.
(foo64): Likewise.
(foo128): Likewise.
* g++.dg/bprob/g++-bprob-1.C: Likewise.
* g++.dg/cpp0x/lambda/lambda-template.C (f): Likewise.
* g++.dg/cpp0x/range-for6.C (foo): Likewise.
* g++.dg/cpp0x/udlit-template.C: Likewise.
* g++.dg/cpp1z/eval-order3.C (struct A): Likewise.
(operator>>): Likewise.
* g++.dg/expr/cond12.C (struct X): Likewise.
(X::operator=): Likewise.
* g++.dg/gcov/gcov-1.C: Likewise.
* g++.dg/gcov/gcov-threads-1.C (ContentionNoDeadlock_thread): Likewise.
* g++.dg/ipa/devirt-21.C: Likewise.
* g++.dg/ipa/devirt-23.C: Likewise.
* g++.dg/ipa/devirt-34.C (t): Likewise.
* g++.dg/missing-return.C: New test. Likewise.
* g++.dg/opt/20050511-1.C (bar): Likewise.
* g++.dg/opt/const3.C (A::foo1): Likewise.
(A::foo2): Likewise.
* g++.dg/opt/pr23299.C (E::c): Likewise.
* g++.dg/other/copy2.C (A::operator=): Likewise.
* g++.dg/overload/addr1.C: Likewise.
* g++.dg/pr48484.C: Likewise.
* g++.dg/tls/thread_local3.C (thread_main): Likewise.
* g++.dg/tls/thread_local3g.C (thread_main): Likewise.
* g++.dg/tls/thread_local5.C (thread_main): Likewise.
* g++.dg/tls/thread_local5g.C (thread_main): Likewise.
* g++.dg/tls/thread_local6.C (thread_main): Likewise.
* g++.dg/tls/thread_local6g.C (thread_main): Likewise.
* g++.dg/torture/pr34850.C (OctetString::operator^=): Likewise.
* g++.dg/tree-prof/pr79259.C (fn2): Likewise.
* g++.dg/tree-ssa/pr33604.C (struct Value): Likewise.
* g++.dg/tree-ssa/pr81408.C (struct p): Likewise.
(av): Likewise.
* g++.dg/warn/string1.C (test): Likewise.

From-SVN: r254438

31 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/dfp/call-by-value.c
gcc/testsuite/g++.dg/bprob/g++-bprob-1.C
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template.C
gcc/testsuite/g++.dg/cpp0x/range-for6.C
gcc/testsuite/g++.dg/cpp0x/udlit-template.C
gcc/testsuite/g++.dg/cpp1z/eval-order3.C
gcc/testsuite/g++.dg/expr/cond12.C
gcc/testsuite/g++.dg/gcov/gcov-1.C
gcc/testsuite/g++.dg/gcov/gcov-threads-1.C
gcc/testsuite/g++.dg/ipa/devirt-21.C
gcc/testsuite/g++.dg/ipa/devirt-23.C
gcc/testsuite/g++.dg/ipa/devirt-34.C
gcc/testsuite/g++.dg/missing-return.C [new file with mode: 0644]
gcc/testsuite/g++.dg/opt/20050511-1.C
gcc/testsuite/g++.dg/opt/const3.C
gcc/testsuite/g++.dg/opt/pr23299.C
gcc/testsuite/g++.dg/other/copy2.C
gcc/testsuite/g++.dg/overload/addr1.C
gcc/testsuite/g++.dg/pr48484.C
gcc/testsuite/g++.dg/tls/thread_local3.C
gcc/testsuite/g++.dg/tls/thread_local3g.C
gcc/testsuite/g++.dg/tls/thread_local5.C
gcc/testsuite/g++.dg/tls/thread_local5g.C
gcc/testsuite/g++.dg/tls/thread_local6.C
gcc/testsuite/g++.dg/tls/thread_local6g.C
gcc/testsuite/g++.dg/torture/pr34850.C
gcc/testsuite/g++.dg/tree-prof/pr79259.C
gcc/testsuite/g++.dg/tree-ssa/pr33604.C
gcc/testsuite/g++.dg/tree-ssa/pr81408.C
gcc/testsuite/g++.dg/warn/string1.C

index e739cac7572e9f173cca6e5e2bb55a770b19a8af..ad7613aa19214463af1394b9a917e3070e13f05f 100644 (file)
@@ -1,3 +1,43 @@
+2017-11-06  Martin Liska  <mliska@suse.cz>
+
+       * c-c++-common/dfp/call-by-value.c (foo32): Return a default
+       value of change return type to void.
+       (foo64): Likewise.
+       (foo128): Likewise.
+       * g++.dg/bprob/g++-bprob-1.C: Likewise.
+       * g++.dg/cpp0x/lambda/lambda-template.C (f): Likewise.
+       * g++.dg/cpp0x/range-for6.C (foo): Likewise.
+       * g++.dg/cpp0x/udlit-template.C: Likewise.
+       * g++.dg/cpp1z/eval-order3.C (struct A): Likewise.
+       (operator>>): Likewise.
+       * g++.dg/expr/cond12.C (struct X): Likewise.
+       (X::operator=): Likewise.
+       * g++.dg/gcov/gcov-1.C: Likewise.
+       * g++.dg/gcov/gcov-threads-1.C (ContentionNoDeadlock_thread): Likewise.
+       * g++.dg/ipa/devirt-21.C: Likewise.
+       * g++.dg/ipa/devirt-23.C: Likewise.
+       * g++.dg/ipa/devirt-34.C (t): Likewise.
+       * g++.dg/missing-return.C: New test. Likewise.
+       * g++.dg/opt/20050511-1.C (bar): Likewise.
+       * g++.dg/opt/const3.C (A::foo1): Likewise.
+       (A::foo2): Likewise.
+       * g++.dg/opt/pr23299.C (E::c): Likewise.
+       * g++.dg/other/copy2.C (A::operator=): Likewise.
+       * g++.dg/overload/addr1.C: Likewise.
+       * g++.dg/pr48484.C: Likewise.
+       * g++.dg/tls/thread_local3.C (thread_main): Likewise.
+       * g++.dg/tls/thread_local3g.C (thread_main): Likewise.
+       * g++.dg/tls/thread_local5.C (thread_main): Likewise.
+       * g++.dg/tls/thread_local5g.C (thread_main): Likewise.
+       * g++.dg/tls/thread_local6.C (thread_main): Likewise.
+       * g++.dg/tls/thread_local6g.C (thread_main): Likewise.
+       * g++.dg/torture/pr34850.C (OctetString::operator^=): Likewise.
+       * g++.dg/tree-prof/pr79259.C (fn2): Likewise.
+       * g++.dg/tree-ssa/pr33604.C (struct Value): Likewise.
+       * g++.dg/tree-ssa/pr81408.C (struct p): Likewise.
+       (av): Likewise.
+       * g++.dg/warn/string1.C (test): Likewise.
+
 2017-11-05  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/82471
index 74aec53aefb286bb3def54e0a6fd8abdd482854c..e7aea3076cf49c07591458d87fd47207425b33da 100644 (file)
@@ -5,17 +5,17 @@
 
 #include "dfp-dbg.h"
 
-int foo32 (_Decimal32 z)
+void foo32 (_Decimal32 z)
 {
   z = z + 1.0df;
 }
 
-int foo64 (_Decimal64 z)
+void foo64 (_Decimal64 z)
 {
   z = z + 1.0dd;
 }
 
-int foo128 (_Decimal128 z)
+void foo128 (_Decimal128 z)
 {
   z = z + 1.0dl;
 }
index b1a1de77e98ec77c6402bb7458c02a199ae6ca17..3aafc06d51d338a50cc90e77350264d449350f24 100644 (file)
@@ -35,7 +35,7 @@ test_for2 (int m, int n, int o)
   return for_temp;                     /* count(6) */
 }
 
-int
+void
 call_for ()
 {
   for_val1 += test_for1 (0);
index 66cc7a4e1dff0c9170004636524121eb000aca2c..17c6a6e5b52f1bc1c292b9c17ff8505941c4bd73 100644 (file)
@@ -9,7 +9,7 @@ auto apply (T t) -> decltype (t())
 }
 
 template <class T>
-T f(T t)
+void f(T t)
 {
   T t2 = t;
   if (t != [=]()->T { return t; }())
index 366499a34d8f0220cc4e60c2f742ff91f74222ba..b4d9dd720ee61f2e374e1978d1cd484ac8404861 100644 (file)
@@ -14,6 +14,8 @@ template<typename T> T foo()
         sum += x;
     if (sum != T(10))
         abort();
+
+    return sum;
 }
 
 int main()
index de21b66028fcfb85937cc1bc507abb760d759054..155831992977ea7be3d95a69770c0298c0a259e7 100644 (file)
@@ -23,7 +23,7 @@ template<>
   operator"" _abc<'6','6','6'>()
   { return 21; }
 
-int
+void
 test1()
 {
   int i = operator"" _abc<'1','2','3'>();
index 966ac0a65236792ffa5dec1cbcb75e658f862696..b53e96a9f8f01baf4763e71c5c1f1830ba77fbe3 100644 (file)
@@ -26,7 +26,7 @@ struct A
   int _i;
   A(int i): _i(f(i)) { }
   A& memfn(int i, int j) { f(j); return *this; }
-  int operator<<(int i) { }
+  int operator<<(int i) { return 0; }
   A& operator=(const A&) { return *this; }
   A& operator+=(int i) { return *this; }
 };
@@ -38,7 +38,7 @@ struct B
   B(int i): _i(f(i)) { }
 };
 
-int operator>>(A&, int i) { }
+int operator>>(A&, int i) { return 0; }
 
 A a(0);
 A* afn(int i)
index 9134f81668ff1aae206c710880a43ef91c9b3541..90d77dbd708603548db6e8e45d2f055735019859 100644 (file)
@@ -2,10 +2,16 @@
 // { dg-do run }
 
 struct X {
-    X& operator=(const X&){}
+    X& operator=(const X&);
     X& operator=(X&){__builtin_abort();}
 };
 
+X g;
+X& X::operator=(const X&)
+{
+  return g;
+}
+
 int main(int argv,char**) {
   X a, b;
   ((argv > 2) ? a : b) = X();
index c279b1452fcdf39d68e23a75ed274bb94a6a186a..9018b9a3a73a44644b65f62f5dd06bcae4385e77 100644 (file)
@@ -74,7 +74,7 @@ test_for2 (int m, int n, int o)
   return for_temp;                     /* count(6) */
 }
 
-int
+void
 call_for ()
 {
   for_val1 += test_for1 (0);
index cc912f9ddf4b6b50055fb382796839611ad0570d..b020dd87d4caf61417386b7d7d0d6f2863dfe7b7 100644 (file)
@@ -19,6 +19,8 @@ static void *ContentionNoDeadlock_thread(void *start)
       for (int32_t i = NR - 1; i >= starti; --i)
        pthread_mutex_unlock (&cndMs[i]);
   }
+
+  return 0;
 }
 int main(int argc, char **argv) {
   for (unsigned i = 0; i < NR; i++)
index a33be4eca041dda6ce875a418fa659ad1c6f5e28..440570c8ddbf68699fe5dd5d842e42d7372e147a 100644 (file)
@@ -12,7 +12,7 @@ class MultiTermDocs : public virtual B {
 protected:
   A readerTermDocs;
   A subReaders;
-  virtual B *m_fn1(int *) {}
+  virtual B *m_fn1(int *) { return NULL; }
   virtual inline  ~MultiTermDocs();
   void wrap(void)
   {
index 665e953cae74def7dcdcebd72542fe600a89f95f..76fc3fde42b317f09c72f41d1c30d1648b8b8828 100644 (file)
@@ -12,7 +12,7 @@ class MultiTermDocs : public virtual B {
 protected:
   A readerTermDocs;
   A subReaders;
-  virtual B *m_fn1(int *) {}
+  virtual B *m_fn1(int *) { return NULL; }
   virtual inline  ~MultiTermDocs();
   inline void wrap(void)
   {
index 030e08bba8a8723ab8694a975a66f81ac6957513..083c305665fa061610d0cad51e84b165a1ca9af1 100644 (file)
@@ -10,6 +10,8 @@ t(struct B *b)
 {
   struct A *a=b;
   a->t();
+
+  return 0;
 }
 
 /* We should guess that the pointer of type B probably points to an instance
diff --git a/gcc/testsuite/g++.dg/missing-return.C b/gcc/testsuite/g++.dg/missing-return.C
new file mode 100644 (file)
index 0000000..f7fcfeb
--- /dev/null
@@ -0,0 +1,8 @@
+/* { dg-do compile } */
+/* { dg-options "-Wreturn-type -fdump-tree-optimized" } */
+
+int foo(int a)
+{
+} /* { dg-warning "no return statement" } */
+
+/* { dg-final { scan-tree-dump "__builtin_unreachable" "optimized" } } */
index a8929030af4e1fb783e77348f8b7f0b9b72df6fb..a840fb0db8e380d3e6df1799cb86132ba5362782 100644 (file)
@@ -53,6 +53,8 @@ UINT32 bar (const C * sPtr)
 
   if (a.xy[0] != ((SINT16) 0xffff << 2))
        abort ();
+
+  return 0;
 }
 
 int main()
index c7c0a1645de77e1eb743842d656d2e482b1da364..969df91e6e10e8b7845d8402d3748ca71ffc1c47 100644 (file)
@@ -30,8 +30,8 @@ struct A
 
 int i;
 
-int A::foo1(void *ios, const char *str) { }
-int A::foo2(int v, const Type t) { i=0; }
+int A::foo1(void *ios, const char *str) { return 0; }
+int A::foo2(int v, const Type t) { i=0; return 0; }
 
 int main()
 {
index 94a414aa5f7999e70c77a5d6841eb2ffd91f5a07..b791bf954e891493f4f347e9a8d36a23735d5d0c 100644 (file)
@@ -50,6 +50,8 @@ E::c ()
   if (x > 10)
     throw 1;
   x |= 2;
+
+  return x;
 }
 
 int
index 335cab8d19fef3205de8935fbc874623fce8cc2e..df480f06ecc5d3823ae5046870f9e24cdbfcffa5 100644 (file)
@@ -10,11 +10,15 @@ class A
 {
 public:
   int i;
-  A &operator =(const A &i)
-  {
+  A &operator =(const A &i);
+};
+
+A a;
+
+A& A::operator=(const A &i)  {
     status = 0;
+    return a;
   }
-};
 
 class B
 {
index 25856a20fc62382eb65d27b15897460e2548d68b..4eb9e2f31ca6e5750e92c1815697373736ca339b 100644 (file)
@@ -11,7 +11,7 @@ static int flag = 0;
 
 template <typename> struct A
 {
-  A &active ()  { flag++;}
+  A &active () { flag++; static A a; return a; }
   
   static void foo() {}
 
index 1380c452fa405939851654e70e2e3432006cfbb0..19e9b9a8d0ac7c3920cd02e7a32c14afb5d6d6f7 100644 (file)
@@ -65,6 +65,8 @@ bool
        jump = 0;
       }
     }
+
+  return false;
 }
 
 bool
@@ -102,4 +104,5 @@ bool
        }
     }
 
+  return true;
 }
index e05a0b95306777c6b52f4cc279c2e504b49bb941..d29bda1a000fda6eff47fb029647dc3cff9cbe53 100644 (file)
@@ -21,6 +21,7 @@ void f()
 void *thread_main(void *)
 {
   f(); f(); f();
+  return 0;
 }
 
 #include <pthread.h>
index a3c9ebcc2c51939c11fef5b963cf251e10fb9949..2f9fdee1a73db24a67e92513930bad88e1f98709 100644 (file)
@@ -19,6 +19,7 @@ thread_local A a;
 void *thread_main(void *)
 {
   A* ap = &a;
+  return 0;
 }
 
 #include <pthread.h>
index c4d5ff01bf5e67225163a422147102ffb42e4298..61fea722dc26fd71c85771557aecfbaa9ab287f4 100644 (file)
@@ -30,6 +30,7 @@ void f()
 void *thread_main(void *)
 {
   f(); f(); f();
+  return 0;
 }
 
 int main()
index 5ced551fb5717e2031a8a3b4da14827250f7727f..596bbbe542fecc4f59aa968d4c88b4deaf914de7 100644 (file)
@@ -28,6 +28,7 @@ thread_local A a;
 void *thread_main(void *)
 {
   A* ap = &a;
+  return 0;
 }
 
 int main()
index 2810efaea93ceac1ef0bc1e04faf8319b08b080d..0009726626b08a2f9bdcad37216c000bcf8fcd3d 100644 (file)
@@ -22,6 +22,7 @@ void f()
 void *thread_main(void *)
 {
   f(); f(); f();
+  return 0;
 }
 
 int main()
index b8f9cdf1dea7c0654d261e0889d0511bb66e6c8f..d357ca4fa1f8bb61c8b1a7bc22e924e668f81173 100644 (file)
@@ -20,6 +20,7 @@ thread_local A a;
 void *thread_main(void *)
 {
   A* ap = &a;
+  return 0;
 }
 
 int main()
index c33dbfb5c93ecb8783f5bd802e43a3084fe17353..c2538288964d5867bedb3c6cb41d8c40b93ec91b 100644 (file)
@@ -13,6 +13,8 @@ extern "C" {
     void * memset (void *__dest, int __ch, size_t __len) throw () {
        if (__builtin_constant_p (__len) && __len == 0)
            __warn_memset_zero_len (); /* { dg-warning "declared with attribute warning" } */
+
+       return __dest;
     }
 }
 inline void clear_mem(void* ptr, u32bit n)    {
@@ -50,11 +52,13 @@ template<typename T> class SecureVector : public MemoryRegion<T>    {
 public:
     SecureVector<T>& operator=(const MemoryRegion<T>& in)          {
        if(this != &in) this->set(in);
+       return *this;
     }
 };
 class OctetString    {
 public:
     SecureVector<byte> bits_of() const {
+       return SecureVector<byte> ();
     }
     OctetString& operator^=(const OctetString&);
     void change(const MemoryRegion<byte>& in) {
@@ -69,6 +73,8 @@ OctetString& OctetString::operator^=(const OctetString& k)    {
     if(&k == this) {
        bits.clear();
     }
+
+    return *this;
 }
 bool __attribute__((flatten))
 operator==(const OctetString& s1, const OctetString& s2)    {
index a55172b62d21ef23f8d1df3141865bf8f8473ad8..6125a179bdc7c48c69dd85a2e6253ae90aca03ae 100644 (file)
@@ -11,6 +11,8 @@ fn2 ()
 {
   if (a (c == 0))
     return 0;
+
+  return 0;
 }
 
 int main()
index 1c0f550bfdf14643c76fd57349ead5f2bbe2ac6b..668db49d1466772c5e13478c57f2ba6955d5c596 100644 (file)
@@ -6,7 +6,7 @@ struct Value
   double value;
   Value(double value_) : value (value_) {}
   operator double() const { return value; }
-  Value& operator=(double other) { value = other; }
+  Value& operator=(double other) { value = other; return *this; }
 };
 
 struct Ref
index f94544b9e2d106541b553b1658f7bdea294e0525..60e6e5277d74aa5232fcd7d8852ce86093db7f82 100644 (file)
@@ -1,5 +1,9 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -std=gnu++11 -fopt-info-loop-missed -Wunsafe-loop-optimizations" } */
+struct p
+{
+  char *ay;
+};
 
 namespace a {
 void b () __attribute__ ((__noreturn__));
@@ -19,7 +23,7 @@ template <typename j, typename> class k
   j l;
 
 public:
-  typename d<j>::f operator* () {}
+  typename d<j>::f operator* () { return p(); }
   void operator++ () { ++l; }
   j
   aa ()
@@ -33,7 +37,6 @@ operator!= (k<m, ab> o, k<n, ab> p2)
 {
   return o.aa () != p2.aa ();
 }
-struct p;
 namespace a {
 struct F
 {
@@ -75,13 +78,10 @@ at
 av (au o)
 {
   o.aq ('\n');
+  return at();
 }
 u ax;
 }
-struct p
-{
-  char *ay;
-};
 a::H t;
 void
 ShowHelpListCommands ()
index 2670f63d931be2cde6483956efc0d1613c2ce056..8f24a78f70901331381eaef058219898d8dd5b1d 100644 (file)
@@ -15,4 +15,6 @@ int test() {
   //
   std::string s = "";
   s += 'x' + "y";            // { dg-warning "bounds of constant string" }
+
+  return 0;
 }