diff --git a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java index 14bd470438b73db082a96dee6f152da748ca227b..24e9d47732f8070bc3d3abaaa840a2faead9264a 100644 --- a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java +++ b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/builtin/CastBuilderTest.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.builtin; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.anyValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.abstractVectorValue; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asBoolean; import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asInteger; @@ -861,6 +862,26 @@ public class CastBuilderTest { Assert.assertEquals("abc", cast("abc")); } + @Test + public void testWarningInElseBranchOfMapIf() { + arg.mapIf(numericValue(), + chain(asIntegerVector()).with(findFirst().integerElement()).end(), + chain(asIntegerVector()).with(Predef.shouldBe(anyValue().not(), RError.NO_CALLER, RError.Message.NA_INTRODUCED_COERCION)).end()); + + Assert.assertEquals(1, cast(1)); + Assert.assertEquals(1, cast("1")); + Assert.assertEquals(RError.Message.NA_INTRODUCED_COERCION.message, CastNode.getLastWarning()); + } + + @Test + public void testWarningInTrueBranchOfMapIf() { + arg.allowNull().mapIf(stringValue(), chain(asStringVector()).with(shouldBe(anyValue().not(), + RError.SHOW_CALLER, RError.Message.NA_INTRODUCED_COERCION)).end(), + asIntegerVector()); + Assert.assertEquals("1", cast("1")); + Assert.assertEquals(RError.Message.NA_INTRODUCED_COERCION.message, CastNode.getLastWarning()); + } + /** * Casts given object using the configured pipeline in {@link #arg}. */ diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java index 34c20fe18ab200a430ae95e695e47ab768b24bf0..353156736aef1612b6b8550f02327fc8dd858969 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/casts/analysis/ForwardingAnalysisResult.java @@ -151,6 +151,15 @@ public final class ForwardingAnalysisResult { nullForwarded, missingForwarded, invalid); + } else if (Object.class == tp) { + return new ForwardingAnalysisResult(FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + FORWARDED, + invalid); } else { return this; }