diff --git a/clang-tools-extra/clang-tidy/misc/ConstCorrectnessCheck.cpp b/clang-tools-extra/clang-tidy/misc/ConstCorrectnessCheck.cpp index b93f3d6a5a13b..8c25e928667df 100644 --- a/clang-tools-extra/clang-tidy/misc/ConstCorrectnessCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/ConstCorrectnessCheck.cpp @@ -249,7 +249,8 @@ void ConstCorrectnessCheck::check(const MatchFinder::MatchResult &Result) { CheckValue(); if (WarnPointersAsPointers) { if (const auto *PT = dyn_cast(VT)) { - if (!PT->getPointeeType().isConstQualified()) + if (!PT->getPointeeType().isConstQualified() && + !PT->getPointeeType()->isFunctionType()) CheckPointee(); } if (const auto *AT = dyn_cast(VT)) { diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 7e836a7114d50..512527abf608a 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -321,6 +321,10 @@ Changes in existing checks - Improved :doc:`misc-header-include-cycle ` check performance. +- Improved :doc:`misc-const-correctness + ` check by fixing false positives + of function pointer. + - Improved :doc:`modernize-avoid-c-arrays ` to not diagnose array types which are part of an implicit instantiation of a template. diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/const-correctness-pointer-as-pointers.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/const-correctness-pointer-as-pointers.cpp index 2ef47266b02b0..c2c939b9ba32e 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc/const-correctness-pointer-as-pointers.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc/const-correctness-pointer-as-pointers.cpp @@ -48,3 +48,7 @@ void ignore_const_alias() { p_local0 = &a[1]; } +void function_pointer_basic() { + void (*const fp)() = nullptr; + fp(); +}