diff options
| author | Sean Callanan <scallanan@apple.com> | 2016-02-10 22:00:32 +0000 | 
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2016-02-10 22:00:32 +0000 | 
| commit | 3f9de74ba16f7d0479665c98ef890246e00cb4c1 (patch) | |
| tree | 737b4671c4d09cb50d55f131112e5ebfd949490a | |
| parent | d41cb9562132d3672bfc984901bf3248023a16b0 (diff) | |
| download | bcm5719-llvm-3f9de74ba16f7d0479665c98ef890246e00cb4c1.tar.gz bcm5719-llvm-3f9de74ba16f7d0479665c98ef890246e00cb4c1.zip | |
When importing Objective-C protocols, mark them as having external decls.
We already do this for Objective-C interfaces, but we never handled protocols
because the DWARF didn't represent them.  Nowadays, though, we can import them
from modules, and we have to mark them properly.
<rdar://problem/24193009>
llvm-svn: 260445
| -rw-r--r-- | lldb/source/Symbol/ClangASTImporter.cpp | 34 | 
1 files changed, 23 insertions, 11 deletions
| diff --git a/lldb/source/Symbol/ClangASTImporter.cpp b/lldb/source/Symbol/ClangASTImporter.cpp index 141937072c7..6a3ae65822c 100644 --- a/lldb/source/Symbol/ClangASTImporter.cpp +++ b/lldb/source/Symbol/ClangASTImporter.cpp @@ -735,10 +735,10 @@ ClangASTImporter::Minion::ExecuteDeportWorkQueues ()              tag_decl->setHasExternalLexicalStorage(false);              tag_decl->setHasExternalVisibleStorage(false);          } -        else if (ObjCInterfaceDecl *interface_decl = dyn_cast<ObjCInterfaceDecl>(decl)) +        else if (ObjCContainerDecl *container_decl = dyn_cast<ObjCContainerDecl>(decl))          { -            interface_decl->setHasExternalLexicalStorage(false); -            interface_decl->setHasExternalVisibleStorage(false); +            container_decl->setHasExternalLexicalStorage(false); +            container_decl->setHasExternalVisibleStorage(false);          }          to_context_md->m_origins.erase(decl); @@ -949,20 +949,32 @@ ClangASTImporter::Minion::Imported (clang::Decl *from, clang::Decl *to)          to_namespace_decl->setHasExternalVisibleStorage();      } -    if (isa<ObjCInterfaceDecl>(from)) +    if (isa<ObjCContainerDecl>(from))      { -        ObjCInterfaceDecl *to_interface_decl = dyn_cast<ObjCInterfaceDecl>(to); +        ObjCContainerDecl *to_container_decl = dyn_cast<ObjCContainerDecl>(to); -        to_interface_decl->setHasExternalLexicalStorage(); -        to_interface_decl->setHasExternalVisibleStorage(); +        to_container_decl->setHasExternalLexicalStorage(); +        to_container_decl->setHasExternalVisibleStorage();          /*to_interface_decl->setExternallyCompleted();*/          if (log) -            log->Printf("    [ClangASTImporter] To is an ObjCInterfaceDecl - attributes %s%s%s", -                        (to_interface_decl->hasExternalLexicalStorage() ? " Lexical" : ""), -                        (to_interface_decl->hasExternalVisibleStorage() ? " Visible" : ""), -                        (to_interface_decl->hasDefinition() ? " HasDefinition" : "")); +        { +            if (ObjCInterfaceDecl *to_interface_decl = llvm::dyn_cast<ObjCInterfaceDecl>(to_container_decl)) +            { +                log->Printf("    [ClangASTImporter] To is an ObjCInterfaceDecl - attributes %s%s%s", +                            (to_interface_decl->hasExternalLexicalStorage() ? " Lexical" : ""), +                            (to_interface_decl->hasExternalVisibleStorage() ? " Visible" : ""), +                            (to_interface_decl->hasDefinition() ? " HasDefinition" : "")); +            } +            else +            { +                log->Printf("    [ClangASTImporter] To is an %sDecl - attributes %s%s", +                            ((Decl*)to_container_decl)->getDeclKindName(), +                            (to_container_decl->hasExternalLexicalStorage() ? " Lexical" : ""), +                            (to_container_decl->hasExternalVisibleStorage() ? " Visible" : "")); +            } +        }      }      return clang::ASTImporter::Imported(from, to); | 

