Fixed an assertion failure triggered by invalid code.

Set invalid type of declarator after emitting error diagnostics,
so that it won't be later considered when instantiating the template.
Added test5_inst in test/SemaCXX/condition.cpp for non-regression.

llvm-svn: 172201
diff --git a/clang/test/SemaCXX/condition.cpp b/clang/test/SemaCXX/condition.cpp
index ec5eb17..d805881 100644
--- a/clang/test/SemaCXX/condition.cpp
+++ b/clang/test/SemaCXX/condition.cpp
@@ -19,7 +19,7 @@
   while (struct NewS *x=0) ;
   while (struct S {} *x=0) ; // expected-error {{types may not be defined in conditions}}
   while (struct {} *x=0) ; // expected-error {{types may not be defined in conditions}}
-  switch (enum {E} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{cannot initialize}} \
+  switch (enum {E} x=0) ; // expected-error {{types may not be defined in conditions}} \
   // expected-warning{{enumeration value 'E' not handled in switch}} expected-warning {{switch statement has empty body}} \
   // expected-note{{put the semicolon on a separate line}}
 
@@ -58,3 +58,12 @@
 void test4(bool (&x)(void)) {
   while (x);
 }
+
+template <class>
+void test5() {
+  if (struct S {}* p = 0) // expected-error {{types may not be defined in conditions}}
+    ;
+}
+void test5_inst() {
+   test5<int>();
+}