Skip to content

Go: migrate control flow graph to shared CFG library#21614

Draft
Copilot wants to merge 34 commits into
mainfrom
copilot/vscode-mndb17m3-9fpv
Draft

Go: migrate control flow graph to shared CFG library#21614
Copilot wants to merge 34 commits into
mainfrom
copilot/vscode-mndb17m3-9fpv

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 30, 2026

Adopts the shared codeql/controlflow library for Go's CFG implementation, replacing the bespoke ControlFlowGraphImpl.qll (2133 lines) with a shared-library instantiation.

Core architecture changes

  • ControlFlowGraphShared.qll (new): Instantiates CfgLib::Make0/Make1/Make2 with Go-specific Ast and Input modules. Wraps everything in GoCfg to isolate from the old API during transition.
  • ControlFlowGraph.qll: ControlFlow::Node now extends GoCfg::ControlFlowNode instead of the old TControlFlowNode newtype.
  • BasicBlocks.qll: BasicBlock aliased to GoCfg::Cfg::BasicBlock.
  • IR.qll: All 30+ instruction classes rewritten to identify themselves via isAdditional/isIn/isBefore/isAfter predicates instead of Mk* newtype constructors.
  • Removed ControlFlowGraphImpl.qll: fully superseded.

File-level CFG roots

Unlike Java, Go has AST nodes (e.g. top-level var, const, type declarations) that are not inside any function definition. To preserve CFG coverage for these nodes, Callable includes both FuncDefs with bodies and Files with declarations. getEnclosingCallable falls back to node.getFile() for nodes not inside any function, and ControlFlow::Root includes Files with declarations — matching the behavior of the old ControlFlowGraphImpl.qll.

Function prologue/epilogue routing

Changed callableGetBody(c) = c (instead of c.getBody()) so the shared library routes Entry(fd) → Before(fd), allowing funcDefStep to insert prologue and epilogue nodes:

  • Prologue: Before(fd)arg:iparam-init:i (per parameter) → result-zero-init:jresult-init:j (per result var) → Before(body)
  • Epilogue: After(body)result-read:j (per result var) → After(fd)NormalExit

This makes InitParameterInstruction and related classes reachable in the CFG, which is required for SSA and data flow (e.g., SsaParameterNode via IR::initParamInstruction).

Implicit promoted-field reads

Fixed selectorExprStep to route through implicit-field:i additional nodes for promoted field accesses, making ImplicitFieldReadInstruction reachable. The chain descends from the outermost embedded field (highest index) to the innermost (index 1) before reaching In(sel):

After(base) → implicit-field:N → implicit-field:N-1 → ... → implicit-field:1 → In(sel)

Minor fixes

  • SsaImpl.qll: cast bb.getNode(i) to ControlFlow::Node before calling isEntryNode().
  • Revel.qll: use getBaseInstruction() instead of the removed getBase() on ImplicitFieldReadInstruction.
Original prompt

Continue

[Chronological Review: The conversation began with the user requesting a list of commits merged as part of a specific commit hash (e695477). Following that, the user asked to adopt a new shared CFG library for Go based on those commits. The user then prompted to "Continue to iterate?" multiple times, indicating a desire to progress with the implementation. The user also requested to "Do phase 2 now," suggesting a structured approach to the work. Throughout the conversation, there were indications of changes made to specific files, which required checking the current contents before proceeding with edits.]

[Intent Mapping:

  1. "List commits merged as part of e695477" - User wants to understand changes related to a specific commit.
  2. "Using those commits as a guideline, adopt the new shared CFG library for go." - User aims to implement a new library based on previous changes.
  3. "Continue to iterate?" - User is seeking confirmation to proceed with ongoing work.
  4. "Do phase 2 now" - User indicates a structured approach to the project, moving to the next phase.
  5. "Continue" - User is prompting to keep the workflow moving forward.]

[Technical Inventory:

  • Tools: GitHub CodeQL for code analysis and semantic search for code understanding.
  • Files:
    • IR.qll - Current working file for implementing changes.
    • ControlFlowGraph.qll and ControlFlowGraphShared.qll - Files mentioned as having recent edits that need to be checked before further modifications.]

[Code Archaeology:

  • The user has been working on the IR.qll file, which is part of the Go control flow library. The user has also referenced changes in ControlFlowGraph.qll and ControlFlowGraphShared.qll, indicating ongoing modifications in these files.]

[Progress Assessment:

  • Completed Tasks: User has successfully identified the need to adopt a new CFG library and has made edits to relevant files.
  • Partially Complete Work: The user is in the process of implementing changes based on the commits and is iterating through the implementation phases.]

[Context Validation: All critical information for continuation is captured, including the need to check file contents before making edits and the structured approach to the project.]

[Recent Commands Analysis:

  • Last Agent Commands: The user repeatedly requested to "Continue" and "Continue to iterate?" indicating a desire to keep progressing with the implementation.
  • Tool Results Summary: No specific tool results were returned in the recent commands, but the user has been actively engaged in modifying files and seeking to implement changes.
  • Pre-Summary State: The agent was actively working on the IR.qll file and responding to user prompts to continue the workflow.
  • Operation Context: The commands executed were directly related to the user's goal of adopting a new CFG library and iterating through the implementation process.]
1. Conversation Overview: - Primary Objectives: - "List commits merged as part of e695477" - Understanding changes related to a specific commit. - "Using those commits as a guideline, adopt the new shared CFG library for go." - Implementing a new library based on previous changes. - "Continue to iterate?" - Seeking confirmation to proceed with ongoing work. - "Do phase 2 now" - Moving to the next phase of the project. - Session Context: The conversation has focused on implementing changes to the Go control flow library, with multiple requests to continue iterating on the work. - User Intent Evolution: The user has consistently sought to progress through the implementation phases, indicating a structured approach to the project.
  1. Technical Foundation:
  • GitHub CodeQL: A tool for code analysis being used to facilitate the implementation of changes.
  • Files:
    • IR.qll: The current working file for implementing changes.
    • ControlFlowGraph.qll and ControlFlowGraphShared.qll: Files mentioned as having recent edits that need to be checked.
  1. Codebase Status:
  • IR.qll:
    • Purpose: Central file for implementing the new CFG library.
    • Current State: User is actively working on this file.
    • Key Code Segments: Specific functions or classes were not detailed in the conversation.
    • Dependencies: Relates to the overall control flow implementation in Go.
  • ControlFlowGraph.qll and ControlFlowGraphShared.qll:
    • Purpose: Supporting files for the control flow library.
    • Current State: Recent edits made, requiring review before further changes.
  1. Problem Resolution:
  • Issues Encountered: Need to check file contents before making edits due to recent changes.
  • Solutions Implemented: User has been iterating through the implementation process.
  • Debugging Context: No specific debugging issues were mentioned, but the user is cautious about recent changes.
  • Lessons Learned: Importance of reviewing file changes before proceeding with edits.
  1. Progress Tracking:
  • Completed Tasks: User has identified the need for ...

Created from VS Code.

Copilot AI changed the title [WIP] Implement adoption of new shared CFG library for Go Go: migrate control flow graph to shared CFG library Mar 30, 2026
Copilot AI requested a review from owen-mc March 30, 2026 15:37
Copy link
Copy Markdown

@github-advanced-security github-advanced-security AI left a comment

Choose a reason for hiding this comment

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

CodeQL found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

@owen-mc
Copy link
Copy Markdown
Contributor

owen-mc commented Mar 31, 2026

@copilot Please fix the following errors from the compiler:

WARNING: test is always true, as Expr is a supertype of the expression type Expr::Expr (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:179,55-59)
WARNING: test is always true, as the expression already has type Expr::Expr (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:179,55-59)
WARNING: test is always true, as FuncDecl is a supertype of the expression type Decls::FuncDecl (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:781,68-76)
WARNING: test is always true, as the expression already has type Decls::FuncDecl (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:781,68-76)
WARNING: predicate declaration 'implicitFieldSelection' does not implement a signature member, so it should be marked 'additional' (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:527,15-37)
ERROR: empty relation: call to isIn (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:29,40-44)
ERROR: empty relation: call to isIn (/home/runner/work/codeql/codeql/merge/go/ql/lib/semmle/go/controlflow/IR.qll:31,41-45)

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 31, 2026

@copilot Please fix the following errors from the compiler:

WARNING: test is always true, as Expr is a supertype of the expression type Expr::Expr (/home/runner/work/codeql/codeq...

Fixed in 1db6bac:

  • ERROR (IR.qll:29,31): Removed redundant not this.isIn(_) guards from Instruction and ConditionGuardInstruction. isAfterTrue/isAfterFalse are TAfterValueNode while isIn is TAstNode — different newtype branches that can never overlap.
  • WARNING (IR.qll:179): Removed e instanceof Expre is already typed as Expr.
  • WARNING (IR.qll:781): Removed fd instanceof FuncDeclfd is already typed as FuncDecl.
  • WARNING (ControlFlowGraphShared.qll:527): Marked implicitFieldSelection as additional since it doesn't implement a signature member.

@owen-mc
Copy link
Copy Markdown
Contributor

owen-mc commented Mar 31, 2026

@copilot Unlike java, go has AST nodes which aren't in a function definition, so we have to allow ControlFlow::Root to include Files which have any declarations in them. This is how it worked in the code that you removed. Please fix it.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 31, 2026

@copilot Unlike java, go has AST nodes which aren't in a function definition, so we have to allow ControlFlow::Root to include Files which have any declarations in them. This is ho...

Fixed in c0a59ad. Callable now includes Files with declarations, getEnclosingCallable falls back to node.getFile() for nodes not inside any function, and Root in ControlFlowGraph.qll matches with the same isRootOf logic as the old code.

@owen-mc
Copy link
Copy Markdown
Contributor

owen-mc commented Mar 31, 2026

@copilot Please fix these warnings, as long as they are in go code and not shared libraries.

Warning: Missing QLdoc for member-predicate IR::IR::ImplicitFieldReadInstruction::getBaseInstruction/0
Warning: Missing QLdoc for member-predicate IR::IR::MethodReadInstruction::getReceiver/0
Warning: Missing QLdoc for member-predicate IR::IR::MethodReadInstruction::getMethod/0
Warning: Missing QLdoc for member-predicate IR::IR::ElementReadInstruction::getIndex/0
Warning: Missing QLdoc for member-predicate IR::IR::SliceInstruction::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::SliceInstruction::getLow/0
Warning: Missing QLdoc for member-predicate IR::IR::SliceInstruction::getHigh/0
Warning: Missing QLdoc for member-predicate IR::IR::SliceInstruction::getMax/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteInstruction::getLhs/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteInstruction::isInitialization/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteInstruction::getRhs/0
Warning: Missing QLdoc for member-predicate IR::IR::InitLiteralComponentInstruction::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::InitLiteralStructFieldInstruction::getFieldName/0
Warning: Missing QLdoc for member-predicate IR::IR::InitLiteralStructFieldInstruction::getField/0
Warning: Missing QLdoc for member-predicate IR::IR::InitLiteralElementInstruction::getIndex/0
Warning: Missing QLdoc for class IR::IR::InitLiteralArrayElementInstruction
Warning: Missing QLdoc for class IR::IR::InitLiteralSliceElementInstruction
Warning: Missing QLdoc for class IR::IR::InitLiteralMapElementInstruction
Warning: Missing QLdoc for class IR::IR::FieldWriteInstruction
Warning: Missing QLdoc for member-predicate IR::IR::FieldWriteInstruction::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::FieldWriteInstruction::getField/0
Warning: Missing QLdoc for class IR::IR::ElementWriteInstruction
Warning: Missing QLdoc for member-predicate IR::IR::ElementWriteInstruction::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::ElementWriteInstruction::getIndex/0
Warning: Missing QLdoc for class IR::IR::EvalCompoundAssignRhsInstruction
Warning: Missing QLdoc for member-predicate IR::IR::EvalCompoundAssignRhsInstruction::getAssignment/0
Warning: Missing QLdoc for class IR::IR::ExtractTupleElementInstruction
Warning: Missing QLdoc for member-predicate IR::IR::ExtractTupleElementInstruction::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::ExtractTupleElementInstruction::extractsElement/2
Warning: Missing QLdoc for class IR::IR::EvalImplicitInitInstruction
Warning: Missing QLdoc for class IR::IR::DeclareFunctionInstruction
Warning: Missing QLdoc for class IR::IR::DeferInstruction
Warning: Missing QLdoc for class IR::IR::GoInstruction
Warning: Missing QLdoc for class IR::IR::IncDecInstruction
Warning: Missing QLdoc for class IR::IR::EvalIncDecRhsInstruction
Warning: Missing QLdoc for member-predicate IR::IR::EvalIncDecRhsInstruction::getStmt/0
Warning: Missing QLdoc for class IR::IR::EvalImplicitOneInstruction
Warning: Missing QLdoc for member-predicate IR::IR::EvalImplicitOneInstruction::getStmt/0
Warning: Missing QLdoc for class IR::IR::ReturnInstruction
Warning: Missing QLdoc for member-predicate IR::IR::ReturnInstruction::getReturnStmt/0
Warning: Missing QLdoc for member-predicate IR::IR::ReturnInstruction::returnsMultipleResults/0
Warning: Missing QLdoc for member-predicate IR::IR::ReturnInstruction::getResult/0
Warning: Missing QLdoc for member-predicate IR::IR::ReturnInstruction::getResult/1
Warning: Missing QLdoc for class IR::IR::WriteResultInstruction
Warning: Missing QLdoc for member-predicate IR::IR::WriteResultInstruction::getResultVariable/0
Warning: Missing QLdoc for class IR::IR::ReadResultInstruction
Warning: Missing QLdoc for class IR::IR::SendInstruction
Warning: Missing QLdoc for class IR::IR::InitParameterInstruction
Warning: Missing QLdoc for class IR::IR::ReadArgumentInstruction
Warning: Missing QLdoc for class IR::IR::InitResultInstruction
Warning: Missing QLdoc for class IR::IR::GetNextEntryInstruction
Warning: Missing QLdoc for member-predicate IR::IR::GetNextEntryInstruction::getDomain/0
Warning: Missing QLdoc for class IR::IR::EvalImplicitTrueInstruction
Warning: Missing QLdoc for class IR::IR::CaseInstruction
Warning: Missing QLdoc for class IR::IR::TypeSwitchImplicitVariableInstruction
Warning: Missing QLdoc for class IR::IR::EvalImplicitLowerSliceBoundInstruction
Warning: Missing QLdoc for class IR::IR::EvalImplicitUpperSliceBoundInstruction
Warning: Missing QLdoc for class IR::IR::EvalImplicitMaxSliceBoundInstruction
Warning: Missing QLdoc for class IR::IR::EvalImplicitDerefInstruction
Warning: Missing QLdoc for member-predicate IR::IR::EvalImplicitDerefInstruction::getOperand/0
Warning: Missing QLdoc for class IR::IR::WriteTarget
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::getWrite/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::getName/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::asSsaVariable/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::refersTo/1
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::toString/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::getLocation/0
Warning: Missing QLdoc for member-predicate IR::IR::WriteTarget::hasLocationInfo/5
Warning: Missing QLdoc for class IR::IR::VarOrConstTarget
Warning: Missing QLdoc for member-predicate IR::IR::VarOrConstTarget::getVariable/0
Warning: Missing QLdoc for member-predicate IR::IR::VarOrConstTarget::getConstant/0
Warning: Missing QLdoc for class IR::IR::FieldTarget
Warning: Missing QLdoc for member-predicate IR::IR::FieldTarget::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::FieldTarget::getBaseType/0
Warning: Missing QLdoc for member-predicate IR::IR::FieldTarget::getField/0
Warning: Missing QLdoc for class IR::IR::ElementTarget
Warning: Missing QLdoc for member-predicate IR::IR::ElementTarget::getBase/0
Warning: Missing QLdoc for member-predicate IR::IR::ElementTarget::getIndex/0
Warning: Missing QLdoc for class IR::IR::PointerTarget
Warning: Missing QLdoc for member-predicate IR::IR::PointerTarget::getBase/0
Warning: Missing QLdoc for newtype-branch IR::IR::MkLhs
Warning: Missing QLdoc for newtype-branch IR::IR::MkLiteralElementTarget
Warning: Missing QLdoc for newtype-branch IR::IR::MkResultWriteTarget
Warning: Missing QLdoc for classless-predicate IR::IR::initRecvInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::initParamInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::assignInstruction/2
Warning: Missing QLdoc for classless-predicate IR::IR::initInstruction/2
Warning: Missing QLdoc for classless-predicate IR::IR::assignKeyInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::assignValueInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::implicitInitInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::extractTupleElement/2
Warning: Missing QLdoc for classless-predicate IR::IR::implicitLowerSliceBoundInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::implicitUpperSliceBoundInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::implicitMaxSliceBoundInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::implicitDerefInstruction/1
Warning: Missing QLdoc for classless-predicate IR::IR::lookThroughImplicitFieldRead/1

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 31, 2026

@copilot Please fix these warnings, as long as they are in go code and not shared libraries.

Warning: Missing QLdoc for member-predicate IR::IR::ImplicitFieldReadInstruction::getBaseInstruction/...

Fixed in 66a191d. Added QLdoc comments to all 96 items in IR.qll — classes, member predicates, newtype branches, and classless predicates — matching the documentation from the old code where applicable.

@owen-mc
Copy link
Copy Markdown
Contributor

owen-mc commented Apr 24, 2026

@copilot Many tests are failing. Please investigate and in each case see if the test needs to be changed or the CFG code needs to be updated.

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 24, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/repos/github/gh-codeql/releases/latest
    • Triggering command: /usr/bin/gh gh extension install github/gh-codeql (http block)
  • releases.bazel.build
    • Triggering command: /usr/local/lib/node_modules/@bazel/bazelisk/bazelisk-linux_amd64 /usr/local/lib/node_modules/@bazel/bazelisk/bazelisk-linux_amd64 --version (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@owen-mc
Copy link
Copy Markdown
Contributor

owen-mc commented May 7, 2026

@copilot Fix the following errors from CI:

ERROR: module Ast does not declare GotoStmt, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare Throw, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare Assignment, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare AssignExpr, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare CompoundAssignment, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare AssignLogicalAndExpr, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare AssignLogicalOrExpr, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare AssignNullCoalescingExpr, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
ERROR: module Ast does not declare PatternMatchExpr, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:34,33-61)
WARNING: type declaration 'ThrowStmt' does not implement a signature member, so it should be marked 'additional' (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:159,11-20)
ERROR: module Input does not declare CallableBodyPartContext, required by implemented signature ControlFlowGraph::Make0<Locations::Location, ControlFlowGraphShared::GoCfg::Ast>::InputSig1 (/home/runner/work/codeql/codeql/go/ql/lib/semmle/go/controlflow/ControlFlowGraphShared.qll:247,35-50)

Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 7, 2026

@copilot Fix the following errors from CI:

ERROR: module Ast does not declare GotoStmt, required by implemented signature ControlFlowGraph::AstSigLocations::Location (/home/runner...

Fixed in 2aaf88b. The shared CFG library on main added several new required types to AstSig (GotoStmt, Parameter, Throw (renamed from ThrowStmt), Assignment hierarchy, PatternMatchExpr). I've added all of them to the Go Ast module — GotoStmt maps to Go::GotoStmt, and the rest are empty classes since Go doesn't have those constructs. Also added CallableContext = Void to the Input module and updated the shared library to the main branch version.

Copilot finished work on behalf of owen-mc May 7, 2026 11:01
@owen-mc owen-mc force-pushed the copilot/vscode-mndb17m3-9fpv branch from 2aaf88b to 39697ee Compare May 13, 2026 23:22
Copilot AI and others added 15 commits May 21, 2026 15:16
…In guards, mark implicitFieldSelection as additional

Agent-Logs-Url: https://github.com/github/codeql/sessions/8d96128c-44db-4ba1-9eca-1a5b37f54442

Co-authored-by: owen-mc <62447351+owen-mc@users.noreply.github.com>
… Ast module for updated shared CFG AstSig

Agent-Logs-Url: https://github.com/github/codeql/sessions/005953d9-1d54-4071-8cd2-5a7d26f65f61

Co-authored-by: owen-mc <62447351+owen-mc@users.noreply.github.com>
@owen-mc owen-mc force-pushed the copilot/vscode-mndb17m3-9fpv branch from 39697ee to 061a460 Compare May 21, 2026 15:28
owen-mc added 14 commits May 28, 2026 16:36
To determine that test9 can't return normally, you have to use the fact
that test5 can't return normally. This would make CFG construction
recursive, which would be bad for performance. Therefore we accept the
limitation that we cannot detect that test9 can't return normally, and
we change the test output.
There was a loop in the definitions which meant nothing ever got made
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants