[clang-tools-extra] 6993798 - [clang-tidy] Ignore unevaluated context in bugprone-optional-value-conversion (#90410)
via cfe-commits
cfe-commits at lists.llvm.org
Mon May 13 11:41:46 PDT 2024
Author: Piotr Zegar
Date: 2024-05-13T20:41:42+02:00
New Revision: 69937982dbdd73172ec06580f6f93616edca8e9e
URL: https://github.com/llvm/llvm-project/commit/69937982dbdd73172ec06580f6f93616edca8e9e
DIFF: https://github.com/llvm/llvm-project/commit/69937982dbdd73172ec06580f6f93616edca8e9e.diff
LOG: [clang-tidy] Ignore unevaluated context in bugprone-optional-value-conversion (#90410)
Ignore optionals in unevaluated context, like static_assert or decltype.
Closes #89593
Added:
Modified:
clang-tools-extra/clang-tidy/bugprone/OptionalValueConversionCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/bugprone/optional-value-conversion.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/bugprone/OptionalValueConversionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/OptionalValueConversionCheck.cpp
index 9ab59e6b0474f..600eab3755276 100644
--- a/clang-tools-extra/clang-tidy/bugprone/OptionalValueConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/OptionalValueConversionCheck.cpp
@@ -71,7 +71,9 @@ void OptionalValueConversionCheck::registerMatchers(MatchFinder *Finder) {
ofClass(matchers::matchesAnyListedName(OptionalTypes)))),
hasType(ConstructTypeMatcher),
hasArgument(0U, ignoringImpCasts(anyOf(OptionalDereferenceMatcher,
- StdMoveCallMatcher))))
+ StdMoveCallMatcher))),
+ unless(anyOf(hasAncestor(typeLoc()),
+ hasAncestor(expr(matchers::hasUnevaluatedContext())))))
.bind("expr"),
this);
}
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8183d394cf425..8c76f5f60ee3e 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -204,6 +204,10 @@ Changes in existing checks
eliminating false positives resulting from direct usage of bitwise operators
within parentheses.
+- Improved :doc:`bugprone-optional-value-conversion
+ <clang-tidy/checks/bugprone/optional-value-conversion>` check by eliminating
+ false positives resulting from use of optionals in unevaluated context.
+
- Improved :doc:`bugprone-suspicious-include
<clang-tidy/checks/bugprone/suspicious-include>` check by replacing the local
options `HeaderFileExtensions` and `ImplementationFileExtensions` by the
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/optional-value-conversion.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/optional-value-conversion.cpp
index 72ef35c956d2e..1228d64bb6909 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/optional-value-conversion.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/optional-value-conversion.cpp
@@ -210,4 +210,6 @@ void correct(std::optional<int> param)
std::optional<long>* p2 = &p;
takeOptionalValue(p2->value_or(5U));
takeOptionalRef(p2->value_or(5U));
+
+ using Type = decltype(takeOptionalValue(*param));
}
More information about the cfe-commits
mailing list