diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2023-06-30 15:25:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-30 12:25:59 -0700 |
| commit | c5b0708ead5de2d90ef14f20b5b8e3ed4f576373 (patch) | |
| tree | 0e7691cda679b5f937d7ed73eba021ad9170245c /source/slang/slang-ir.cpp | |
| parent | a3ad4dd77bba6c87abad4f76b72055c9fed94bad (diff) | |
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.
Diffstat (limited to 'source/slang/slang-ir.cpp')
| -rw-r--r-- | source/slang/slang-ir.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
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, |
