From c5b0708ead5de2d90ef14f20b5b8e3ed4f576373 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Fri, 30 Jun 2023 15:25:59 -0400 Subject: Fix for operator assignment issue (#2951) * WIP handling LValue coercion via LValueImplicitCast * Need to have the ptr type for the cast. * Casting conversion working on C++. * Make the LValue casts record if in or in/out as we can produce better code if we know the difference. * WIP LValueCast pass * Fix tests so we don't fail because downstream compilers detect use of uninitialized variable. * Do conversions through through tmp for l-value scenarios that can't work other ways. * Fix a typo. * Change diagnostic implicit-cast-lvalue for a type that still exhibits the issue. * Add matrix test. * Added a bit more clarity around LValue casting choices. * Small comment improvements. Improvements based on comments on PR. * Use findOuterGeneric. --- tests/diagnostics/implicit-cast-lvalue.slang | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'tests/diagnostics/implicit-cast-lvalue.slang') diff --git a/tests/diagnostics/implicit-cast-lvalue.slang b/tests/diagnostics/implicit-cast-lvalue.slang index 79b619443..daf196378 100644 --- a/tests/diagnostics/implicit-cast-lvalue.slang +++ b/tests/diagnostics/implicit-cast-lvalue.slang @@ -1,15 +1,20 @@ //DIAGNOSTIC_TEST:SIMPLE: + +// Generally speaking: // Passing an argument for an `out` parameter such // that implicit conversion would be required in // both directions. +// +// But we do have special case code to handle uint/int of the same type and scalar/vector/matrix forms. +// So for this to fail we need to use floats or something else -void a(out uint x) +void a(out float x) { x = 0; } -void b(int y) +void b(double y) { a(y); } -- cgit v1.2.3