diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/lookup')
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/anon2.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/koenig5.C | 32 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/koenig6.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/koenig7.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/using16.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/using22.C | 17 |
10 files changed, 147 insertions, 20 deletions
diff --git a/gcc/testsuite/g++.dg/lookup/anon2.C b/gcc/testsuite/g++.dg/lookup/anon2.C index 3143b62fd33..d556ba0034a 100644 --- a/gcc/testsuite/g++.dg/lookup/anon2.C +++ b/gcc/testsuite/g++.dg/lookup/anon2.C @@ -1,9 +1,9 @@ // { dg-do compile } // { dg-options "" } -// Make sure we don't issue a diagnostic if a type with no linkage is used -// to declare a a variable that has linkage if that variable is defined. +// Make sure we issue a diagnostic if a type with no linkage is used +// to declare a a variable that has linkage. -struct { int i; } a; +struct { int i; } a; // { dg-warning "anonymous type" } void foo() { a.i; } diff --git a/gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C b/gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C new file mode 100644 index 00000000000..055148f3841 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C @@ -0,0 +1,21 @@ +// Contributed by Dodji Seketeli <dodji@redhat.com> +// Origin PR c++/41020 +// { dg-do compile } + +extern "C" +{ + int fork (void); +} + +class frok +{ + int this_errno; + friend int fork (void); +}; + +extern "C" int +fork (void) +{ + frok grouped; + return grouped.this_errno; +} diff --git a/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C b/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C new file mode 100644 index 00000000000..56dcefa7670 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C @@ -0,0 +1,23 @@ +// Contributed by Dodji Seketeli <dodji@redhat.com> +// Origin: PR c++/41020 +// { dg-options "" } +// { dg-do compile } +// { dg-final { scan-assembler-not "call\[\t \]+\[^\$\]*?_Z4forkv" { target i?86-*-* x86_64-*-* } } } +// { dg-final { scan-assembler "call\[\t \]+_?fork" { target i?86-*-* x86_64-*-* } } } + +extern "C" int fork (void); + +void +foo () +{ + extern int fork (void); + fork (); +} + +extern "C" +int +fork (void) +{ + return 0; +} + diff --git a/gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C b/gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C new file mode 100644 index 00000000000..c385ea701a2 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C @@ -0,0 +1,18 @@ +// Contributed by Dodji Seketeli <dodji@redhat.com> +// Origin: PR c++/41020 + +// { dg-options "" } +// { dg-do compile } +// { dg-final { scan-assembler "call\[\t \]+\[^\$\]*?_Z4forkv" { target i?86-*-* x86_64-*-* } } } + +class frok +{ + int this_errno; + friend int fork (void); +}; + +void +foo () +{ + fork (); +} diff --git a/gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C b/gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C new file mode 100644 index 00000000000..51a342d433c --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C @@ -0,0 +1,18 @@ +// Contributed by Dodji Seketeli <dodji@redhat.com> +// Origin: PR c++/41020 +// { dg-do compile } + + +class frok +{ + int this_errno; + friend int fork (void); // { dg-error "previous declaration .*?C\\+\\+. linkage" } +}; + +extern "C" int +fork (void) // { dg-error "conflicts with new declaration .*?C. linkage" }} +{ + frok grouped; + return grouped.this_errno; +} + diff --git a/gcc/testsuite/g++.dg/lookup/koenig5.C b/gcc/testsuite/g++.dg/lookup/koenig5.C index 139e3b86684..6ecc25daadb 100644 --- a/gcc/testsuite/g++.dg/lookup/koenig5.C +++ b/gcc/testsuite/g++.dg/lookup/koenig5.C @@ -8,39 +8,39 @@ namespace N { struct A {}; - void One (...); // { dg-error "conflict with" "" } - void (*Two) (...); // { dg-error "not a function" "" } - namespace Three {} // { dg-error "lookup finds|not a function" "" } + void One (...); + void (*Two) (...); + namespace Three {} } namespace M { struct B {}; - struct One {}; // { dg-error "lookup finds|not a function" "" } - void (*Two) (...); // { dg-error "conflict with" "" } - void Three (...); // { dg-error "conflict with" "" } + struct One {}; + void (*Two) (...); + void Three (...); } namespace O { struct C {}; - void Two (...); // { dg-error "conflict with" "" } + void Two (...); } void g (N::A *a, M::B *b, O::C *c) { One (a); // ok - One (b); // { dg-error "in call to" "" } - One (a, b); // { dg-error "in call to" "" } + One (a, b); // ok + One (b); // { dg-error "not declared" } - Two (a); // ok - Two (a, a); // ok - Two (b); // ok Two (c); // ok - Two (a, b); // { dg-error "in call to" "" } - Two (a, c); // { dg-error "in call to" "" } + Two (a, c); // ok + Two (a); // { dg-error "not declared" } + Two (a, a); // error masked by earlier error + Two (b); // error masked by earlier error + Two (a, b); // error masked by earlier error - Three (a); // { dg-error "in call to" "" } Three (b); // ok - Three (a, b); // { dg-error "in call to" "" } + Three (a, b); // ok + Three (a); // { dg-error "not declared" } } diff --git a/gcc/testsuite/g++.dg/lookup/koenig6.C b/gcc/testsuite/g++.dg/lookup/koenig6.C new file mode 100644 index 00000000000..9fdf771e0cf --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/koenig6.C @@ -0,0 +1,18 @@ +// PR c++/17365 +// ADL should not find B::N. + +namespace A +{ + namespace B + { + template <typename T> struct N {int n_;}; + } + template <typename T> int N( T p ) { return p->n_; } + template <typename T> void f( T p ) { N(p); } // #1 +} +int main() +{ + A::B::N<int> n; + A::f(&n); + return 0; +} diff --git a/gcc/testsuite/g++.dg/lookup/koenig7.C b/gcc/testsuite/g++.dg/lookup/koenig7.C new file mode 100644 index 00000000000..bc54ba96b6b --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/koenig7.C @@ -0,0 +1,12 @@ +// PR c++/34870 + +template <typename T> +struct Foo +{ + friend void func(const Foo &) {} +}; + +void check(const Foo<int> & x) +{ + func(x); +} diff --git a/gcc/testsuite/g++.dg/lookup/using16.C b/gcc/testsuite/g++.dg/lookup/using16.C index ff6a80ee93f..a396afb973c 100644 --- a/gcc/testsuite/g++.dg/lookup/using16.C +++ b/gcc/testsuite/g++.dg/lookup/using16.C @@ -3,7 +3,7 @@ // { dg-do compile } namespace M { - struct S {}; // { dg-error "candidates are: struct M::S" "candidate 1" } + struct S {}; // { dg-error "struct M::S" "candidate 1" } } namespace N { diff --git a/gcc/testsuite/g++.dg/lookup/using22.C b/gcc/testsuite/g++.dg/lookup/using22.C new file mode 100644 index 00000000000..2396f9ab185 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using22.C @@ -0,0 +1,17 @@ +// PR c++/39786 + +namespace A { + char (*f(char *p))[13] { return 0; } +} + +namespace B { + namespace C { + char (*f(int p))[42] { return 0; } + } + using namespace C; +} + +using namespace B; +using namespace A; + +char x[sizeof *::f(0) == 42 ? 1 : -1]; |