diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4568cb28a1b03b41c08fdf4c8c7dbe2260f94b9c..673554f2dcfa9b44badddc8b8b993e9d342ee4dc 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,12 +1,18 @@
+2006-09-04  Nathan Sidwell  <nathan@codesourcery.com>
+
+	PR 23287 Revert my 2006-09-01 patch.
+	* parser.c: Reverted.
+	* pt.c: Reverted.
+
 2006-09-02  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c++/27670
-        PR c++/27493
-        PR c++/27494
-        PR c++/27397
-        * parser.c (cp_parser_template_parameter_list): Add
-        invalid template parameters to the parameter list as
-        error_mark_node.
+	PR c++/27670
+	PR c++/27493
+	PR c++/27494
+	PR c++/27397
+	* parser.c (cp_parser_template_parameter_list): Add
+	invalid template parameters to the parameter list as
+	error_mark_node.
 
 2006-09-02  Jakub Jelinek  <jakub@redhat.com>
 
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 72e1c92056486d5e0eec2abbe2654928c81c9f39..a4e5f37eece9a118bfbdff8e734b632255c8a6b7 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -1393,9 +1393,9 @@ static bool cp_parser_translation_unit
 static tree cp_parser_primary_expression
   (cp_parser *, bool, bool, bool, cp_id_kind *);
 static tree cp_parser_id_expression
-  (cp_parser *, bool, bool, bool *, bool, bool, bool);
+  (cp_parser *, bool, bool, bool *, bool, bool);
 static tree cp_parser_unqualified_id
-  (cp_parser *, bool, bool, bool, bool, bool);
+  (cp_parser *, bool, bool, bool, bool);
 static tree cp_parser_nested_name_specifier_opt
   (cp_parser *, bool, bool, bool, bool);
 static tree cp_parser_nested_name_specifier
@@ -1720,7 +1720,7 @@ static bool cp_parser_check_template_parameters
 static tree cp_parser_simple_cast_expression
   (cp_parser *);
 static tree cp_parser_global_scope_opt
-  (cp_parser *, bool, bool);
+  (cp_parser *, bool);
 static bool cp_parser_constructor_declarator_p
   (cp_parser *, bool);
 static tree cp_parser_function_definition_from_specifiers_and_declarator
@@ -2182,8 +2182,7 @@ cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
 				/*check_dependency_p=*/true,
 				/*template_p=*/NULL,
 				/*declarator_p=*/true,
-				/*optional_p=*/false,
-				/*member_p=*/false);
+				/*optional_p=*/false);
   /* After the id-expression, there should be a plain identifier,
      otherwise this is not a simple variable declaration. Also, if
      the scope is dependent, we cannot do much.  */
@@ -3062,8 +3061,7 @@ cp_parser_primary_expression (cp_parser *parser,
 				     /*check_dependency_p=*/true,
 				     &template_p,
 				     /*declarator_p=*/false,
-				     /*optional_p=*/false,
-				     /*member_p=*/false);
+				     /*optional_p=*/false);
 	if (id_expression == error_mark_node)
 	  return error_mark_node;
 	token = cp_lexer_peek_token (parser->lexer);
@@ -3197,8 +3195,7 @@ cp_parser_id_expression (cp_parser *parser,
 			 bool check_dependency_p,
 			 bool *template_p,
 			 bool declarator_p,
-			 bool optional_p,
-			 bool member_p)
+			 bool optional_p)
 {
   bool global_scope_p;
   bool nested_name_specifier_p;
@@ -3209,10 +3206,8 @@ cp_parser_id_expression (cp_parser *parser,
 
   /* Look for the optional `::' operator.  */
   global_scope_p
-    = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false,
-				   /*object_scope_valid_p=*/member_p)
+    = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
        != NULL_TREE);
-  
   /* Look for the optional nested-name-specifier.  */
   nested_name_specifier_p
     = (cp_parser_nested_name_specifier_opt (parser,
@@ -3244,8 +3239,7 @@ cp_parser_id_expression (cp_parser *parser,
       unqualified_id = cp_parser_unqualified_id (parser, *template_p,
 						 check_dependency_p,
 						 declarator_p,
-						 /*optional_p=*/false,
-						 /*member_p=*/false);
+						 /*optional_p=*/false);
       /* Restore the SAVED_SCOPE for our caller.  */
       parser->scope = saved_scope;
       parser->object_scope = saved_object_scope;
@@ -3303,7 +3297,8 @@ cp_parser_id_expression (cp_parser *parser,
   else
     return cp_parser_unqualified_id (parser, template_keyword_p,
 				     /*check_dependency_p=*/true,
-				     declarator_p, optional_p, member_p);
+				     declarator_p,
+				     optional_p);
 }
 
 /* Parse an unqualified-id.
@@ -3333,8 +3328,7 @@ cp_parser_unqualified_id (cp_parser* parser,
 			  bool template_keyword_p,
 			  bool check_dependency_p,
 			  bool declarator_p,
-			  bool optional_p,
-			  bool member_p)
+			  bool optional_p)
 {
   cp_token *token;
 
@@ -3462,7 +3456,6 @@ cp_parser_unqualified_id (cp_parser* parser,
 	    if (cp_parser_parse_definitely (parser))
 	      done = true;
 	  }
-
 	/* In "N::S::~S", look in "N" as well.  */
 	if (!done && scope && qualifying_scope)
 	  {
@@ -3481,56 +3474,24 @@ cp_parser_unqualified_id (cp_parser* parser,
 	    if (cp_parser_parse_definitely (parser))
 	      done = true;
 	  }
-	/* In "p->~T", look in the scope given by "*p" as well.  */
-	else if (!done && member_p)
+	/* In "p->S::~T", look in the scope given by "*p" as well.  */
+	else if (!done && object_scope)
 	  {
-	    if (!object_scope)
-	      {
-		/* It's a dependent expression, so just parse the
-		   dtor name.  */
-		tree id;
-
-		if (template_keyword_p)
-		  /* It's a template-id.  */
-		  id = cp_parser_template_id (parser, true,
-					      check_dependency_p,
-					      declarator_p);
-		else
-		  {
-		    /* Otherwise, it's an ordinary identifier.  */
-		    id = cp_parser_identifier (parser);
-		    /* If ID is a template type parm, then use that
-		       directly.  */
-		    if (TREE_TYPE (id)
-			&& TREE_CODE (TREE_TYPE (id)) == TEMPLATE_TYPE_PARM)
-		      id = TREE_TYPE (id);
-		  }
-
-		if (id != error_mark_node)
-		  id = build_nt (BIT_NOT_EXPR, id);
-		return id;
-	      }
-
 	    cp_parser_parse_tentatively (parser);
 	    parser->scope = object_scope;
 	    parser->object_scope = NULL_TREE;
 	    parser->qualifying_scope = NULL_TREE;
 	    type_decl
 	      = cp_parser_class_name (parser,
-					/*typename_keyword_p=*/false,
+				      /*typename_keyword_p=*/false,
 				      /*template_keyword_p=*/false,
 				      none_type,
 				      /*check_dependency=*/false,
 				      /*class_head_p=*/false,
 				      declarator_p);
-	    /* The name is not qualified, so reset the parser scopes
-	       so our callers do not get confused.  */
-	    parser->object_scope = object_scope;
-	    parser->scope = NULL_TREE;
 	    if (cp_parser_parse_definitely (parser))
 	      done = true;
 	  }
-	
 	/* Look in the surrounding context.  */
 	if (!done)
 	  {
@@ -4521,12 +4482,11 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
   parser->qualifying_scope = NULL_TREE;
   parser->object_scope = NULL_TREE;
   *idk = CP_ID_KIND_NONE;
-
   /* Enter the scope corresponding to the type of the object
      given by the POSTFIX_EXPRESSION.  */
-  scope = TREE_TYPE (postfix_expression);
-  if (!dependent_p && scope)
+  if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
     {
+      scope = TREE_TYPE (postfix_expression);
       /* According to the standard, no expression should ever have
 	 reference type.  Unfortunately, we do not currently match
 	 the standard in this respect in that our internal representation
@@ -4540,8 +4500,11 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
 	  error ("%qE does not have class type", postfix_expression);
 	  scope = NULL_TREE;
 	}
-      else if (!dependent_p)
+      else
 	scope = complete_type_or_else (scope, NULL_TREE);
+      /* Let the name lookup machinery know that we are processing a
+	 class member access expression.  */
+      parser->context->object_type = scope;
       /* If something went wrong, we want to be able to discern that case,
 	 as opposed to the case where there was no SCOPE due to the type
 	 of expression being dependent.  */
@@ -4553,10 +4516,6 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
       if (scope == error_mark_node)
 	postfix_expression = error_mark_node;
     }
-  /* Let the name lookup machinery know that we are processing a class
-     member access expression.  */
-  parser->context->object_type = scope;
-  parser->object_scope = scope;
 
   /* Assume this expression is not a pseudo-destructor access.  */
   pseudo_destructor_p = false;
@@ -4594,8 +4553,7 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
 	       /*check_dependency_p=*/true,
 	       &template_p,
 	       /*declarator_p=*/false,
-	       /*optional_p=*/false,
-	       /*member_p=*/true));
+	       /*optional_p=*/false));
       /* In general, build a SCOPE_REF if the member name is qualified.
 	 However, if the name was not dependent and has already been
 	 resolved; there is no need to build the SCOPE_REF.  For example;
@@ -4800,9 +4758,7 @@ cp_parser_pseudo_destructor_name (cp_parser* parser,
   *type = error_mark_node;
 
   /* Look for the optional `::' operator.  */
-  cp_parser_global_scope_opt (parser,
-			      /*current_scope_valid_p=*/true,
-			      /*object_scop_valid_p=*/true);
+  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
   /* Look for the optional nested-name-specifier.  */
   nested_name_specifier_p
     = (cp_parser_nested_name_specifier_opt (parser,
@@ -5113,8 +5069,7 @@ cp_parser_new_expression (cp_parser* parser)
   /* Look for the optional `::' operator.  */
   global_scope_p
     = (cp_parser_global_scope_opt (parser,
-				   /*current_scope_valid_p=*/false,
-				   /*object_scope_valid_p=*/false)
+				   /*current_scope_valid_p=*/false)
        != NULL_TREE);
   /* Look for the `new' operator.  */
   cp_parser_require_keyword (parser, RID_NEW, "`new'");
@@ -5412,8 +5367,7 @@ cp_parser_delete_expression (cp_parser* parser)
   /* Look for the optional `::' operator.  */
   global_scope_p
     = (cp_parser_global_scope_opt (parser,
-				   /*current_scope_valid_p=*/false,
-				   /*object_scope_valid_p=*/false)
+				   /*current_scope_valid_p=*/false)
        != NULL_TREE);
   /* Look for the `delete' keyword.  */
   cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
@@ -8068,8 +8022,7 @@ cp_parser_mem_initializer_id (cp_parser* parser)
   /* Look for the optional `::' operator.  */
   global_scope_p
     = (cp_parser_global_scope_opt (parser,
-				   /*current_scope_valid_p=*/false,
-				   /*object_scope_valid_p=*/false)
+				   /*current_scope_valid_p=*/false)
        != NULL_TREE);
   /* Look for the optional nested-name-specifier.  The simplest way to
      implement:
@@ -8648,8 +8601,7 @@ cp_parser_type_parameter (cp_parser* parser)
 					 /*check_dependency_p=*/true,
 					 /*template_p=*/&is_template,
 					 /*declarator_p=*/false,
-					 /*optional_p=*/false,
-					 /*member_p=*/false);
+					 /*optional_p=*/false);
 	    if (TREE_CODE (default_argument) == TYPE_DECL)
 	      /* If the id-expression was a template-id that refers to
 		 a template-class, we already have the declaration here,
@@ -9214,8 +9166,7 @@ cp_parser_template_argument (cp_parser* parser)
 				      /*check_dependency_p=*/true,
 				      &template_p,
 				      /*declarator_p=*/false,
-				      /*optional_p=*/false,
-				      /*member_p=*/false);
+				      /*optional_p=*/false);
   /* If the next token isn't a `,' or a `>', then this argument wasn't
      really finished.  */
   if (!cp_parser_next_token_ends_template_argument_p (parser))
@@ -9855,8 +9806,7 @@ cp_parser_simple_type_specifier (cp_parser* parser,
       /* Look for the optional `::' operator.  */
       global_p
 	= (cp_parser_global_scope_opt (parser,
-				       /*current_scope_valid_p=*/false,
-				       /*object_scope_valid_p=*/false)
+				       /*current_scope_valid_p=*/false)
 	   != NULL_TREE);
       /* Look for the nested-name specifier.  */
       qualified_p
@@ -10081,8 +10031,7 @@ cp_parser_elaborated_type_specifier (cp_parser* parser,
 
   /* Look for the `::' operator.  */
   cp_parser_global_scope_opt (parser,
-			      /*current_scope_valid_p=*/false,
-			      /*object_scope_valid_p=*/false);
+			      /*current_scope_valid_p=*/false);
   /* Look for the nested-name-specifier.  */
   if (tag_type == typename_type)
     {
@@ -10617,8 +10566,7 @@ cp_parser_qualified_namespace_specifier (cp_parser* parser)
 {
   /* Look for the optional `::'.  */
   cp_parser_global_scope_opt (parser,
-			      /*current_scope_valid_p=*/false,
-			      /*object_scope_valid_p=*/false);
+			      /*current_scope_valid_p=*/false);
 
   /* Look for the optional nested-name-specifier.  */
   cp_parser_nested_name_specifier_opt (parser,
@@ -10663,8 +10611,7 @@ cp_parser_using_declaration (cp_parser* parser)
   /* Look for the optional global scope qualification.  */
   global_scope_p
     = (cp_parser_global_scope_opt (parser,
-				   /*current_scope_valid_p=*/false,
-				   /*object_scope_valid_p=*/false)
+				   /*current_scope_valid_p=*/false)
        != NULL_TREE);
 
   /* If we saw `typename', or didn't see `::', then there must be a
@@ -10690,8 +10637,7 @@ cp_parser_using_declaration (cp_parser* parser)
 					 /*template_keyword_p=*/false,
 					 /*check_dependency_p=*/true,
 					 /*declarator_p=*/true,
-					 /*optional_p=*/false,
-					 /*member_p=*/false);
+					 /*optional_p=*/false);
 
   /* The function we call to handle a using-declaration is different
      depending on what scope we are in.  */
@@ -10745,8 +10691,7 @@ cp_parser_using_directive (cp_parser* parser)
   /* And the `namespace' keyword.  */
   cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
   /* Look for the optional `::' operator.  */
-  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false,
-			      /*object_scope_valid_p=*/false);
+  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
   /* And the optional nested-name-specifier.  */
   cp_parser_nested_name_specifier_opt (parser,
 				       /*typename_keyword_p=*/false,
@@ -11814,8 +11759,7 @@ cp_parser_ptr_operator (cp_parser* parser,
       cp_parser_parse_tentatively (parser);
       /* Look for the optional `::' operator.  */
       cp_parser_global_scope_opt (parser,
-				  /*current_scope_valid_p=*/false,
-				  /*object_scope_valid_p=*/false);
+				  /*current_scope_valid_p=*/false);
       /* Look for the nested-name specifier.  */
       cp_parser_nested_name_specifier (parser,
 				       /*typename_keyword_p=*/false,
@@ -11955,8 +11899,7 @@ cp_parser_declarator_id (cp_parser* parser, bool optional_p)
 				/*check_dependency_p=*/false,
 				/*template_p=*/NULL,
 				/*declarator_p=*/true,
-				optional_p,
-				/*member_p=*/false);
+				optional_p);
   if (id && BASELINK_P (id))
     id = BASELINK_FUNCTIONS (id);
   return id;
@@ -13161,8 +13104,7 @@ cp_parser_class_head (cp_parser* parser,
      issuing an error about it later if this really is a
      class-head.  If it turns out just to be an elaborated type
      specifier, remain silent.  */
-  if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false,
-				  /*object_scope_valid_p=*/false))
+  if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
     qualified_p = true;
 
   push_deferring_access_checks (dk_no_check);
@@ -14148,8 +14090,7 @@ cp_parser_base_specifier (cp_parser* parser)
     }
 
   /* Look for the optional `::' operator.  */
-  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false,
-			      /*object_scope_valid_p=*/false);
+  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
   /* Look for the nested-name-specifier.  The simplest way to
      implement:
 
@@ -15198,8 +15139,7 @@ cp_parser_check_template_parameters (cp_parser* parser,
    present, and NULL_TREE otherwise.  */
 
 static tree
-cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p,
-			    bool object_scope_valid_p)
+cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
 {
   cp_token *token;
 
@@ -15218,15 +15158,12 @@ cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p,
 
       return parser->scope;
     }
-
-  if (!current_scope_valid_p)
+  else if (!current_scope_valid_p)
     {
       parser->scope = NULL_TREE;
       parser->qualifying_scope = NULL_TREE;
+      parser->object_scope = NULL_TREE;
     }
-  
-  if (!object_scope_valid_p)
-    parser->object_scope = NULL_TREE;
 
   return NULL_TREE;
 }
@@ -15264,8 +15201,7 @@ cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
 
   /* Look for the optional `::' operator.  */
   cp_parser_global_scope_opt (parser,
-			      /*current_scope_valid_p=*/false,
-			      /*object_scope_valid_p=*/false);
+			      /*current_scope_valid_p=*/false);
   /* Look for the nested-name-specifier.  */
   nested_name_p
     = (cp_parser_nested_name_specifier_opt (parser,
@@ -17972,8 +17908,7 @@ cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
 				      /*check_dependency_p=*/true,
 				      /*template_p=*/NULL,
 				      /*declarator_p=*/false,
-				      /*optional_p=*/false,
-				      /*member_p=*/false);
+				      /*optional_p=*/false);
       if (name == error_mark_node)
 	goto skip_comma;
 
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index c8081f65fb2b1e979c9f149aa6e5bbbc25af6f23..79d9de4e4ce79fd0134258696318901de197f5f8 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -9200,14 +9200,6 @@ tsubst_copy_and_build (tree t,
 	  member = tsubst_baselink (member,
 				    non_reference (TREE_TYPE (object)),
 				    args, complain, in_decl);
-	else if (TREE_CODE (member) == BIT_NOT_EXPR
-		 && !TYPE_P (TREE_OPERAND (member, 0)))
-	  {
-	    tree id = TREE_OPERAND (member, 0);
-	    id = make_typename_type (object_type, id, typename_type, complain);
-	    gcc_assert (TREE_CODE (id) != TYPENAME_TYPE);
-	    member = build_nt (BIT_NOT_EXPR, id);
-	  }
 	else
 	  member = tsubst_copy (member, args, complain, in_decl);
 	if (member == error_mark_node)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a1fdb4eb3142c1c89749f21bb7de803db7ca3a67..d2ca50ee831d0c532a89e14b9d56a10f106f66e6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,19 +1,24 @@
+2006-09-04  Nathan Sidwell  <nathan@codesourcery.com>
+
+	PR c++/23287 Revert my 2006-09-01 patch
+	* g++.dg/parse/dtor12.C: Remove.
+
 2006-09-02  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c+/27670
-        * g++.dg/template/operator9.C: New test.
+	PR c+/27670
+	* g++.dg/template/operator9.C: New test.
 
-        PR c++/27493
-        * g++.dg/template/operator7.C: New test.
+	PR c++/27493
+	* g++.dg/template/operator7.C: New test.
 
-        PR c++/27494
-        * g++.dg/template/operator8.C: New test.
+	PR c++/27494
+	* g++.dg/template/operator8.C: New test.
 
-        PR c++/27397
-        * g++.dg/template/crash57.C: New test.
+	PR c++/27397
+	* g++.dg/template/crash57.C: New test.
 
-        * g++.dg/template/typedef4.C: Adjust error markers.
-        * g++.dg/template/typedef5.C: Likewise.
+	* g++.dg/template/typedef4.C: Adjust error markers.
+	* g++.dg/template/typedef5.C: Likewise.
 	
 2006-09-02  Jakub Jelinek  <jakub@redhat.com>
 
@@ -130,8 +135,8 @@
 
 2006-08-27  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c++/26573
-        * g++.dg/other/static2.C: New test. 
+	PR c++/26573
+	* g++.dg/other/static2.C: New test. 
 	
 2006-08-26  Roger Sayle  <roger@eyesopen.com>
 
@@ -144,19 +149,19 @@
 
 2006-08-26  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c++/28736
-        * g++.dg/template/void10.C: New test.
+	PR c++/28736
+	* g++.dg/template/void10.C: New test.
 
-        PR c++/28737
-        * g++.dg/template/void8.C: New test.
+	PR c++/28737
+	* g++.dg/template/void8.C: New test.
 
-        PR c+_+/28738
-        * g++.dg/template/void9.C: New test.
+	PR c+_+/28738
+	* g++.dg/template/void9.C: New test.
 
-        * g++.dg/template/void3.C: Adjust error markers.
-        * g++.dg/template/void4.C: Likewise.
-        * g++.dg/template/crash55.C: Likewise.
-        * g++.dg/template/void7.C: Likewise
+	* g++.dg/template/void3.C: Adjust error markers.
+	* g++.dg/template/void4.C: Likewise.
+	* g++.dg/template/crash55.C: Likewise.
+	* g++.dg/template/void7.C: Likewise
 	
 2006-08-26  Mark Mitchell  <mark@codesourcery.com>
 
@@ -267,7 +272,7 @@
 
 2006-08-22  Andrew Pinski  <pinskia@physics.uc.edu>
 
-        PR C++/28450
+	PR C++/28450
 	* g++.dg/ext/vector4.C: New test.
 	* g++.dg/ext/complex1.C: New test.
 
@@ -292,15 +297,15 @@
 
 2006-08-21  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c++/26269
-        * g++.dg/other/error14.C: New test.
+	PR c++/26269
+	* g++.dg/other/error14.C: New test.
 
-        PR c++/28505
-        * g++.dg/parse/ctor7.C: New test.
-        * g++.dg/parse/ctor8.C: Likewise.
+	PR c++/28505
+	* g++.dg/parse/ctor7.C: New test.
+	* g++.dg/parse/ctor8.C: Likewise.
 
 	PR c++/28741
-        * g++.dg/template/void7.C: New test. 
+	* g++.dg/template/void7.C: New test. 
 	
 2006-08-21  Olivier Hainque  <hainque@adacore.com>
 
@@ -742,14 +747,14 @@
 
 2006-07-28  Lee Millward  <lee.millward@codesourcery.com>
 
-        PR c++/27668
-        * g++.dg/template/crash55.C: New test.
+	PR c++/27668
+	* g++.dg/template/crash55.C: New test.
 
-        PR c++/27962
-        * g++.dg/template/nontype16.C: New test.
+	PR c++/27962
+	* g++.dg/template/nontype16.C: New test.
 
-        * g++.dg/template/void2.C: Adjust error markers.
-        * g++.dg/template/nontype5.C: Adjust error markers.
+	* g++.dg/template/void2.C: Adjust error markers.
+	* g++.dg/template/nontype5.C: Adjust error markers.
 	
 2006-07-27  Arjan van de Ven <arjan@linux.intel.com>
 
@@ -1620,7 +1625,7 @@
 	* gcc.dg/sibcall-7.c: Do not run on ia64-*-* platforms.
 
 2006-06-05  Dorit Nuzman  <dorit@il.ibm.com>
-            Victor Kaplansky  <victork@il.ibm.com>
+	    Victor Kaplansky  <victork@il.ibm.com>
 
 	PR tree-optimizations/26360
 	* gcc.dg/vect/vect.exp: Compile tests prefixed with "no-tree-dce"
diff --git a/gcc/testsuite/g++.dg/parse/dtor12.C b/gcc/testsuite/g++.dg/parse/dtor12.C
deleted file mode 100644
index d964662178e6d21c67264bb40a02c31331899fbd..0000000000000000000000000000000000000000
--- a/gcc/testsuite/g++.dg/parse/dtor12.C
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2006 Free Software Foundation, Inc.
-// Contributed by Nathan Sidwell 1 Sep 2006 <nathan@codesourcery.com>
-
-// PR 23287: Failure to parse dependent dtor name
-// Origin:Wolfgang Bangerth  <bangerth@dealii.org>
-
-
-template <class T> struct A {}; 
- 
-template <class T> void f(A<T> *ptr) { 
-  ptr->~A(); 
-}
-
-template void f<void> (A<void> *);
-