dgoldman created this revision. Herald added subscribers: cfe-commits, kadircet, arphaman, jkorous, ioeric, ilya-biryukov.
With ObjCPropertyDecl, ASTNode.OrigD can be a ObjCPropertyImplDecl which is not a NamedDecl, leading to a crash since the code incorrectly assumes ASTNode.OrigD will always be a NamedDecl. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D56916 Files: clangd/index/SymbolCollector.cpp Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -369,6 +369,10 @@ if (!ID) return true; + // ObjCPropertyDecl may have an OrigD of ObjCPropertyImplDecl, which is + // not a NamedDecl. + if (!isa<NamedDecl>(ASTNode.OrigD)) + return true; const NamedDecl &OriginalDecl = *cast<NamedDecl>(ASTNode.OrigD); const Symbol *BasicSymbol = Symbols.find(*ID); if (!BasicSymbol) // Regardless of role, ND is the canonical declaration.
Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -369,6 +369,10 @@ if (!ID) return true; + // ObjCPropertyDecl may have an OrigD of ObjCPropertyImplDecl, which is + // not a NamedDecl. + if (!isa<NamedDecl>(ASTNode.OrigD)) + return true; const NamedDecl &OriginalDecl = *cast<NamedDecl>(ASTNode.OrigD); const Symbol *BasicSymbol = Symbols.find(*ID); if (!BasicSymbol) // Regardless of role, ND is the canonical declaration.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits