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!");