From: Eli Friedman Date: Sun, 26 Apr 2009 01:30:08 +0000 (+0000) Subject: Correct the order of the parameters to CheckAssignmentConstraints in X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5e3e8ec50d6ea481b3bc841dcbe853175d05122;p=clang Correct the order of the parameters to CheckAssignmentConstraints in cleanup attribute checking. The difference isn't normally visible, but it can make a difference... git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70104 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 8843d92c5c..c0a3b44c43 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -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; diff --git a/test/Sema/attr-cleanup.c b/test/Sema/attr-cleanup.c index 69896083f0..0434981c6c 100644 --- a/test/Sema/attr-cleanup.c +++ b/test/Sema/attr-cleanup.c @@ -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; +} +