diff options
5 files changed, 22 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java index 4508f90b..6a315272 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java @@ -248,6 +248,10 @@ public class LlvmIrSerializer { writer.append("null"); } + case LlvmOperandPoison _ -> { + writer.append("poison"); + } + case LlvmOperandStructure structure -> { writer.append("{"); forEachInterspersed( diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java index 624e6dc0..9ada3b12 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperand.java @@ -1,4 +1,4 @@ package org.shedlang.compiler.backends.llvm.ir.ast.operands; -public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandGetElementPtr, LlvmOperandInt, LlvmOperandNull, LlvmOperandPtrToInt, LlvmOperandStructure, LlvmVariable { +public sealed interface LlvmOperand permits LlvmOperandArray, LlvmOperandGetElementPtr, LlvmOperandInt, LlvmOperandNull, LlvmOperandPoison, LlvmOperandPtrToInt, LlvmOperandStructure, LlvmVariable { } diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java new file mode 100644 index 00000000..b34cb6a5 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/operands/LlvmOperandPoison.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.backends.llvm.ir.ast.operands; + +public record LlvmOperandPoison() implements LlvmOperand { +} diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java index 0139599e..ba4ecb93 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializerOperandsTests.java @@ -82,6 +82,15 @@ public class LlvmIrSerializerOperandsTests { } @Test + public void poisonIsSerializedAsPoison() throws IOException { + var operand = LlvmIr.operandPoison(); + + var result = serializeToString(operand, LlvmIrSerializer::serializeOperand); + + assertThat(result, equalTo("poison")); + } + + @Test public void arrayIsSerializedAsTypedOperandsInArray() throws IOException { var operand = LlvmIr.operandArray( LlvmTypes.INT_64, diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java index 08a5b706..b1aef1d8 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/ir/ast/LlvmIr.java @@ -159,6 +159,10 @@ public class LlvmIr { return new LlvmOperandNull(); } + public static LlvmOperandPoison operandPoison() { + return new LlvmOperandPoison(); + } + public static LlvmOperand operandPtrToInt( LlvmOperand operand, LlvmType destinationType |
