diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2001-05-16 09:34:24 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2001-05-16 09:34:24 +0000 |
commit | 3f0a9b3563fa102e975854ecdd17980550c9cd22 (patch) | |
tree | 3763ba89d727eec4a2a351db78494d45942e5b90 | |
parent | f94557fb739bf07401ac6a1ab09e49879e945ecb (diff) | |
download | gcc-3f0a9b3563fa102e975854ecdd17980550c9cd22.zip gcc-3f0a9b3563fa102e975854ecdd17980550c9cd22.tar.gz gcc-3f0a9b3563fa102e975854ecdd17980550c9cd22.tar.bz2 |
init.c (member_init_ok_or_else): Take a tree rather than string for name.
cp:
* init.c (member_init_ok_or_else): Take a tree rather than
string for name.
(expand_member_init): Adjust.
testsuite:
* g++.pt/inherit2.C: Remove XFAIL.
* g++.pt/crash66.C: New test.
From-SVN: r42142
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/init.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/crash66.C | 40 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/inherit2.C | 4 |
5 files changed, 58 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c48312c..a739534 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2001-05-16 Nathan Sidwell <nathan@codesourcery.com> + + * init.c (member_init_ok_or_else): Take a tree rather than + string for name. + (expand_member_init): Adjust. + 2001-05-14 Nick Clifton <nickc@cambridge.redhat.com> * decl.c (duplicate_decls): Suppress warning about duplicate diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 589f7af..1ac6f73 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -42,7 +42,7 @@ static tree build_vec_delete_1 PARAMS ((tree, tree, tree, special_function_kind, static void perform_member_init PARAMS ((tree, tree, int)); static void sort_base_init PARAMS ((tree, tree, tree *, tree *)); static tree build_builtin_delete_call PARAMS ((tree)); -static int member_init_ok_or_else PARAMS ((tree, tree, const char *)); +static int member_init_ok_or_else PARAMS ((tree, tree, tree)); static void expand_virtual_init PARAMS ((tree, tree)); static tree sort_member_init PARAMS ((tree, tree)); static tree initializing_context PARAMS ((tree)); @@ -1043,19 +1043,19 @@ static int member_init_ok_or_else (field, type, member_name) tree field; tree type; - const char *member_name; + tree member_name; { if (field == error_mark_node) return 0; if (field == NULL_TREE || initializing_context (field) != type) { - cp_error ("class `%T' does not have any field named `%s'", type, + cp_error ("class `%T' does not have any field named `%D'", type, member_name); return 0; } if (TREE_STATIC (field)) { - cp_error ("field `%#D' is static; only point of initialization is its declaration", + cp_error ("field `%#D' is static; the only point of initialization is its definition", field); return 0; } @@ -1162,7 +1162,7 @@ expand_member_init (exp, name, init) try_member: field = lookup_field (type, name, 1, 0); - if (! member_init_ok_or_else (field, type, IDENTIFIER_POINTER (name))) + if (! member_init_ok_or_else (field, type, name)) return NULL_TREE; init = build_tree_list (field, init); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5c3469f..9793562 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2001-05-16 Nathan Sidwell <nathan@codesourcery.com> + + * g++.pt/inherit2.C: Remove XFAIL. + * g++.pt/crash66.C: New test. + 2001-05-15 Benjamin Kosnik <bkoz@redhat.com> * g++.old-deja/g++.robertl/eb27.C: Convert. diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash66.C b/gcc/testsuite/g++.old-deja/g++.pt/crash66.C new file mode 100644 index 0000000..5bbac5e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash66.C @@ -0,0 +1,40 @@ +// Build don't link: +// +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 7 May 2001 <nathan@codesourcery.com> + +// Bug 2525. We ICEd when a namespace scope template was erroneously +// given as a base member init. + +namespace N1 +{ + template<typename T> + struct B + { + B (T); + }; + + template<typename T> + struct D : B<T> + { + D (T r) + : B (r) // ERROR - no field named B + {} + }; +} + +template<typename T> +struct D1 : N1::B<T> +{ + D1 (T r) + : N1::B<T> (r) + {} +}; + +template<typename T> +struct D2 : N1::B<T> +{ + D2 (T r) + : N1::B (r) // ERROR - no field named N1::B + {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/inherit2.C b/gcc/testsuite/g++.old-deja/g++.pt/inherit2.C index 628f590..5198a64 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/inherit2.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/inherit2.C @@ -1,7 +1,7 @@ // Test that we warn about unqualified references to implicit typenames. -// Bug: g++ is confused by the binding for ::AN and crashes. + // Special g++ Options: -// excess errors test - XFAIL *-*-* +// Build don't link: template <class T> struct A { struct AA { }; |