diff options
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C | 37 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr71739.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/auto-fn31.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/pr71516.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr70847.C | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr71528.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr71389.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr71624.C | 35 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr71405.C | 22 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr71448.C | 27 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr71452.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr70847.C | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ubsan/pr71393.C | 14 |
17 files changed, 249 insertions, 14 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C b/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C new file mode 100644 index 00000000000..39592b26a58 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wunused-variable-1.C @@ -0,0 +1,37 @@ +// PR c++/71442 +// { dg-do compile { target c++11 } } +// { dg-options "-Wunused-variable" } + +struct C +{ + template<typename... Ts> + int operator()(Ts &&...) + { + return sizeof...(Ts); + } +}; + +int +foo () +{ + C {} (1, 1L, 1LL, 1.0); +} + +template<int N> +void +bar () +{ + char a; // { dg-warning "unused variable" } + short b; // { dg-warning "unused variable" } + int c; // { dg-warning "unused variable" } + long d; // { dg-warning "unused variable" } + long long e; // { dg-warning "unused variable" } + float f; // { dg-warning "unused variable" } + double g; // { dg-warning "unused variable" } +} + +void +baz () +{ + bar <0> (); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/pr71739.C b/gcc/testsuite/g++.dg/cpp0x/pr71739.C new file mode 100644 index 00000000000..b31a580cd0e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr71739.C @@ -0,0 +1,5 @@ +// PR c++/71739 +// { dg-do compile { target c++11 } } + +template <int N> struct alignas(N) A; +template <int N> struct alignas(N) A {}; diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C new file mode 100644 index 00000000000..c99c59571e9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn31.C @@ -0,0 +1,7 @@ +// PR c++/70572 +// { dg-do compile { target c++14 } } + +void foo () +{ + decltype (auto) a = foo; // { dg-error "initializer" } +} diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C index 397b9a89957..6928d6bcbd8 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx11.C @@ -77,10 +77,10 @@ # error "__cpp_attributes != 200809" #endif -#ifndef __cpp_rvalue_reference -# error "__cpp_rvalue_reference" -#elif __cpp_rvalue_reference != 200610 -# error "__cpp_rvalue_reference != 200610" +#ifndef __cpp_rvalue_references +# error "__cpp_rvalue_references" +#elif __cpp_rvalue_references != 200610 +# error "__cpp_rvalue_references != 200610" #endif #ifndef __cpp_variadic_templates diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C index fa59f90fa89..dc30a9b3cf8 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx14.C @@ -70,10 +70,10 @@ # error "__cpp_attributes != 200809" #endif -#ifndef __cpp_rvalue_reference -# error "__cpp_rvalue_reference" -#elif __cpp_rvalue_reference != 200610 -# error "__cpp_rvalue_reference != 200610" +#ifndef __cpp_rvalue_references +# error "__cpp_rvalue_references" +#elif __cpp_rvalue_references != 200610 +# error "__cpp_rvalue_references != 200610" #endif #ifndef __cpp_variadic_templates diff --git a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C index 886b3d3df10..5fbffabd139 100644 --- a/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C +++ b/gcc/testsuite/g++.dg/cpp1y/feat-cxx98-neg.C @@ -42,8 +42,8 @@ # error "__cpp_attributes" // { dg-error "error" } #endif -#ifndef __cpp_rvalue_reference -# error "__cpp_rvalue_reference" // { dg-error "error" } +#ifndef __cpp_rvalue_references +# error "__cpp_rvalue_references" // { dg-error "error" } #endif #ifndef __cpp_variadic_templates diff --git a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C index 74c6f2978df..4a036d48fd9 100644 --- a/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C +++ b/gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C @@ -58,10 +58,10 @@ # error "__cpp_attributes != 200809" #endif -#ifndef __cpp_rvalue_reference -# error "__cpp_rvalue_reference" -#elif __cpp_rvalue_reference != 200610 -# error "__cpp_rvalue_reference != 200610" +#ifndef __cpp_rvalue_references +# error "__cpp_rvalue_references" +#elif __cpp_rvalue_references != 200610 +# error "__cpp_rvalue_references != 200610" #endif #ifndef __cpp_variadic_templates diff --git a/gcc/testsuite/g++.dg/init/pr71516.C b/gcc/testsuite/g++.dg/init/pr71516.C new file mode 100644 index 00000000000..0b9aec41707 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/pr71516.C @@ -0,0 +1,10 @@ +// PR c++/71516 +// { dg-do compile } + +struct A; // { dg-message "forward declaration of" } +struct B +{ + static A a; +}; +A B::a = A(); // { dg-error "has initializer but incomplete type|invalid use of incomplete type" } +struct A {}; diff --git a/gcc/testsuite/g++.dg/opt/pr70847.C b/gcc/testsuite/g++.dg/opt/pr70847.C new file mode 100644 index 00000000000..2b5435317cb --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr70847.C @@ -0,0 +1,11 @@ +// PR c++/70847 +// { dg-do compile } + +struct D { virtual D& f(); }; + +void +g() +{ + D d; + d.f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f(); +} diff --git a/gcc/testsuite/g++.dg/opt/pr71528.C b/gcc/testsuite/g++.dg/opt/pr71528.C new file mode 100644 index 00000000000..bfe06220472 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr71528.C @@ -0,0 +1,23 @@ +// PR c++/71528 +// { dg-do run } +// { dg-options "-O2" } + +extern int &x; +int y; + +int & +foo () +{ + return y; +} + +int &x = foo (); + +int +main () +{ + if (&x != &y) + __builtin_abort (); +} + +extern int &x; diff --git a/gcc/testsuite/g++.dg/pr71389.C b/gcc/testsuite/g++.dg/pr71389.C new file mode 100644 index 00000000000..023abe1755c --- /dev/null +++ b/gcc/testsuite/g++.dg/pr71389.C @@ -0,0 +1,23 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-std=c++11 -O3 -march=ivybridge" } + +#include <functional> + +extern int le_s6, le_s9, le_s11; +long foo_v14[16][16]; + +void fn1() { + std::array<std::array<int, 16>, 16> v13; + for (; le_s6;) + for (int k1 = 2; k1 < 4; k1 = k1 + 1) { + for (int n1 = 0; n1 < le_s9; n1 = 8) { + *foo_v14[6] = 20923310; + for (int i2 = n1; i2 < n1 + 8; i2 = i2 + 1) + v13.at(5).at(i2 + 6 - n1) = 306146921; + } + + for (int l2 = 0; l2 < le_s11; l2 = l2 + 1) + *(l2 + v13.at(5).begin()) = 306146921; + } + v13.at(le_s6 - 4); +} diff --git a/gcc/testsuite/g++.dg/pr71624.C b/gcc/testsuite/g++.dg/pr71624.C new file mode 100644 index 00000000000..94a75cd4c41 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr71624.C @@ -0,0 +1,35 @@ +/* PR71624 */ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +/* { dg-options "-fcheck-pointer-bounds -mmpx -O2" } */ + +class c1 +{ +public: + virtual int fn1 () const; + int fn2 (const int *) const; +}; + +class c2 +{ + int fn1 (); + c1 obj; +}; + +int +c1::fn1 () const +{ + return 0; +} + +int +c1::fn2 (const int *) const +{ + return this->fn1 (); +} + +int +c2::fn1 () +{ + return obj.fn2 (0); +} + diff --git a/gcc/testsuite/g++.dg/torture/pr71405.C b/gcc/testsuite/g++.dg/torture/pr71405.C new file mode 100644 index 00000000000..52602437a08 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr71405.C @@ -0,0 +1,22 @@ +// PR tree-optimization/71405 +// { dg-do compile } + +struct C +{ + C () {} + int i; +}; + +void * +operator new (__SIZE_TYPE__ x, void *y) +{ + return y; +} + +int +main () +{ + int a; + new (&a) C; + return a; +} diff --git a/gcc/testsuite/g++.dg/torture/pr71448.C b/gcc/testsuite/g++.dg/torture/pr71448.C new file mode 100644 index 00000000000..ca00ca83b36 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr71448.C @@ -0,0 +1,27 @@ +// PR c++/71448 +// { dg-do compile } +// { dg-additional-options "-std=c++11" } + +static constexpr const char foo[] = "foo"; +static constexpr const char *bar = "bar"; + +static_assert ((foo + 3 - foo) == 3, "check"); +static_assert (foo + 2 != foo, "check"); +static_assert (foo + 2 >= foo, "check"); +static_assert (3 + foo >= foo, "check"); +static_assert (foo <= foo + 2, "check"); +static_assert (foo <= 3 + foo, "check"); +static_assert (foo + 2 > foo, "check"); +static_assert (3 + foo > foo, "check"); +static_assert (foo < 2 + foo, "check"); +static_assert (foo < foo + 3, "check"); +static_assert ((bar + 3 - bar) == 3, "check"); +static_assert (bar + 2 != bar, "check"); +static_assert (2 + bar >= bar, "check"); +static_assert (bar + 3 >= bar, "check"); +static_assert (bar <= bar + 2, "check"); +static_assert (bar <= 3 + bar, "check"); +static_assert (bar + 2 > bar, "check"); +static_assert (3 + bar > bar, "check"); +static_assert (bar < 2 + bar, "check"); +static_assert (bar < bar + 3, "check"); diff --git a/gcc/testsuite/g++.dg/torture/pr71452.C b/gcc/testsuite/g++.dg/torture/pr71452.C new file mode 100644 index 00000000000..3ebe3a176f3 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr71452.C @@ -0,0 +1,10 @@ +// { dg-do run } + +int main() +{ + bool b; + *(char *)&b = 123; + if (*(char *)&b != 123) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/ubsan/pr70847.C b/gcc/testsuite/g++.dg/ubsan/pr70847.C new file mode 100644 index 00000000000..2b5435317cb --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr70847.C @@ -0,0 +1,11 @@ +// PR c++/70847 +// { dg-do compile } + +struct D { virtual D& f(); }; + +void +g() +{ + D d; + d.f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f().f(); +} diff --git a/gcc/testsuite/g++.dg/ubsan/pr71393.C b/gcc/testsuite/g++.dg/ubsan/pr71393.C new file mode 100644 index 00000000000..6011e3a8de0 --- /dev/null +++ b/gcc/testsuite/g++.dg/ubsan/pr71393.C @@ -0,0 +1,14 @@ +// PR c++/71393 +// { dg-do compile } +// { dg-options "-fsanitize=undefined" } + +struct B { B &operator << (long); }; +struct A { A (); long a, b, c, d, e, f; }; + +A::A () +{ + B q; + q << 0 << a << 0 << b << 0 << (b / a) << 0 << c << 0 << (c / a) << 0 + << d << 0 << (d / a) << 0 << e << 0 << (e / a) << 0 << f << 0 + << (f / a) << 0; +} |