Skip to content

[analyzer] Drop assertion enforcing that assume args are known constants #151908

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

steakhal
Copy link
Contributor

@steakhal steakhal commented Aug 4, 2025

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 #151854

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.
@llvmbot llvmbot added the clang Clang issues not falling into any other category label Aug 4, 2025
@llvmbot
Copy link
Member

llvmbot commented Aug 4, 2025

@llvm/pr-subscribers-clang

@llvm/pr-subscribers-clang-static-analyzer-1

Author: Balazs Benics (steakhal)

Changes

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 #151854


Full diff: https://github.com/llvm/llvm-project/pull/151908.diff

2 Files Affected:

  • (modified) clang/lib/StaticAnalyzer/Checkers/AssumeModeling.cpp (-1)
  • (modified) clang/test/Analysis/cxx23-assume-attribute.cpp (+5)
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..dd15ff5d43505 100644
--- a/clang/test/Analysis/cxx23-assume-attribute.cpp
+++ b/clang/test/Analysis/cxx23-assume-attribute.cpp
@@ -69,3 +69,8 @@ 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
+}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang:static analyzer clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[analyzer] Assertion `Assumption && "We should know the exact outcome of an assume expr"' failed.
3 participants