• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Qiskit / qiskit / 34398812923
88%
main: 88%

Build:
Build:
LAST BUILD BRANCH: faster-evolve-clifford-h
DEFAULT BRANCH: main
Ran 09 Sep 2026 08:34PM UTC
Jobs 1
Files 970
Run time 3min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

09 Sep 2026 08:04PM UTC coverage: 88.079% (+0.03%) from 88.045%
34398812923

Pull #16931

github

mtreinish
Add call instructions, so a program can hold several functions

A call instruction names a function by `FunctionId` and computes nothing itself, so one
stored body serves however many sites invoke it. `InstructionRole::Call` is the fourth role,
and the only one besides the two boundary roles that carries no `ProgramOp`.

A call may only name a function defined before the one holding it. The call graph is
therefore acyclic structurally, with nothing to traverse, and a callee is in bounds without
a separate check. A function has no identifier until a program holds it, so `add_call` takes
the callee's signature from its caller and checks the operands against it, and
`QuantumProgram::new` verifies the recorded types against the function actually named.
Nothing about the callee is stored: a call instruction's operand types and its own result
types are the contract as it was checked. Every function the program holds is verified, not
only those the entry point reaches, so evaluation resolves a call with no error path of its
own. A function the entry point cannot reach is accepted, and removing one is a pass rather
than a validity rule.

Both checks compare a declared type against an offered one, which `TensorType::admits`
answers: it is `Tensor::matches` with a type in place of the tensor, so a bounded axis
admits any size within its bound. The per-axis rule the two share moves onto `Dim::admits`.
A result a call declares must admit what its callee produces, because the instructions
reading that result were type-checked against the declared type.

A call instruction reports no built-in implementation, so a function holding one is not
locally evaluable by itself, and the program-level question walks the reachable functions
instead. `QuantumProgram::eval` settles that for every reachable function before anything
runs, then resolves each call against the program's functions as it walks. A function
reached through a call reports its failure through `FunctionEval... (continued)
Pull Request #16931: Add call nodes to QuantumFunction

591 of 605 new or added lines in 4 files covered. (97.69%)

22 existing lines in 4 files now uncovered.

119485 of 135657 relevant lines covered (88.08%)

963686.37 hits per line

Uncovered Changes

Lines Coverage ∆ File
8
97.67
1.08% crates/providers/src/program/quantum_program.rs
6
95.23
1.27% crates/providers/src/program/program_function.rs

Coverage Regressions

Lines Coverage ∆ File
18
96.69
-1.42% crates/qasm2/src/parse.rs
2
81.67
-0.07% crates/circuit/src/parameter/symbol_expr.rs
1
90.3
0.0% crates/circuit/src/parameter/parameter_expression.rs
1
92.03
0.51% crates/qasm2/src/lex.rs
Jobs
ID Job ID Ran Files Coverage
1 34398812923.1 09 Sep 2026 08:34PM UTC 970
88.08
GitHub Action Run
Source Files on build 34398812923
  • Tree
  • List 970
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34398812923
  • Pull Request #16931
  • PR Base - ihincks/qp-06-quantum-program (#34398812926)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc