aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2001-05-16 09:34:24 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2001-05-16 09:34:24 +0000
commit3f0a9b3563fa102e975854ecdd17980550c9cd22 (patch)
tree3763ba89d727eec4a2a351db78494d45942e5b90
parentf94557fb739bf07401ac6a1ab09e49879e945ecb (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/init.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/crash66.C40
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/inherit2.C4
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 { };