Commit 3f0a9b35 by Nathan Sidwell Committed by Nathan Sidwell

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
parent f94557fb
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
......
......@@ -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);
......
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.
......
// 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
{}
};
// 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 { };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment