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. --- source/slang/slang-ir.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'source/slang/slang-ir.cpp') diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index fb121d245..789349b4c 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -3130,7 +3130,14 @@ namespace Slang { return emitIntrinsicInst((IRType*)type, kIROp_Reinterpret, 1, &value); } - + IRInst* IRBuilder::emitInOutImplicitCast(IRInst* type, IRInst* value) + { + return emitIntrinsicInst((IRType*)type, kIROp_InOutImplicitCast, 1, &value); + } + IRInst* IRBuilder::emitOutImplicitCast(IRInst* type, IRInst* value) + { + return emitIntrinsicInst((IRType*)type, kIROp_OutImplicitCast, 1, &value); + } IRLiveRangeStart* IRBuilder::emitLiveRangeStart(IRInst* referenced) { // This instruction doesn't produce any result, -- cgit v1.2.3