Skip to content

First (write) access to temporary inside conditional bug #1142

@Stagno

Description

@Stagno

The following Dusk code

from dusk.script import *

@stencil
def temp_access_bug(
    a: Field[K],
    b: Field[Edge],
    d: Field[Edge, K],
    
) -> None:

    z: Field[Edge, K]

    with domain.upward as k:

        if (a):
            z = b
            d = z

fails with the following error:

Assertion failed: `exprStmt' first access of temp field to be demoted (i.e lifetime.Begin) is not an `ExprStmt`
Function: 'void dawn::demoteTemporaryFieldToLocalVariable(dawn::iir::StencilInstantiation*, dawn::iir::Stencil*, int, const dawn::iir::Stencil::Lifetime&)'
Location: /scratch-shared/meteoswiss/scratch/jenkins/spack-stages/admin-tsa/spack-stage-dawn4py-master-exy4bjidi4cwlilrflvsxs4x5rpwjjdi/spack-src/dawn/src/dawn/Optimizer/TemporaryHandling.cpp:157

Dawn is not able to properly look inside the conditional to figure out that the temporary is written before being read.
I encountered the problem when translating mo_velocity_advection_stencil_19 using temporaries. This is the simplest reproducible I could write.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions