mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 09:56:05 +00:00
remove the type_info identifier cache. Compared to the cost
of doing the lookup_decl, the hash lookup is cheap. Also, typeid doesn't happen enough in real world code to worry about it. I'd like to eventually get rid of KnownFunctionIDs from Sema also, but today is not that day. llvm-svn: 59711
This commit is contained in:
parent
0e73b2c352
commit
ec7f7732f1
@ -103,9 +103,7 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer)
|
||||
KnownFunctionIDs[id_vsnprintf_chk] = &IT.get("__builtin___vsnprintf_chk");
|
||||
KnownFunctionIDs[id_vprintf] = &IT.get("vprintf");
|
||||
|
||||
Ident_TypeInfo = 0;
|
||||
StdNamespace = 0;
|
||||
|
||||
TUScope = 0;
|
||||
if (getLangOptions().CPlusPlus)
|
||||
FieldCollector.reset(new CXXFieldCollector());
|
||||
|
@ -192,9 +192,6 @@ public:
|
||||
/// This list is populated upon the creation of a Sema object.
|
||||
IdentifierInfo* KnownFunctionIDs[id_num_known_functions];
|
||||
|
||||
/// Identifiers used by the C++ language
|
||||
IdentifierInfo *Ident_TypeInfo; // "type_info" - lazily created
|
||||
|
||||
/// Translation Unit Scope - useful to Objective-C actions that need
|
||||
/// to lookup file scope declarations in the "ordinary" C decl namespace.
|
||||
/// For example, user-defined classes, built-in "id" type, etc.
|
||||
|
@ -55,21 +55,16 @@ Action::ExprResult
|
||||
Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc,
|
||||
bool isType, void *TyOrExpr, SourceLocation RParenLoc) {
|
||||
const NamespaceDecl *StdNs = GetStdNamespace();
|
||||
if (!StdNs) {
|
||||
Diag(OpLoc, diag::err_need_header_before_typeid);
|
||||
return ExprResult(true);
|
||||
}
|
||||
if (!Ident_TypeInfo) {
|
||||
Ident_TypeInfo = &PP.getIdentifierTable().get("type_info");
|
||||
}
|
||||
Decl *TypeInfoDecl = LookupDecl(Ident_TypeInfo,
|
||||
if (!StdNs)
|
||||
return Diag(OpLoc, diag::err_need_header_before_typeid);
|
||||
|
||||
IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info");
|
||||
Decl *TypeInfoDecl = LookupDecl(TypeInfoII,
|
||||
Decl::IDNS_Tag | Decl::IDNS_Ordinary,
|
||||
0, StdNs, /*createBuiltins=*/false);
|
||||
RecordDecl *TypeInfoRecordDecl = dyn_cast_or_null<RecordDecl>(TypeInfoDecl);
|
||||
if (!TypeInfoRecordDecl) {
|
||||
Diag(OpLoc, diag::err_need_header_before_typeid);
|
||||
return ExprResult(true);
|
||||
}
|
||||
if (!TypeInfoRecordDecl)
|
||||
return Diag(OpLoc, diag::err_need_header_before_typeid);
|
||||
|
||||
QualType TypeInfoType = Context.getTypeDeclType(TypeInfoRecordDecl);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user