Correct the order of the parameters to CheckAssignmentConstraints in

cleanup attribute checking.  The difference isn't normally visible, but it
can make a difference...

llvm-svn: 70104
This commit is contained in:
Eli Friedman 2009-04-26 01:30:08 +00:00
parent 885db54671
commit bd0e67362c
2 changed files with 8 additions and 1 deletions

View File

@ -1013,7 +1013,7 @@ static void HandleCleanupAttr(Decl *d, const AttributeList &Attr, Sema &S) {
// If this ever proves to be a problem it should be easy to fix.
QualType Ty = S.Context.getPointerType(VD->getType());
QualType ParamTy = FD->getParamDecl(0)->getType();
if (S.CheckAssignmentConstraints(Ty, ParamTy) != Sema::Compatible) {
if (S.CheckAssignmentConstraints(ParamTy, Ty) != Sema::Compatible) {
S.Diag(Attr.getLoc(),
diag::err_attribute_cleanup_func_arg_incompatible_type) <<
Attr.getParameterName() << ParamTy << Ty;

View File

@ -31,3 +31,10 @@ void t2()
int v1 __attribute__((cleanup(c2))); // expected-error {{'cleanup' function 'c2' must take 1 parameter}}
int v2 __attribute__((cleanup(c3))); // expected-error {{'cleanup' function 'c3' parameter has type 'struct s' which is incompatible with type 'int *'}}
}
// This is a manufactured testcase, but gcc accepts it...
void c4(_Bool a);
void t4() {
__attribute((cleanup(c4))) void* g;
}