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
This commit is contained in:
Eli Friedman 2009-04-26 01:30:08 +00:00
Родитель 259a565e3c
Коммит d5e3e8ec50
2 изменённых файлов: 8 добавлений и 1 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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;
}