aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 16:23:33 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 16:23:33 +0000
commit0e5cde0cdaed60a49d7e1d79c6884ce0a84624e7 (patch)
tree0365ed4c2d70b546d5308383eda316cb067b2b23 /gcc/testsuite/g++.dg
parent4a121d41abbdaf9d355756f3c335f3a52f7e8809 (diff)
PR c++/28588
* class.c (resolve_address_of_overloaded_function): Add access_path parameter. Perform access checks. (instantiate_type): Adjust call to resolve_address_of_overloaded_function. Remove unnecessary code. * tree.c (is_overloaded_fn): Document. Return 2 when there are acutally multiple functions. (really_overloaded_fn): Use is_overloaded_fn. * mangle.c (write_expression): Handle BASELINKs. * cp-tree.h (really_overloaded_fn): Return bool. (baselink_for_fns): Declare. * search.c (lookup_member): Check access for single static functions here. * pt.c (convert_nontype_argument_function): Handle BASELINKs. (tsubst_copy_and_build): Generate BASELINKs for template-ids. * semantics.c (finish_call_expr): Use baselink_for_fns. (baselink_for_fns): New function. (finish_id_expression): Use it. * parser.c (cp_parser_template_argument): Don't strip BASELINKs. PR c++/28595 * pt.c (tsubst): Issue errors about attempts to create VLAs at template-instantiation time. PR c++/28588 * g++.dg/inherit/access6.C: New test. * g++.dg/inherit/access7.C: Likewise. PR c++/28595 * g++.dg/template/array15.C: New test. * g++.dg/template/crash2.C: Tweak error markers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116468 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r--gcc/testsuite/g++.dg/inherit/access6.C15
-rw-r--r--gcc/testsuite/g++.dg/inherit/access7.C15
-rw-r--r--gcc/testsuite/g++.dg/template/array15.C13
-rw-r--r--gcc/testsuite/g++.dg/template/crash2.C2
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/testsuite/g++.dg/inherit/access6.C b/gcc/testsuite/g++.dg/inherit/access6.C
new file mode 100644
index 00000000000..7645c2d5e0d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/access6.C
@@ -0,0 +1,15 @@
+// PR c++/28588
+
+class Foo {
+ static void f(); // { dg-error "private" }
+ static void f(int);
+ static void g(); // { dg-error "private" }
+};
+
+void h()
+{
+ Foo foo;
+ void (*f)();
+ f = foo.f; // { dg-error "context" }
+ f = foo.g; // { dg-error "context" }
+}
diff --git a/gcc/testsuite/g++.dg/inherit/access7.C b/gcc/testsuite/g++.dg/inherit/access7.C
new file mode 100644
index 00000000000..4e2db1479b7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/access7.C
@@ -0,0 +1,15 @@
+struct B {
+ static void f();
+};
+
+template <typename T>
+struct D : private B {
+ void g() {
+ f();
+ }
+};
+
+void h() {
+ D<int> d;
+ d.g();
+}
diff --git a/gcc/testsuite/g++.dg/template/array15.C b/gcc/testsuite/g++.dg/template/array15.C
new file mode 100644
index 00000000000..b1e047d1d00
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/array15.C
@@ -0,0 +1,13 @@
+// PR c++/28595
+
+template<int> struct A
+{
+ static const int i;
+};
+
+template<int N> struct B
+{
+ char c[A<N>::i], d; // { dg-error "constant" }
+};
+
+B<0> b;
diff --git a/gcc/testsuite/g++.dg/template/crash2.C b/gcc/testsuite/g++.dg/template/crash2.C
index a02787a46fa..47c95ab067f 100644
--- a/gcc/testsuite/g++.dg/template/crash2.C
+++ b/gcc/testsuite/g++.dg/template/crash2.C
@@ -5,7 +5,7 @@ class A
{
public:
static const EnumType size = max; // { dg-error "" }
- int table[size];
+ int table[size]; // { dg-error "constant" }
};
template <class EnumType>
const EnumType A<EnumType>::size;