Modified clients of ClangASTImporter to be more robust
in the face of failures to import types, since blithely
passing on NULL types can sometimes lead to trouble.

Also eliminated a use of getAs and replaced it with
dyn_cast, which is more robust.


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@145628 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/ClangASTSource.cpp b/source/Expression/ClangASTSource.cpp
index ca97fc1..0eca0a4 100644
--- a/source/Expression/ClangASTSource.cpp
+++ b/source/Expression/ClangASTSource.cpp
@@ -503,6 +503,14 @@
             
             void *copied_type = GuardedCopyType(m_ast_context, type_sp->GetClangAST(), type_sp->GetClangFullType());
             
+            if (!copied_type)
+            {                
+                if (log)
+                    log->Printf("ClangExpressionDeclMap::BuildIntegerVariable - Couldn't export the type for a constant integer result");
+                
+                break;
+            }
+                
             context.AddTypeDecl(copied_type);
         }
         
@@ -845,7 +853,7 @@
     // this, we raid the function's FunctionProtoType for types.
     
     QualType qual_type (QualType::getFromOpaquePtr(type));
-    const FunctionProtoType *func_proto_type = qual_type->getAs<FunctionProtoType>();
+    const FunctionProtoType *func_proto_type = dyn_cast<FunctionProtoType>(qual_type.getTypePtr());
     
     if (func_proto_type)
     {        
@@ -872,6 +880,12 @@
         
         func_decl->setParams(ArrayRef<ParmVarDecl*>(parm_var_decls));
     }
+    else
+    {
+        lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_EXPRESSIONS));
+
+        log->Printf("Function type wasn't a FunctionProtoType");
+    }
     
     m_decls.push_back(func_decl);