forked from OSchip/llvm-project
Fixe bogus error for variable argument methods. Sema::ObjcGetTypeForMethodDefinition() wasn't preserving the isVariadic boolean. Another fix is to avoid synthsizing the function decl entirely, however this is a separate issue that I don't want to deal with now. Also added a FIXME to Sema::CheckFunctionCall(), which is currently emitting a bogus warning.
llvm-svn: 45146
This commit is contained in:
parent
aa5c91980e
commit
b74406ba98
|
@ -62,7 +62,7 @@ Sema::CheckFunctionCall(Expr *Fn,
|
|||
diag::err_va_start_used_in_non_variadic_function);
|
||||
return true;
|
||||
}
|
||||
|
||||
// FIXME: This isn't correct for methods (results in bogus warning).
|
||||
bool SecondArgIsLastNamedArgument = false;
|
||||
if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Args[1])) {
|
||||
if (ParmVarDecl *PV = dyn_cast<ParmVarDecl>(DR->getDecl())) {
|
||||
|
|
|
@ -366,7 +366,7 @@ QualType Sema::ObjcGetTypeForMethodDefinition(DeclTy *D) {
|
|||
ArgTys.push_back(ArgTy);
|
||||
}
|
||||
T = Context.getFunctionType(T, &ArgTys[0], ArgTys.size(),
|
||||
false);
|
||||
MDecl->isVariadic());
|
||||
return T;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@interface NSObject @end
|
||||
@interface XX : NSObject @end
|
||||
|
||||
@implementation XX
|
||||
- (void)encodeValuesOfObjCTypes:(const char *)types, ... {
|
||||
va_list ap;
|
||||
va_start(ap, types); // expected-warning {{second parameter of 'va_start' not last named argument}}
|
||||
while (*types) ;
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
@end
|
||||
|
Loading…
Reference in New Issue