From: nathan Date: Wed, 16 May 2001 09:34:24 +0000 (+0000) Subject: cp: X-Git-Tag: upstream/4.9.2~94418 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4173a1ff8756ed2b84974d6c8f0c5b594ef2700f;p=platform%2Fupstream%2Flinaro-gcc.git 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42142 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + + * init.c (member_init_ok_or_else): Take a tree rather than + string for name. + (expand_member_init): Adjust. + 2001-05-14 Nick Clifton * 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 + + * g++.pt/inherit2.C: Remove XFAIL. + * g++.pt/crash66.C: New test. + 2001-05-15 Benjamin Kosnik * 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 + +// Bug 2525. We ICEd when a namespace scope template was erroneously +// given as a base member init. + +namespace N1 +{ + template + struct B + { + B (T); + }; + + template + struct D : B + { + D (T r) + : B (r) // ERROR - no field named B + {} + }; +} + +template +struct D1 : N1::B +{ + D1 (T r) + : N1::B (r) + {} +}; + +template +struct D2 : N1::B +{ + 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 struct A { struct AA { };