mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 03:56:16 +08:00
Add FunctionDecl::isVariadic() to match BlockDecl::isVariadic() and ObjCMethodDecl::isVariadic().
Do some minor refactoring along the way. llvm-svn: 102635
This commit is contained in:
@@ -1138,6 +1138,9 @@ public:
|
||||
void setBody(Stmt *B);
|
||||
void setLazyBody(uint64_t Offset) { Body = Offset; }
|
||||
|
||||
/// Whether this function is variadic.
|
||||
bool isVariadic() const;
|
||||
|
||||
/// Whether this function is marked as virtual explicitly.
|
||||
bool isVirtualAsWritten() const { return IsVirtualAsWritten; }
|
||||
void setVirtualAsWritten(bool V) { IsVirtualAsWritten = V; }
|
||||
|
||||
@@ -906,6 +906,12 @@ void FunctionDecl::getNameForDiagnostic(std::string &S,
|
||||
|
||||
}
|
||||
|
||||
bool FunctionDecl::isVariadic() const {
|
||||
if (const FunctionProtoType *FT = getType()->getAs<FunctionProtoType>())
|
||||
return FT->isVariadic();
|
||||
return false;
|
||||
}
|
||||
|
||||
Stmt *FunctionDecl::getBody(const FunctionDecl *&Definition) const {
|
||||
for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
|
||||
if (I->Body) {
|
||||
|
||||
@@ -511,15 +511,10 @@ bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) {
|
||||
bool isVariadic;
|
||||
if (CurBlock)
|
||||
isVariadic = CurBlock->isVariadic;
|
||||
else if (getCurFunctionDecl()) {
|
||||
if (FunctionProtoType* FTP =
|
||||
dyn_cast<FunctionProtoType>(getCurFunctionDecl()->getType()))
|
||||
isVariadic = FTP->isVariadic();
|
||||
else
|
||||
isVariadic = false;
|
||||
} else {
|
||||
else if (FunctionDecl *FD = getCurFunctionDecl())
|
||||
isVariadic = FD->isVariadic();
|
||||
else
|
||||
isVariadic = getCurMethodDecl()->isVariadic();
|
||||
}
|
||||
|
||||
if (!isVariadic) {
|
||||
Diag(Fn->getLocStart(), diag::err_va_start_used_in_non_variadic_function);
|
||||
|
||||
Reference in New Issue
Block a user