diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-1.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-10.C | 50 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-11.C | 56 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-12.C | 57 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-2.C | 48 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-3.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-4.C | 48 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-5.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-6.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-7.C | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-8.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr60336-9.C | 28 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr68355.C | 24 |
13 files changed, 409 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/pr60336-1.C b/gcc/testsuite/g++.dg/pr60336-1.C new file mode 100644 index 00000000000..946f8accda2 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-1.C @@ -0,0 +1,17 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +struct dummy { }; +struct true_type { struct dummy i; }; + +extern true_type y; +extern void xxx (true_type c); + +void +yyy (void) +{ + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } } diff --git a/gcc/testsuite/g++.dg/pr60336-10.C b/gcc/testsuite/g++.dg/pr60336-10.C new file mode 100644 index 00000000000..58de85b963f --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-10.C @@ -0,0 +1,50 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2" } + +#include <stdarg.h> + +struct dummy0 { }; +struct dummy1 { }; +struct dummy : dummy0, dummy1 { }; + +void +test (struct dummy a, int m, ...) +{ + va_list va_arglist; + int i; + int count = 0; + + if (m == 0) + count++; + va_start (va_arglist, m); + i = va_arg (va_arglist, int); + if (i == 1) + count++; + i = va_arg (va_arglist, int); + if (i == 2) + count++; + i = va_arg (va_arglist, int); + if (i == 3) + count++; + i = va_arg (va_arglist, int); + if (i == 4) + count++; + i = va_arg (va_arglist, int); + if (i == 5) + count++; + i = va_arg (va_arglist, int); + if (i == 6) + count++; + va_end (va_arglist); + if (count != 7) + __builtin_abort (); +} + +struct dummy a0; + +int +main () +{ + test (a0, 0, 1, 2, 3, 4, 5, 6); + return 0; +} diff --git a/gcc/testsuite/g++.dg/pr60336-11.C b/gcc/testsuite/g++.dg/pr60336-11.C new file mode 100644 index 00000000000..5b03b2683ab --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-11.C @@ -0,0 +1,56 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2" } + +#include <stdarg.h> + +struct dummy0 +{ + void bar (void); +}; +struct dummy1 +{ + void foo (void); +}; +struct dummy : dummy0, dummy1 { }; + +void +test (struct dummy a, int m, ...) +{ + va_list va_arglist; + int i; + int count = 0; + + if (m == 0) + count++; + va_start (va_arglist, m); + i = va_arg (va_arglist, int); + if (i == 1) + count++; + i = va_arg (va_arglist, int); + if (i == 2) + count++; + i = va_arg (va_arglist, int); + if (i == 3) + count++; + i = va_arg (va_arglist, int); + if (i == 4) + count++; + i = va_arg (va_arglist, int); + if (i == 5) + count++; + i = va_arg (va_arglist, int); + if (i == 6) + count++; + va_end (va_arglist); + if (count != 7) + __builtin_abort (); +} + +struct dummy a0; + +int +main () +{ + test (a0, 0, 1, 2, 3, 4, 5, 6); + return 0; +} diff --git a/gcc/testsuite/g++.dg/pr60336-12.C b/gcc/testsuite/g++.dg/pr60336-12.C new file mode 100644 index 00000000000..1cae76834fd --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-12.C @@ -0,0 +1,57 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2" } + +#include <stdarg.h> + +struct dummy0 +{ +}; +struct dummy1 +{ + unsigned : 15; +}; +struct dummy : dummy0, dummy1 +{ +}; + +void +test (struct dummy a, int m, ...) +{ + va_list va_arglist; + int i; + int count = 0; + + if (m == 0) + count++; + va_start (va_arglist, m); + i = va_arg (va_arglist, int); + if (i == 1) + count++; + i = va_arg (va_arglist, int); + if (i == 2) + count++; + i = va_arg (va_arglist, int); + if (i == 3) + count++; + i = va_arg (va_arglist, int); + if (i == 4) + count++; + i = va_arg (va_arglist, int); + if (i == 5) + count++; + i = va_arg (va_arglist, int); + if (i == 6) + count++; + va_end (va_arglist); + if (count != 7) + __builtin_abort (); +} + +struct dummy a0; + +int +main () +{ + test (a0, 0, 1, 2, 3, 4, 5, 6); + return 0; +} diff --git a/gcc/testsuite/g++.dg/pr60336-2.C b/gcc/testsuite/g++.dg/pr60336-2.C new file mode 100644 index 00000000000..f18cf1e4425 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-2.C @@ -0,0 +1,48 @@ +// { dg-do run } +// { dg-options "-O2 -Wabi=9" } + +#include <stdarg.h> + +struct dummy { }; + +void +test (struct dummy a, int m, ...) // { dg-warning "empty" } +{ + va_list va_arglist; + int i; + int count = 0; + + if (m == 0) + count++; + va_start (va_arglist, m); + i = va_arg (va_arglist, int); + if (i == 1) + count++; + i = va_arg (va_arglist, int); + if (i == 2) + count++; + i = va_arg (va_arglist, int); + if (i == 3) + count++; + i = va_arg (va_arglist, int); + if (i == 4) + count++; + i = va_arg (va_arglist, int); + if (i == 5) + count++; + i = va_arg (va_arglist, int); + if (i == 6) + count++; + va_end (va_arglist); + if (count != 7) + __builtin_abort (); +} + +struct dummy a0; + +int +main () +{ + test (a0, 0, 1, 2, 3, 4, 5, 6); // { dg-warning "empty" } + return 0; +} diff --git a/gcc/testsuite/g++.dg/pr60336-3.C b/gcc/testsuite/g++.dg/pr60336-3.C new file mode 100644 index 00000000000..334a8792016 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-3.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-O2 -Wabi=9" } + +struct dummy { struct{}__attribute__((aligned (4))) a[7]; }; + +extern void test1 (struct dummy, ...); +extern void (*test2) (struct dummy, ...); + +void +foo () +{ + struct dummy a0; + test1 (a0, 1); // { dg-warning "empty" } + test2 (a0, 1); // { dg-warning "empty" } +} diff --git a/gcc/testsuite/g++.dg/pr60336-4.C b/gcc/testsuite/g++.dg/pr60336-4.C new file mode 100644 index 00000000000..b103724310e --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-4.C @@ -0,0 +1,48 @@ +// { dg-do run } +// { dg-options "-O2" } + +#include <stdarg.h> + +struct dummy { }; + +void +test (struct dummy a, int m, ...) +{ + va_list va_arglist; + int i; + int count = 0; + + if (m == 0) + count++; + va_start (va_arglist, m); + i = va_arg (va_arglist, int); + if (i == 1) + count++; + i = va_arg (va_arglist, int); + if (i == 2) + count++; + i = va_arg (va_arglist, int); + if (i == 3) + count++; + i = va_arg (va_arglist, int); + if (i == 4) + count++; + i = va_arg (va_arglist, int); + if (i == 5) + count++; + i = va_arg (va_arglist, int); + if (i == 6) + count++; + va_end (va_arglist); + if (count != 7) + __builtin_abort (); +} + +struct dummy a0; + +int +main () +{ + test (a0, 0, 1, 2, 3, 4, 5, 6); + return 0; +} diff --git a/gcc/testsuite/g++.dg/pr60336-5.C b/gcc/testsuite/g++.dg/pr60336-5.C new file mode 100644 index 00000000000..a051f6e6105 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-5.C @@ -0,0 +1,17 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +struct dummy { }; +struct true_type { struct dummy i; struct dummy j; }; + +extern true_type y; +extern void xxx (true_type c); + +void +yyy (void) +{ + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } } diff --git a/gcc/testsuite/g++.dg/pr60336-6.C b/gcc/testsuite/g++.dg/pr60336-6.C new file mode 100644 index 00000000000..22728d364fd --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-6.C @@ -0,0 +1,17 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +struct dummy { }; +struct true_type { struct dummy i1; struct dummy i2; }; + +extern true_type y; +extern void xxx (true_type c); + +void +yyy (void) +{ + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } } diff --git a/gcc/testsuite/g++.dg/pr60336-7.C b/gcc/testsuite/g++.dg/pr60336-7.C new file mode 100644 index 00000000000..5fc8320c7de --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-7.C @@ -0,0 +1,17 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +struct dummy { }; +struct true_type { struct dummy i[120]; }; + +extern true_type y; +extern void xxx (true_type c); + +void +yyy (void) +{ + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } } diff --git a/gcc/testsuite/g++.dg/pr60336-8.C b/gcc/testsuite/g++.dg/pr60336-8.C new file mode 100644 index 00000000000..38b6d344a8a --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-8.C @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-O2 -Wabi=9" } + +struct dummy { struct{} a[7][3]; }; + +extern void test1 (struct dummy, ...); +extern void (*test2) (struct dummy, ...); + +void +foo () +{ + struct dummy a0; + test1 (a0, 1); // { dg-warning "empty" } + test2 (a0, 1); // { dg-warning "empty" } +} diff --git a/gcc/testsuite/g++.dg/pr60336-9.C b/gcc/testsuite/g++.dg/pr60336-9.C new file mode 100644 index 00000000000..3d768c06f14 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr60336-9.C @@ -0,0 +1,28 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +struct A1 {}; struct A2 {}; +struct B1 { A1 a; A2 b; }; struct B2 { A1 a; A2 b; }; +struct C1 { B1 a; B2 b; }; struct C2 { B1 a; B2 b; }; +struct D1 { C1 a; C2 b; }; struct D2 { C1 a; C2 b; }; +struct E1 { D1 a; D2 b; }; struct E2 { D1 a; D2 b; }; +struct F1 { E1 a; E2 b; }; struct F2 { E1 a; E2 b; }; +struct G1 { F1 a; F2 b; }; struct G2 { F1 a; F2 b; }; +struct H1 { G1 a; G2 b; }; struct H2 { G1 a; G2 b; }; +struct I1 { H1 a; H2 b; }; struct I2 { H1 a; H2 b; }; +struct J1 { I1 a; I2 b; }; struct J2 { I1 a; I2 b; }; +struct dummy { J1 a; J2 b; }; + +struct true_type { struct dummy i; }; + +extern true_type y; +extern void xxx (true_type c); + +void +yyy (void) +{ + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx9true_type" { target i?86-*-* x86_64-*-* } } } diff --git a/gcc/testsuite/g++.dg/pr68355.C b/gcc/testsuite/g++.dg/pr68355.C new file mode 100644 index 00000000000..5c2f0da3fd3 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr68355.C @@ -0,0 +1,24 @@ +// { dg-do compile { target i?86-*-* x86_64-*-* } } +// { dg-options "-O2 -std=c++11 -fno-pic" } +// { dg-require-effective-target fpic } + +template<typename _Tp, _Tp __v> +struct integral_constant +{ + static constexpr _Tp value = __v; + typedef _Tp value_type; + typedef integral_constant<_Tp, __v> type; + constexpr operator value_type() const { return value; } +}; + +typedef integral_constant<bool, true> true_type; +extern void xxx (true_type c); + +void +yyy (void) +{ + true_type y; + xxx (y); +} + +// { dg-final { scan-assembler "jmp\[\t \]+\[^\$\]*?_Z3xxx17integral_constantIbLb1EE" { target i?86-*-* x86_64-*-* } } } |