summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/AST/Builtins.cpp16
-rw-r--r--clang/include/clang/AST/Builtins.def1
2 files changed, 14 insertions, 3 deletions
diff --git a/clang/AST/Builtins.cpp b/clang/AST/Builtins.cpp
index 454085bf2a5..099b1138d02 100644
--- a/clang/AST/Builtins.cpp
+++ b/clang/AST/Builtins.cpp
@@ -88,7 +88,7 @@ static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context) {
switch (*Str++) {
default: assert(0 && "Unknown builtin type letter!");
case 'v':
- assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'f'!");
+ assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'v'!");
return Context.VoidTy;
case 'f':
assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'f'!");
@@ -103,7 +103,14 @@ static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context) {
if (Unsigned)
return Context.UnsignedShortTy;
return Context.ShortTy;
- //case 'i':
+ case 'i':
+ if (Long)
+ return Unsigned ? Context.UnsignedLongTy : Context.LongTy;
+ if (LongLong)
+ return Unsigned ? Context.UnsignedLongLongTy : Context.LongLongTy;
+ if (Unsigned)
+ return Context.UnsignedIntTy;
+ return Context.IntTy; // default is signed.
}
}
@@ -119,7 +126,10 @@ QualType Builtin::Context::GetBuiltinType(unsigned id, ASTContext &Context)const
assert((TypeStr[0] != '.' || TypeStr[1] == 0) &&
"'.' should only occur at end of builtin type list!");
-
+
+ // handle untyped/variadic arguments "T c99Style();" or "T cppStyle(...);".
+ if (ArgTypes.size() == 0 && TypeStr[0] == '.')
+ return Context.getFunctionTypeNoProto(ResType);
return Context.getFunctionType(ResType, &ArgTypes[0], ArgTypes.size(),
TypeStr[0] == '.');
}
diff --git a/clang/include/clang/AST/Builtins.def b/clang/include/clang/AST/Builtins.def
index 97431da9512..2a5a8c76a86 100644
--- a/clang/include/clang/AST/Builtins.def
+++ b/clang/include/clang/AST/Builtins.def
@@ -49,5 +49,6 @@ BUILTIN(__builtin_fabs , "dd" , "nc")
BUILTIN(__builtin_fabsf, "ff" , "nc")
BUILTIN(__builtin_fabsl, "LdLd", "nc")
BUILTIN(__builtin_constant_p, "UsUs", "nc")
+BUILTIN(__builtin_classify_type, "i.", "nc")
#undef BUILTIN
OpenPOWER on IntegriCloud