summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/lookup
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/lookup')
-rw-r--r--gcc/testsuite/g++.dg/lookup/anon2.C6
-rw-r--r--gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C21
-rw-r--r--gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C23
-rw-r--r--gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C18
-rw-r--r--gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C18
-rw-r--r--gcc/testsuite/g++.dg/lookup/koenig5.C32
-rw-r--r--gcc/testsuite/g++.dg/lookup/koenig6.C18
-rw-r--r--gcc/testsuite/g++.dg/lookup/koenig7.C12
-rw-r--r--gcc/testsuite/g++.dg/lookup/using16.C2
-rw-r--r--gcc/testsuite/g++.dg/lookup/using22.C17
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];