diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-26 16:23:33 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-26 16:23:33 +0000 |
commit | 0e5cde0cdaed60a49d7e1d79c6884ce0a84624e7 (patch) | |
tree | 0365ed4c2d70b546d5308383eda316cb067b2b23 /gcc/testsuite/g++.dg | |
parent | 4a121d41abbdaf9d355756f3c335f3a52f7e8809 (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.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/access7.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/array15.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash2.C | 2 |
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; |