-
Notifications
You must be signed in to change notification settings - Fork 15.5k
[clang][-Wunsafe-buffer-usage] Ignore consteval functions #171503
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
We dont need to visit or warn on consteval functions as they can't have UB.
|
@llvm/pr-subscribers-clang-analysis @llvm/pr-subscribers-clang Author: Max (mxms0) ChangesWe dont need to visit or warn on consteval functions as they can't have UB. Full diff: https://github.com/llvm/llvm-project/pull/171503.diff 2 Files Affected:
diff --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp
index da155d31d4a88..893462e3bad58 100644
--- a/clang/lib/Analysis/UnsafeBufferUsage.cpp
+++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp
@@ -4458,6 +4458,11 @@ void clang::checkUnsafeBufferUsage(const Decl *D,
SmallVector<Stmt *> Stmts;
if (const auto *FD = dyn_cast<FunctionDecl>(D)) {
+ // Consteval functions are free of UB by the spec, so we don't need to
+ // visit them or produce diagnostics.
+ if (FD->isConsteval()) {
+ return;
+ }
// We do not want to visit a Lambda expression defined inside a method
// independently. Instead, it should be visited along with the outer method.
// FIXME: do we want to do the same thing for `BlockDecl`s?
diff --git a/clang/test/SemaCXX/warn-unsafe-buffer-usage.cpp b/clang/test/SemaCXX/warn-unsafe-buffer-usage.cpp
index 41d38ada48788..6fad7585026f2 100644
--- a/clang/test/SemaCXX/warn-unsafe-buffer-usage.cpp
+++ b/clang/test/SemaCXX/warn-unsafe-buffer-usage.cpp
@@ -406,4 +406,11 @@ void testMultiLineDeclStmt(int * p) {
foo(ap1[1]); // expected-note{{used in buffer access here}}
}
+#if __cplusplus >= 202002L
+consteval void testConstevalPtrArithmetic(int idx) {
+ int y[3] = {0, 1, 2};
+ foo(y[idx]);
+}
+#endif
+
#endif
|
🐧 Linux x64 Test Results
✅ The build succeeded and all tests passed. |
🪟 Windows x64 Test Results
✅ The build succeeded and all tests passed. |
We dont need to visit or warn on consteval functions as they can't have UB.
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
|
nit: add |
Done :) |
We dont need to visit or warn on consteval functions as they can't have UB.