summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-11-20 05:51:55 +0000
committerChris Lattner <sabre@nondot.org>2008-11-20 05:51:55 +0000
commitec7f7732f1475c706765973f5ef9348c2e453aaa (patch)
tree5ce86efbb3915d3fff481151c9f040509d4d7426 /clang/lib/Sema
parent0e73b2c352ec6de56973fc84a5f82199d75b7df1 (diff)
downloadbcm5719-llvm-ec7f7732f1475c706765973f5ef9348c2e453aaa.tar.gz
bcm5719-llvm-ec7f7732f1475c706765973f5ef9348c2e453aaa.zip
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
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/Sema.cpp2
-rw-r--r--clang/lib/Sema/Sema.h3
-rw-r--r--clang/lib/Sema/SemaExprCXX.cpp19
3 files changed, 7 insertions, 17 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index e1eb86c98fa..c9e4cd98338 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -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());
diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h
index 7840dec5e7c..52610ef6b78 100644
--- a/clang/lib/Sema/Sema.h
+++ b/clang/lib/Sema/Sema.h
@@ -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.
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 0186fc3f145..80bd8eeef37 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -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);
OpenPOWER on IntegriCloud