================ @@ -2064,13 +2064,26 @@ static void handleTLSModelAttr(Sema &S, Decl *D, const ParsedAttr &AL) { static void handleRestrictAttr(Sema &S, Decl *D, const ParsedAttr &AL) { QualType ResultType = getFunctionOrMethodResultType(D); - if (ResultType->isAnyPointerType() || ResultType->isBlockPointerType()) { + if (!ResultType->isAnyPointerType() && !ResultType->isBlockPointerType()) { + S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) + << AL << getFunctionOrMethodResultSourceRange(D); + return; + } + + if (getNumAttributeArgs(AL) == 0) { D->addAttr(::new (S.Context) RestrictAttr(S.Context, AL)); return; } - S.Diag(AL.getLoc(), diag::warn_attribute_return_pointers_only) - << AL << getFunctionOrMethodResultSourceRange(D); + if (AL.getAttributeSpellingListIndex() == RestrictAttr::Declspec_restrict) { + // __declspec(restrict) accepts no arguments + S.Diag(AL.getLoc(), diag::err_attribute_wrong_number_arguments) << AL << 0; + return; + } + + // FIXME: GCC uses [[malloc(my_func)]] to specify a deallocator for the ---------------- aloisklink wrote:
I slightly disagree, since even if we do add support for this attribute, only the Clang analyzer would use it, but I've added a `'malloc' attribute ignored because Clang does not support the one/two argument form` warning in commit https://github.com/llvm/llvm-project/commit/a76561f522f628b0882572f8dabee6f7e4abd5f5. https://github.com/llvm/llvm-project/pull/68059 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits