-
Notifications
You must be signed in to change notification settings - Fork 15k
release/21.x: [analyzer] Drop false asserts in handling assume attribures #155284
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
Conversation
|
@Xazax-hun What do you think about merging this PR to the release branch? |
|
@llvm/pr-subscribers-clang-static-analyzer-1 Author: None (llvmbot) ChangesRequested by: @steakhal Full diff: https://github.com/llvm/llvm-project/pull/155284.diff 2 Files Affected:
diff --git a/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp b/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
index 1e3adb4f266ca..789c7772d123a 100644
--- a/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
@@ -45,7 +45,6 @@ void AssumeModelingChecker::checkPostStmt(const AttributedStmt *A,
continue;
const auto *Assumption = AssumptionVal.getAsInteger();
- assert(Assumption && "We should know the exact outcome of an assume expr");
if (Assumption && Assumption->isZero()) {
C.addSink();
}
diff --git a/clang/test/Analysis/cxx23-assume-attribute.cpp b/clang/test/Analysis/cxx23-assume-attribute.cpp
index 86e7662cd2af9..4cc16446572dc 100644
--- a/clang/test/Analysis/cxx23-assume-attribute.cpp
+++ b/clang/test/Analysis/cxx23-assume-attribute.cpp
@@ -69,3 +69,9 @@ int assume_and_fallthrough_at_the_same_attrstmt(int a, int b) {
return 0;
}
+
+void assume_opaque_gh151854_no_crash() {
+ extern bool opaque();
+ [[assume(opaque())]]; // no-crash
+ // expected-warning@-1 {{assumption is ignored because it contains (potential) side-effects}}
+}
|
|
@llvm/pr-subscribers-clang Author: None (llvmbot) ChangesRequested by: @steakhal Full diff: https://github.com/llvm/llvm-project/pull/155284.diff 2 Files Affected:
diff --git a/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp b/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
index 1e3adb4f266ca..789c7772d123a 100644
--- a/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp
@@ -45,7 +45,6 @@ void AssumeModelingChecker::checkPostStmt(const AttributedStmt *A,
continue;
const auto *Assumption = AssumptionVal.getAsInteger();
- assert(Assumption && "We should know the exact outcome of an assume expr");
if (Assumption && Assumption->isZero()) {
C.addSink();
}
diff --git a/clang/test/Analysis/cxx23-assume-attribute.cpp b/clang/test/Analysis/cxx23-assume-attribute.cpp
index 86e7662cd2af9..4cc16446572dc 100644
--- a/clang/test/Analysis/cxx23-assume-attribute.cpp
+++ b/clang/test/Analysis/cxx23-assume-attribute.cpp
@@ -69,3 +69,9 @@ int assume_and_fallthrough_at_the_same_attrstmt(int a, int b) {
return 0;
}
+
+void assume_opaque_gh151854_no_crash() {
+ extern bool opaque();
+ [[assume(opaque())]]; // no-crash
+ // expected-warning@-1 {{assumption is ignored because it contains (potential) side-effects}}
+}
|
|
Looks great, this is a low risk fix, good idea to backport. |
…nts (llvm#151908) We sometimes don't know if the operand of [[assume]] is true/false, and that's okay. We can just ignore the attribute in that case. If we wanted something more fancy, we could bring the assumption to the constraints, but dropping them should be just as fine for now. Fixes llvm#151854 (cherry picked from commit 0a1eff2)
(cherry picked from commit 6c9f1ce)
Backport 0a1eff2 6c9f1ce
Requested by: steakhal