OSDN Git Service

cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 May 2001 09:34:24 +0000 (09:34 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 May 2001 09:34:24 +0000 (09:34 +0000)
* 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

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.pt/crash66.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/inherit2.C

index c48312c..a739534 100644 (file)
@@ -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
index 589f7af..1ac6f73 100644 (file)
@@ -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);
index 5c3469f..9793562 100644 (file)
@@ -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 (file)
index 0000000..5bbac5e
--- /dev/null
@@ -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
+  {}
+};
index 628f590..5198a64 100644 (file)
@@ -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 { };