From: Douglas Gregor Date: Wed, 22 Apr 2009 20:56:09 +0000 (+0000) Subject: Eliminate Sema::KnownFunctionIDs, so that Sema doesn't end up pulling X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=21e072b7faed62268074664e2b56e37d069200a7;p=clang 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 --- 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()) { // FIXME: We known better than our headers. const_cast(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()) FD->addAttr(::new (Context) FormatAttr("printf", 2, 3)); - break; - - default: - // Unknown function or known function without any attributes to - // add. Do nothing. - break; } }