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 19155b6..a5b30cc 100644
--- a/lib/Sema/Sema.cpp
+++ b/lib/Sema/Sema.cpp
@@ -161,15 +161,6 @@
     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 e8c69c2..5a53374 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -243,21 +243,6 @@
 
   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 abde26a..040c546 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -3114,31 +3114,15 @@
   } 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;
   }
 }