Skip to content

Overloading unary operator +- definition accepted but doesn't work #7944

@sawickiap

Description

@sawickiap

Description
Following simple compute shader fails to compile:

struct MyFloat {
    float Value;
    MyFloat operator-() {
        MyFloat Result;
        Result.Value = -Value;
        return Result;
    }
};
RWByteAddressBuffer Buf : register(u0);
[numthreads(1, 1, 1)]
void mainCS(uint3 dtid: SV_DispatchThreadID) {
    MyFloat f1;
    f1.Value = 1.0;
    MyFloat f2 = -f1;
    Buf.Store<float>(0, f2.Value);
}

Steps to Reproduce
Compile the shader with command line:

dxc.exe -T cs_6_0 -E mainCS -Fo MyCS.dxil MyCS.hlsl

Actual Behavior

MyCS.hlsl:14:18: error: scalar, vector, or matrix expected
    MyFloat f2 = -f1;
                 ^

It seems that overloading unary operators +MyVar, -MyVar doesn't work. I understand this, but I think in this case it would be better if the compiler reported an error while the operator is defined, not only when I try to actually use it.

Environment

  • DXC version: dxcompiler.dll: 1.8 - 1.8.2502.11 (239921522); dxil.dll: 1.8(1.8.2502.11), as bundled in Windows SDK 10.0.26100.0.
  • Host Operating System: Windows 11 x86-64 25H2 (OS Build 26200.7171)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugBug, regression, crashneeds-triageAwaiting triage

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions