Skip to content

Uninitialized read into Re_avg on dead viscous lanes (UB; FP-trap hazard in debug builds) #1567

Description

@sbryngelson

Symptom: results-inert today (every consumer is gated on the matching Re_size lane), but the code computes 2/(1/uninitialized) — undefined behavior that can trap in debug/FPE builds.

Mechanism: the unguarded do i = 1, 2 Reynolds-averaging loops (src/simulation/m_riemann_solvers.fpp:480-484, :1965-1968, :2627-2630, :3045-3048 on master) write both lanes of Re_avg_rs*_vf even when Re_size(2)==0, in which case the HLLC fill loop never initializes Re_L(2)/Re_R(2).

Introduced: the unguarded form dates to the 2022 GPU development merge (6def75421, @anandrdbz, pre-PR era), when the lane was garbage-but-defined via dflt_real; it became genuinely uninitialized when #1035 dropped that initialization (2025-11-13). Tagging @anandrdbz for context.

Fix: pending in the Phase-3 refactoring series (stacked on #1556): the extracted Reynolds helper writes a defined 1/sgm_eps into dead lanes.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions