Skip to content

Loop variable read after a zero trip for returns uninitialized memory #5250

Description

@sacpis

Required prerequisites

  • Consult the security policy. If reporting a security vulnerability, do not report the bug using this form. Use the process described in the policy to report the issue.
  • Make sure you've read the documentation. Your issue may be addressed there.
  • Search the issue tracker to verify that this hasn't already been reported. +1 or comment there if it has.
  • If possible, make a PR with a failing test to give us a starting point to work on!

Describe the bug

In Python, a for loop that never runs leaves its loop variable unbound, so reading it afterwards raises NameError. In a CUDA-Q kernel the read silently returns whatever is in the variable's stack slot.

Steps to reproduce the bug

import cudaq

@cudaq.kernel
def k(n: int):
    q = cudaq.qvector(3)
    for i in range(n):
        h(q[i])
    x(q[i])

print(cudaq.sample(k, 0, shots_count=20))

Gives output as

RuntimeError: Provided index [18446744073709551615] >= array size [3]

Expected behavior

Reading a loop variable after a zero trip loop should raise, matching Python's NameError, rather than produce a value.

Is this a regression? If it is, put the last known working version (or commit) here.

Not a regression

Environment

  • CUDA-Q version:
  • Python version:
  • C++ compiler:
  • Operating system:

Suggestions

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

stale-notifiedStale notification has already fired for this issue

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions