forked from OSchip/llvm-project
Add support for __builtin_classify_type(). This builtin function isn't "public", however
it is used by "tgmath.h" (so we need to support it). It might also come in handy when developing the overloaded function macros for OpenCU. Next check-in will make this an integer constant expression... llvm-svn: 40930
This commit is contained in:
parent
5ebb2fed89
commit
4bc57c0de7
|
@ -88,7 +88,7 @@ static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context) {
|
||||||
switch (*Str++) {
|
switch (*Str++) {
|
||||||
default: assert(0 && "Unknown builtin type letter!");
|
default: assert(0 && "Unknown builtin type letter!");
|
||||||
case 'v':
|
case 'v':
|
||||||
assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'f'!");
|
assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'v'!");
|
||||||
return Context.VoidTy;
|
return Context.VoidTy;
|
||||||
case 'f':
|
case 'f':
|
||||||
assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'f'!");
|
assert(!Long && !Signed && !Unsigned && "Bad modifiers used with 'f'!");
|
||||||
|
@ -103,7 +103,14 @@ static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context) {
|
||||||
if (Unsigned)
|
if (Unsigned)
|
||||||
return Context.UnsignedShortTy;
|
return Context.UnsignedShortTy;
|
||||||
return Context.ShortTy;
|
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) &&
|
assert((TypeStr[0] != '.' || TypeStr[1] == 0) &&
|
||||||
"'.' should only occur at end of builtin type list!");
|
"'.' 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(),
|
return Context.getFunctionType(ResType, &ArgTypes[0], ArgTypes.size(),
|
||||||
TypeStr[0] == '.');
|
TypeStr[0] == '.');
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,5 +49,6 @@ BUILTIN(__builtin_fabs , "dd" , "nc")
|
||||||
BUILTIN(__builtin_fabsf, "ff" , "nc")
|
BUILTIN(__builtin_fabsf, "ff" , "nc")
|
||||||
BUILTIN(__builtin_fabsl, "LdLd", "nc")
|
BUILTIN(__builtin_fabsl, "LdLd", "nc")
|
||||||
BUILTIN(__builtin_constant_p, "UsUs", "nc")
|
BUILTIN(__builtin_constant_p, "UsUs", "nc")
|
||||||
|
BUILTIN(__builtin_classify_type, "i.", "nc")
|
||||||
|
|
||||||
#undef BUILTIN
|
#undef BUILTIN
|
||||||
|
|
Loading…
Reference in New Issue