Index: clang-tidy/readability/AvoidConstParamsInDecls.cpp =================================================================== --- clang-tidy/readability/AvoidConstParamsInDecls.cpp +++ clang-tidy/readability/AvoidConstParamsInDecls.cpp @@ -31,7 +31,8 @@ void AvoidConstParamsInDecls::registerMatchers(MatchFinder *Finder) { const auto ConstParamDecl = - parmVarDecl(hasType(qualType(isConstQualified()))).bind("param"); + parmVarDecl(hasType(qualType(isConstQualified())), + unless(hasAttr(clang::attr::PassObjectSize))).bind("param"); Finder->addMatcher(functionDecl(unless(isDefinition()), has(typeLoc(forEach(ConstParamDecl)))) .bind("func"), Index: test/clang-tidy/readability-avoid-const-params-in-decls.cpp =================================================================== --- test/clang-tidy/readability-avoid-const-params-in-decls.cpp +++ test/clang-tidy/readability-avoid-const-params-in-decls.cpp @@ -65,6 +65,8 @@ void NF6(const int *const) {} void NF7(int, const int) {} void NF8(const int, const int) {} +// pass_object_size requires a const pointer param in definitions. +void NF9(const char *const __attribute__((pass_object_size(0)))) {} // Do not match on other stuff void NF(const alias_type& i); @@ -76,3 +78,6 @@ void NF(const int*); void NF(const int* const*); void NF(alias_const_type); +// While pass_object_size only requires a const pointer param in definitions, +// it's probably best to not complain at users for using it in a decl. +void NF(const char *const __attribute__((pass_object_size(0))));