diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-22 20:56:09 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-22 20:56:09 +0000 |
commit | 21e072b7faed62268074664e2b56e37d069200a7 (patch) | |
tree | 9d1ca71a5f13d75f02a3be4ce45483e615c5c802 | |
parent | 4f5be3b127183f39e055f9cb88a50341d6588025 (diff) |
Eliminate Sema::KnownFunctionIDs, so that Sema doesn't end up pulling
in a bunch of declarations from the PCH file. We're down to loading
very few declarations in Carbon-prefixed "Hello, World!":
*** PCH Statistics:
6/20693 types read (0.028995%)
7/59230 declarations read (0.011818%)
50/44914 identifiers read (0.111324%)
0/32954 statements read (0.000000%)
5/6187 macros read (0.080815%)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69825 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/Sema.cpp | 9 | ||||
-rw-r--r-- | lib/Sema/Sema.h | 15 | ||||
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 20 |
3 files changed, 2 insertions, 42 deletions
diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index 19155b6cc3..a5b30cc72a 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -161,15 +161,6 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, GlobalNewDeleteDeclared(false), CompleteTranslationUnit(CompleteTranslationUnit) { - // Get IdentifierInfo objects for known functions for which we - // do extra checking. - IdentifierTable &IT = PP.getIdentifierTable(); - - KnownFunctionIDs[id_NSLog] = &IT.get("NSLog"); - KnownFunctionIDs[id_NSLogv] = &IT.get("NSLogv"); - KnownFunctionIDs[id_asprintf] = &IT.get("asprintf"); - KnownFunctionIDs[id_vasprintf] = &IT.get("vasprintf"); - StdNamespace = 0; TUScope = 0; if (getLangOptions().CPlusPlus) diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index e8c69c2f5f..5a53374033 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -243,21 +243,6 @@ public: IdentifierResolver IdResolver; - // Enum values used by KnownFunctionIDs (see below). - enum { - id_NSLog, - id_NSLogv, - id_asprintf, - id_vasprintf, - id_num_known_functions - }; - - /// KnownFunctionIDs - This is a list of IdentifierInfo objects to a set - /// of known functions used by the semantic analysis to do various - /// kinds of checking (e.g. checking format string errors in printf calls). - /// This list is populated upon the creation of a Sema object. - IdentifierInfo* KnownFunctionIDs[id_num_known_functions]; - /// 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/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index abde26ae53..040c5467ac 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -3114,31 +3114,15 @@ void Sema::AddKnownFunctionAttributes(FunctionDecl *FD) { } else return; - unsigned KnownID; - for (KnownID = 0; KnownID != id_num_known_functions; ++KnownID) - if (KnownFunctionIDs[KnownID] == Name) - break; - - switch (KnownID) { - case id_NSLog: - case id_NSLogv: + if (Name->isStr("NSLog") || Name->isStr("NSLogv")) { if (const FormatAttr *Format = FD->getAttr<FormatAttr>()) { // FIXME: We known better than our headers. const_cast<FormatAttr *>(Format)->setType("printf"); } else FD->addAttr(::new (Context) FormatAttr("printf", 1, 2)); - break; - - case id_asprintf: - case id_vasprintf: + } else if (Name->isStr("asprintf") || Name->isStr("vasprintf")) { if (!FD->getAttr<FormatAttr>()) FD->addAttr(::new (Context) FormatAttr("printf", 2, 3)); - break; - - default: - // Unknown function or known function without any attributes to - // add. Do nothing. - break; } } |