Revert "Added support for -gmodule debugging when debug info is left in the .o files on Darwin."

The commit caused a test failure on the linux buildbot in
TestDataFormatterSynthVal.

llvm-svn: 254502
diff --git a/lldb/source/Symbol/ClangASTContext.cpp b/lldb/source/Symbol/ClangASTContext.cpp
index ecf37ff..6373b1a 100644
--- a/lldb/source/Symbol/ClangASTContext.cpp
+++ b/lldb/source/Symbol/ClangASTContext.cpp
@@ -2297,6 +2297,9 @@
         if (tag_decl->isCompleteDefinition())
             return true;
         
+        if (!tag_decl->hasExternalLexicalStorage())
+            return false;
+        
         ast_source->CompleteType(tag_decl);
         
         return !tag_decl->getTypeForDecl()->isIncompleteType();
@@ -2448,110 +2451,81 @@
         case clang::Type::ConstantArray:
         case clang::Type::IncompleteArray:
         case clang::Type::VariableArray:
-            {
-                const clang::ArrayType *array_type = llvm::dyn_cast<clang::ArrayType>(qual_type.getTypePtr());
-                
-                if (array_type)
-                    return GetCompleteQualType (ast, array_type->getElementType(), allow_completion);
-            }
+        {
+            const clang::ArrayType *array_type = llvm::dyn_cast<clang::ArrayType>(qual_type.getTypePtr());
+            
+            if (array_type)
+                return GetCompleteQualType (ast, array_type->getElementType(), allow_completion);
+        }
             break;
             
         case clang::Type::Record:
+        case clang::Type::Enum:
+        {
+            const clang::TagType *tag_type = llvm::dyn_cast<clang::TagType>(qual_type.getTypePtr());
+            if (tag_type)
             {
-                clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
-                if (cxx_record_decl)
+                clang::TagDecl *tag_decl = tag_type->getDecl();
+                if (tag_decl)
                 {
-                    bool fields_loaded = cxx_record_decl->hasLoadedFieldsFromExternalStorage();
-                    if (cxx_record_decl->isCompleteDefinition() && fields_loaded)
+                    if (tag_decl->isCompleteDefinition())
                         return true;
-
+                    
                     if (!allow_completion)
                         return false;
-
-                    // Call the field_begin() accessor to for it to use the external source
-                    // to load the fields...
-                    clang::ExternalASTSource *external_ast_source = ast->getExternalSource();
-                    if (external_ast_source)
+                    
+                    if (tag_decl->hasExternalLexicalStorage())
                     {
-                        external_ast_source->CompleteType(cxx_record_decl);
-                        if (cxx_record_decl->isCompleteDefinition())
+                        if (ast)
                         {
-                            cxx_record_decl->setHasLoadedFieldsFromExternalStorage (true);
-                            cxx_record_decl->field_begin();
-                            return cxx_record_decl->hasLoadedFieldsFromExternalStorage();
-                        }
-                    }
-                }
-                return false;
-            }
-                break;
-
-        case clang::Type::Enum:
-            {
-                const clang::TagType *tag_type = llvm::dyn_cast<clang::TagType>(qual_type.getTypePtr());
-                if (tag_type)
-                {
-                    clang::TagDecl *tag_decl = tag_type->getDecl();
-                    if (tag_decl)
-                    {
-                        if (tag_decl->getDefinition())
-                            return true;
-                        
-                        if (!allow_completion)
-                            return false;
-                        
-                        if (tag_decl->hasExternalLexicalStorage())
-                        {
-                            if (ast)
+                            clang::ExternalASTSource *external_ast_source = ast->getExternalSource();
+                            if (external_ast_source)
                             {
-                                clang::ExternalASTSource *external_ast_source = ast->getExternalSource();
-                                if (external_ast_source)
-                                {
-                                    external_ast_source->CompleteType(tag_decl);
-                                    return !tag_type->isIncompleteType();
-                                }
+                                external_ast_source->CompleteType(tag_decl);
+                                return !tag_type->isIncompleteType();
                             }
                         }
-                        return false;
                     }
+                    return false;
                 }
-                
             }
+            
+        }
             break;
             
         case clang::Type::ObjCObject:
         case clang::Type::ObjCInterface:
+        {
+            const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type);
+            if (objc_class_type)
             {
-                const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type);
-                if (objc_class_type)
+                clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
+                // We currently can't complete objective C types through the newly added ASTContext
+                // because it only supports TagDecl objects right now...
+                if (class_interface_decl)
                 {
-                    clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
-                    // We currently can't complete objective C types through the newly added ASTContext
-                    // because it only supports TagDecl objects right now...
-                    if (class_interface_decl)
+                    if (class_interface_decl->getDefinition())
+                        return true;
+                    
+                    if (!allow_completion)
+                        return false;
+                    
+                    if (class_interface_decl->hasExternalLexicalStorage())
                     {
-                        if (class_interface_decl->getDefinition())
-                            return true;
-                        
-                        if (!allow_completion)
-                            return false;
-                        
-                        if (class_interface_decl->hasExternalLexicalStorage())
+                        if (ast)
                         {
-                            if (ast)
+                            clang::ExternalASTSource *external_ast_source = ast->getExternalSource();
+                            if (external_ast_source)
                             {
-                                clang::ExternalASTSource *external_ast_source = ast->getExternalSource();
-                                if (external_ast_source)
-                                {
-                                    external_ast_source->CompleteType (class_interface_decl);
-                                    return !objc_class_type->isIncompleteType();
-                                }
+                                external_ast_source->CompleteType (class_interface_decl);
+                                return !objc_class_type->isIncompleteType();
                             }
                         }
-                        return false;
                     }
+                    return false;
                 }
             }
+        }
             break;
             
         case clang::Type::Typedef:
@@ -2562,10 +2536,7 @@
             
         case clang::Type::Paren:
             return GetCompleteQualType (ast, llvm::cast<clang::ParenType>(qual_type)->desugar(), allow_completion);
-
-        case clang::Type::Attributed:
-            return GetCompleteQualType (ast, llvm::cast<clang::AttributedType>(qual_type)->getModifiedType(), allow_completion);
-
+            
         default:
             break;
     }
@@ -7189,16 +7160,6 @@
     return nullptr;
 }
 
-clang::TagDecl *
-ClangASTContext::GetAsTagDecl (const CompilerType& type)
-{
-    clang::QualType qual_type = GetCanonicalQualType(type);
-    if (qual_type.isNull())
-        return nullptr;
-    else
-        return qual_type->getAsTagDecl();
-}
-
 clang::CXXRecordDecl *
 ClangASTContext::GetAsCXXRecordDecl (lldb::opaque_compiler_type_t type)
 {
@@ -8076,64 +8037,6 @@
 }
 
 bool
-ClangASTContext::GetHasExternalStorage (const CompilerType &type)
-{
-    if (IsClangType(type))
-        return false;
-
-    clang::QualType qual_type (GetCanonicalQualType(type));
-
-    const clang::Type::TypeClass type_class = qual_type->getTypeClass();
-    switch (type_class)
-    {
-        case clang::Type::Record:
-        {
-            clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
-            if (cxx_record_decl)
-                return cxx_record_decl->hasExternalLexicalStorage () || cxx_record_decl->hasExternalVisibleStorage();
-        }
-            break;
-
-        case clang::Type::Enum:
-        {
-            clang::EnumDecl *enum_decl = llvm::cast<clang::EnumType>(qual_type)->getDecl();
-            if (enum_decl)
-                return enum_decl->hasExternalLexicalStorage () || enum_decl->hasExternalVisibleStorage();
-        }
-            break;
-
-        case clang::Type::ObjCObject:
-        case clang::Type::ObjCInterface:
-        {
-            const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type.getTypePtr());
-            assert (objc_class_type);
-            if (objc_class_type)
-            {
-                clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
-
-                if (class_interface_decl)
-                    return class_interface_decl->hasExternalLexicalStorage () || class_interface_decl->hasExternalVisibleStorage ();
-            }
-        }
-            break;
-
-        case clang::Type::Typedef:
-            return GetHasExternalStorage (CompilerType(type.GetTypeSystem(), llvm::cast<clang::TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr()));
-
-        case clang::Type::Elaborated:
-            return GetHasExternalStorage (CompilerType(type.GetTypeSystem(), llvm::cast<clang::ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr()));
-
-        case clang::Type::Paren:
-            return GetHasExternalStorage (CompilerType(type.GetTypeSystem(), llvm::cast<clang::ParenType>(qual_type)->desugar().getAsOpaquePtr()));
-
-        default:
-            break;
-    }
-    return false;
-}
-
-
-bool
 ClangASTContext::SetHasExternalStorage (lldb::opaque_compiler_type_t type, bool has_extern)
 {
     if (!type)
@@ -8203,173 +8106,38 @@
 }
 
 
-bool
-ClangASTContext::CanImport (const CompilerType &type, lldb_private::ClangASTImporter &importer)
-{
-    if (IsClangType(type))
-    {
-        // TODO: remove external completion BOOL
-        // CompleteAndFetchChildren should get the Decl out and check for the
-
-        clang::QualType qual_type(GetCanonicalQualType(RemoveFastQualifiers(type)));
-
-        const clang::Type::TypeClass type_class = qual_type->getTypeClass();
-        switch (type_class)
-        {
-            case clang::Type::Record:
-            {
-                const clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
-                if (cxx_record_decl)
-                {
-                    if (importer.ResolveDeclOrigin (cxx_record_decl, NULL, NULL))
-                        return true;
-                }
-            }
-                break;
-
-            case clang::Type::Enum:
-            {
-                clang::EnumDecl *enum_decl = llvm::cast<clang::EnumType>(qual_type)->getDecl();
-                if (enum_decl)
-                {
-                    if (importer.ResolveDeclOrigin (enum_decl, NULL, NULL))
-                        return true;
-                }
-            }
-                break;
-
-            case clang::Type::ObjCObject:
-            case clang::Type::ObjCInterface:
-            {
-                const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type);
-                if (objc_class_type)
-                {
-                    clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
-                    // We currently can't complete objective C types through the newly added ASTContext
-                    // because it only supports TagDecl objects right now...
-                    if (class_interface_decl)
-                    {
-                        if (importer.ResolveDeclOrigin (class_interface_decl, NULL, NULL))
-                            return true;
-                    }
-                }
-            }
-                break;
-
-
-            case clang::Type::Typedef:
-                return CanImport(CompilerType (type.GetTypeSystem(), llvm::cast<clang::TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr()), importer);
-
-            case clang::Type::Elaborated:
-                return CanImport(CompilerType (type.GetTypeSystem(), llvm::cast<clang::ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr()), importer);
-
-            case clang::Type::Paren:
-                return CanImport(CompilerType (type.GetTypeSystem(), llvm::cast<clang::ParenType>(qual_type)->desugar().getAsOpaquePtr()), importer);
-
-            default:
-                break;
-        }
-    }
-    return false;
-}
-bool
-ClangASTContext::Import (const CompilerType &type, lldb_private::ClangASTImporter &importer)
-{
-    if (IsClangType(type))
-    {
-        // TODO: remove external completion BOOL
-        // CompleteAndFetchChildren should get the Decl out and check for the
-
-        clang::QualType qual_type(GetCanonicalQualType(RemoveFastQualifiers(type)));
-
-        const clang::Type::TypeClass type_class = qual_type->getTypeClass();
-        switch (type_class)
-        {
-            case clang::Type::Record:
-            {
-                const clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
-                if (cxx_record_decl)
-                {
-                    if (importer.ResolveDeclOrigin (cxx_record_decl, NULL, NULL))
-                        return importer.CompleteAndFetchChildren(qual_type);
-                }
-            }
-                break;
-
-            case clang::Type::Enum:
-            {
-                clang::EnumDecl *enum_decl = llvm::cast<clang::EnumType>(qual_type)->getDecl();
-                if (enum_decl)
-                {
-                    if (importer.ResolveDeclOrigin (enum_decl, NULL, NULL))
-                        return importer.CompleteAndFetchChildren(qual_type);
-                }
-            }
-                break;
-
-            case clang::Type::ObjCObject:
-            case clang::Type::ObjCInterface:
-            {
-                const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type);
-                if (objc_class_type)
-                {
-                    clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
-                    // We currently can't complete objective C types through the newly added ASTContext
-                    // because it only supports TagDecl objects right now...
-                    if (class_interface_decl)
-                    {
-                        if (importer.ResolveDeclOrigin (class_interface_decl, NULL, NULL))
-                            return importer.CompleteAndFetchChildren(qual_type);
-                    }
-                }
-            }
-                break;
-
-
-            case clang::Type::Typedef:
-                return Import (CompilerType(type.GetTypeSystem(), llvm::cast<clang::TypedefType>(qual_type)->getDecl()->getUnderlyingType().getAsOpaquePtr()), importer);
-
-            case clang::Type::Elaborated:
-                return Import (CompilerType(type.GetTypeSystem(),llvm::cast<clang::ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr()), importer);
-
-            case clang::Type::Paren:
-                return Import (CompilerType(type.GetTypeSystem(),llvm::cast<clang::ParenType>(qual_type)->desugar().getAsOpaquePtr()), importer);
-                
-            default:
-                break;
-        }
-    }
-    return false;
-}
-
-
 #pragma mark TagDecl
 
 bool
 ClangASTContext::StartTagDeclarationDefinition (const CompilerType &type)
 {
-    clang::QualType qual_type (ClangASTContext::GetQualType(type));
-    if (!qual_type.isNull())
+    if (type)
     {
-        const clang::TagType *tag_type = qual_type->getAs<clang::TagType>();
-        if (tag_type)
-        {
-            clang::TagDecl *tag_decl = tag_type->getDecl();
-            if (tag_decl)
-            {
-                tag_decl->startDefinition();
-                return true;
-            }
-        }
         
-        const clang::ObjCObjectType *object_type = qual_type->getAs<clang::ObjCObjectType>();
-        if (object_type)
+        clang::QualType qual_type (GetQualType(type));
+        const clang::Type *t = qual_type.getTypePtr();
+        if (t)
         {
-            clang::ObjCInterfaceDecl *interface_decl = object_type->getInterface();
-            if (interface_decl)
+            const clang::TagType *tag_type = llvm::dyn_cast<clang::TagType>(t);
+            if (tag_type)
             {
-                interface_decl->startDefinition();
-                return true;
+                clang::TagDecl *tag_decl = tag_type->getDecl();
+                if (tag_decl)
+                {
+                    tag_decl->startDefinition();
+                    return true;
+                }
+            }
+            
+            const clang::ObjCObjectType *object_type = llvm::dyn_cast<clang::ObjCObjectType>(t);
+            if (object_type)
+            {
+                clang::ObjCInterfaceDecl *interface_decl = object_type->getInterface();
+                if (interface_decl)
+                {
+                    interface_decl->startDefinition();
+                    return true;
+                }
             }
         }
     }
@@ -8379,22 +8147,26 @@
 bool
 ClangASTContext::CompleteTagDeclarationDefinition (const CompilerType& type)
 {
-    clang::QualType qual_type (ClangASTContext::GetQualType(type));
-    if (!qual_type.isNull())
+    if (type)
     {
+        clang::QualType qual_type (GetQualType(type));
+        if (qual_type.isNull())
+            return false;
+        ClangASTContext *lldb_ast = llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem());
+        if (lldb_ast == nullptr)
+            return false;
+        clang::ASTContext *ast = lldb_ast->getASTContext();
+
         clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
         
         if (cxx_record_decl)
         {
-            if (!cxx_record_decl->isCompleteDefinition())
-                cxx_record_decl->completeDefinition();
-            cxx_record_decl->setHasLoadedFieldsFromExternalStorage(true);
-            cxx_record_decl->setHasExternalLexicalStorage (false);
-            cxx_record_decl->setHasExternalVisibleStorage (false);
+            cxx_record_decl->completeDefinition();
+            
             return true;
         }
         
-        const clang::EnumType *enutype = qual_type->getAs<clang::EnumType>();
+        const clang::EnumType *enutype = llvm::dyn_cast<clang::EnumType>(qual_type.getTypePtr());
         
         if (enutype)
         {
@@ -8402,33 +8174,25 @@
             
             if (enum_decl)
             {
-                if (!enum_decl->isCompleteDefinition())
+                /// TODO This really needs to be fixed.
+                
+                unsigned NumPositiveBits = 1;
+                unsigned NumNegativeBits = 0;
+                
+                clang::QualType promotion_qual_type;
+                // If the enum integer type is less than an integer in bit width,
+                // then we must promote it to an integer size.
+                if (ast->getTypeSize(enum_decl->getIntegerType()) < ast->getTypeSize(ast->IntTy))
                 {
-                    ClangASTContext *lldb_ast = llvm::dyn_cast<ClangASTContext>(type.GetTypeSystem());
-                    if (lldb_ast == nullptr)
-                        return false;
-                    clang::ASTContext *ast = lldb_ast->getASTContext();
-
-                    /// TODO This really needs to be fixed.
-                    
-                    unsigned NumPositiveBits = 1;
-                    unsigned NumNegativeBits = 0;
-                    
-                    clang::QualType promotion_qual_type;
-                    // If the enum integer type is less than an integer in bit width,
-                    // then we must promote it to an integer size.
-                    if (ast->getTypeSize(enum_decl->getIntegerType()) < ast->getTypeSize(ast->IntTy))
-                    {
-                        if (enum_decl->getIntegerType()->isSignedIntegerType())
-                            promotion_qual_type = ast->IntTy;
-                        else
-                            promotion_qual_type = ast->UnsignedIntTy;
-                    }
+                    if (enum_decl->getIntegerType()->isSignedIntegerType())
+                        promotion_qual_type = ast->IntTy;
                     else
-                        promotion_qual_type = enum_decl->getIntegerType();
-                    
-                    enum_decl->completeDefinition(enum_decl->getIntegerType(), promotion_qual_type, NumPositiveBits, NumNegativeBits);
+                        promotion_qual_type = ast->UnsignedIntTy;
                 }
+                else
+                    promotion_qual_type = enum_decl->getIntegerType();
+                
+                enum_decl->completeDefinition(enum_decl->getIntegerType(), promotion_qual_type, NumPositiveBits, NumNegativeBits);
                 return true;
             }
         }
@@ -9212,72 +8976,6 @@
     }
 }
 
-void
-ClangASTContext::DumpTypeName (const CompilerType &type)
-{
-    if (IsClangType(type))
-    {
-        clang::QualType qual_type(GetCanonicalQualType(RemoveFastQualifiers(type)));
-
-        const clang::Type::TypeClass type_class = qual_type->getTypeClass();
-        switch (type_class)
-        {
-            case clang::Type::Record:
-            {
-                const clang::CXXRecordDecl *cxx_record_decl = qual_type->getAsCXXRecordDecl();
-                if (cxx_record_decl)
-                    printf("class %s", cxx_record_decl->getName().str().c_str());
-            }
-                break;
-
-            case clang::Type::Enum:
-            {
-                clang::EnumDecl *enum_decl = llvm::cast<clang::EnumType>(qual_type)->getDecl();
-                if (enum_decl)
-                {
-                    printf("enum %s", enum_decl->getName().str().c_str());
-                }
-            }
-                break;
-
-            case clang::Type::ObjCObject:
-            case clang::Type::ObjCInterface:
-            {
-                const clang::ObjCObjectType *objc_class_type = llvm::dyn_cast<clang::ObjCObjectType>(qual_type);
-                if (objc_class_type)
-                {
-                    clang::ObjCInterfaceDecl *class_interface_decl = objc_class_type->getInterface();
-                    // We currently can't complete objective C types through the newly added ASTContext
-                    // because it only supports TagDecl objects right now...
-                    if (class_interface_decl)
-                        printf("@class %s", class_interface_decl->getName().str().c_str());
-                }
-            }
-                break;
-
-
-            case clang::Type::Typedef:
-                printf("typedef %s", llvm::cast<clang::TypedefType>(qual_type)->getDecl()->getName().str().c_str());
-                break;
-
-            case clang::Type::Elaborated:
-                printf("elaborated ");
-                return DumpTypeName (CompilerType (type.GetTypeSystem(), llvm::cast<clang::ElaboratedType>(qual_type)->getNamedType().getAsOpaquePtr()));
-
-            case clang::Type::Paren:
-                printf("paren ");
-                return DumpTypeName (CompilerType (type.GetTypeSystem(), llvm::cast<clang::ParenType>(qual_type)->desugar().getAsOpaquePtr()));
-
-            default:
-                printf("ClangASTContext::DumpTypeName() type_class = %u", type_class);
-                break;
-        }
-    }
-
-}
-
-
-
 clang::ClassTemplateDecl *
 ClangASTContext::ParseClassTemplateDecl (clang::DeclContext *decl_ctx,
                                          lldb::AccessType access_type,