diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 014c76bbb0a8045d1e9eb331ad7e9d9d231f140a..95933ac0245c979ab6df94db8d8a82890b3533c1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
 2006-09-05  Jason Merrill  <jason@redhat.com>
 
+	PR c++/26571
+	* parser.c (cp_parser_diagnose_invalid_type_name): Handle the case
+	where the name is a type used incorrectly.
+
 	PR c++/26671
 	* typeck.c (maybe_warn_about_returning_address_of_local): Look 
 	through COMPONENT_REF and ARRAY_REF.	
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index a4e5f37eece9a118bfbdff8e734b632255c8a6b7..41726f3e3b92368d94073e964fe9b215a3e37fcb 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -2101,6 +2101,9 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
     error ("invalid use of template-name %qE without an argument list", decl);
   else if (TREE_CODE (id) == BIT_NOT_EXPR)
     error ("invalid use of destructor %qD as a type", id);
+  else if (TREE_CODE (decl) == TYPE_DECL)
+    /* Something like 'unsigned A a;'  */
+    error ("invalid combination of multiple type-specifiers");
   else if (!parser->scope)
     {
       /* Issue an error message.  */
diff --git a/gcc/testsuite/g++.dg/parse/typespec1.C b/gcc/testsuite/g++.dg/parse/typespec1.C
new file mode 100644
index 0000000000000000000000000000000000000000..a371f8b983634cd229474bc728ba17c52b89582d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/typespec1.C
@@ -0,0 +1,4 @@
+// PR c++/26571
+
+struct A {};
+unsigned A a;			// { dg-error "multiple" }