Skip to content

Raghav/unsupported warn - #61

Merged
raghav198 merged 11 commits into
mainfrom
raghav/unsupported-warn
Sep 1, 2026
Merged

Raghav/unsupported warn#61
raghav198 merged 11 commits into
mainfrom
raghav/unsupported-warn

Conversation

@raghav198

Copy link
Copy Markdown
Collaborator

No description provided.

@raghav198

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e9b3d2954f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +627 to +629
if (auto err = verificationConditions.takeError()) {
llvm::errs() << err << "\n";
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Consume the propagated LLVM error after reporting it

When an unsupported construct reaches this branch in a build with LLVM_ENABLE_ABI_BREAKING_CHECKS enabled, streaming err only logs its payload; it does not consume the llvm::Error. The still-failing error is then destroyed on return and calls fatalUncheckedError(), so the newly supported graceful path aborts instead. Consume it while reporting, for example with llvm::logAllUnhandledErrors(std::move(err), llvm::errs()).

Useful? React with 👍 / 👎.

@raghav198

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 31, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-08-31T15:34:14.317934Z 6c6305f Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c6305fc84

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +557 to +562
.Default([this, &postcondition](auto op) {
auto expression = builder.getExpression(op->getResult(0));
postcondition.substitute(builder.getConstant(op->getResult(0)),
expression);
// The default case is just an expression op, but we shouldn't have to
// do anything here because any places that use the result have already
// called `builder.getExpression()` on the result so there shouldn't be
// anything to substitute.
return llvm::Error::success();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve expressions used as branch conditions

When an scf.if condition is produced by an operation such as bool.cmp rather than supplied as a block argument, calculateWP(scf::IfOp) still records it with builder.getConstant(). Making the default expression-op case a no-op means the defining operation never substitutes that constant with its expression, so the SMT condition becomes an unconstrained Boolean and the solver can select a branch independently of the comparison, producing incorrect verification results. Restore the substitution here or use getExpression() when constructing the branch condition.

Useful? React with 👍 / 👎.

Comment on lines +549 to +553
} else if (!call.calleeIsStructProduct()) {
// Technically a call to @product has already aligned the
// subcomponent values so there's nothing to prove
return llvm::createStringError(
"Unsupported: arbitrary function calls");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Propagate errors before evaluating arbitrary call results

When an unsupported value-returning function call feeds an equality, member write, or another expression, reverse traversal processes that user first and builder.getExpression() enters the function::CallOp handler in TermUtils.cpp, whose ensure still aborts for arbitrary callees. Consequently this new Error branch is never reached for the common case where the call result is used, so those inputs still crash instead of taking the intended graceful unsupported path; unsupported calls need to be detected before expression expansion or represented as a propagated error there as well.

Useful? React with 👍 / 👎.

Comment on lines +73 to +74
void populateVerificationConditions();
cvc5::Term generateVerificationConditions();
llvm::Expected<cvc5::Term> generateVerificationConditions();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove or restore the undefined population API

When downstream code uses the installed WeakestPreconditionAnalysis header and calls populateVerificationConditions(), compilation succeeds but linking now fails because this commit deletes the method's only definition while leaving its public declaration (and associated result fields) intact. Either retain an error-aware implementation or remove the obsolete declaration and state from the public API.

Useful? React with 👍 / 👎.

@raghav198
raghav198 marked this pull request as ready for review August 31, 2026 17:17
@raghav198
raghav198 requested a review from a team as a code owner August 31, 2026 17:17
@tim-hoffman

Copy link
Copy Markdown
Member

@raghav198 it looks like I'm reviewing some of the same changes as https://github.com/project-llzk/LLEQ/pull/60/changes. Could you either change the base branch here or merge the other approved one to main and main to here so I'm not duplicating effort?

@raghav198

Copy link
Copy Markdown
Collaborator Author

@raghav198 it looks like I'm reviewing some of the same changes as https://github.com/project-llzk/LLEQ/pull/60/changes. Could you either change the base branch here or merge the other approved one to main and main to here so I'm not duplicating effort?

Done; I realized there was going to be a lot of merge conflicts between the two so I figured I'd try to resolve those first and merge them into here.

@tim-hoffman tim-hoffman left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@raghav198
raghav198 merged commit 3c8311c into main Sep 1, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants