More work on diagnosing abstract classes. We can now handle cases like

class C {
  void g(C c);

  virtual void f() = 0;
};

In this case, C is not known to be abstract when doing semantic analysis on g. This is done by recursively traversing the abstract class and checking the types of member functions. 



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67594 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp
index b7a8f7a..685b9cf 100644
--- a/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -357,7 +357,7 @@
       else if (SemaRef.RequireNonAbstractType(PInst->getLocation(), 
                                               PInst->getType(),
                                               diag::err_abstract_type_in_decl,
-                                              1 /* parameter type */))
+                                              Sema::AbstractParamType))
         PInst->setInvalidDecl();
 
       Params.push_back(PInst);