Add more intrinsics. We can now correctly parse both Carbon.h and Cocoa.h without having to do -arch ppc.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44392 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/Builtins.cpp b/AST/Builtins.cpp
index 137f4ea..238c96a 100644
--- a/AST/Builtins.cpp
+++ b/AST/Builtins.cpp
@@ -55,7 +55,8 @@
 
 /// DecodeTypeFromStr - This decodes one type descriptor from Str, advancing the
 /// pointer over the consumed characters.  This returns the resultant type.
-static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context) {
+static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context, 
+                                  bool AllowTypeModifiers = true) {
   // Modifiers.
   bool Long = false, LongLong = false, Signed = false, Unsigned = false;
   
@@ -149,16 +150,19 @@
     
     Str = End;
     
-    QualType ElementType = DecodeTypeFromStr(Str, Context);
+    QualType ElementType = DecodeTypeFromStr(Str, Context, false);
     Type = Context.getVectorType(ElementType, NumElements);
     break;
   }
   }
   
+  if (!AllowTypeModifiers)
+    return Type;
+  
   Done = false;
   while (!Done) {
     switch (*Str++) {
-      default: Done = true; --Str; break; 
+      default: Done = true; --Str; break;
       case '*':
         Type = Context.getPointerType(Type);
         break;
@@ -183,8 +187,8 @@
   
   QualType ResType = DecodeTypeFromStr(TypeStr, Context);
   while (TypeStr[0] && TypeStr[0] != '.')
-    ArgTypes.push_back(DecodeTypeFromStr(TypeStr, Context));
-  
+    ArgTypes.push_back(DecodeTypeFromStr(TypeStr, Context)); 
+
   assert((TypeStr[0] != '.' || TypeStr[1] == 0) &&
          "'.' should only occur at end of builtin type list!");