diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java index 5ef5ca20530477fdd9cb099ffc0bf2b58f33e485..6592eb1d591cc32c4e2c702bfaffde132d744711 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java @@ -143,6 +143,7 @@ public abstract class CastRawNode extends CastBaseNode { if (intRawValue != intValue) { warningBranch.enter(); RError.warning(this, RError.Message.OUT_OF_RANGE); + return RRaw.valueOf((byte) 0); } return RRaw.valueOf((byte) intRawValue); } @@ -223,7 +224,7 @@ public abstract class CastRawNode extends CastBaseNode { if (intValue != intRawValue) { warningBranch.enter(); outOfRangeWarning = true; - intRawValue = 0; + intValue = 0; } } bdata[i] = (byte) intValue; diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test index a3561e1ed91a693aa25ce508c92a7f4fb8704cc3..8a90c74f38ae6f165cd46f7522e9f976d7109ec7 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test @@ -6970,6 +6970,12 @@ Warning messages: 1: NAs introduced by coercion 2: out-of-range values treated as 0 in coercion to raw +##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext# +#{ as.raw('10000001') } +[1] 00 +Warning message: +out-of-range values treated as 0 in coercion to raw + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext# #{ as.raw(-1) } [1] 00 @@ -7010,6 +7016,12 @@ out-of-range values treated as 0 in coercion to raw #{ as.raw(NULL) } raw(0) +##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext# +#{ as.raw(c('10000001', '42')) } +[1] 00 2a +Warning message: +out-of-range values treated as 0 in coercion to raw + ##com.oracle.truffle.r.test.builtins.TestBuiltin_asraw.testAsRaw#Output.IgnoreWarningContext# #{ as.raw(c(1+3i, -2-1i, NA)) } [1] 01 00 00 diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java index 0de508e8b10e1ccbc7d53677626bc09affe760d6..cd7d0198a34beb1d9641563e31ec0d82da549305 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_asraw.java @@ -4,7 +4,7 @@ * http://www.gnu.org/licenses/gpl-2.0.html * * Copyright (c) 2012-2014, Purdue University - * Copyright (c) 2013, 2016, Oracle and/or its affiliates + * Copyright (c) 2013, 2017, Oracle and/or its affiliates * * All rights reserved. */ @@ -68,5 +68,7 @@ public class TestBuiltin_asraw extends TestBase { assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1,1000,NA)) }"); assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1L, -2L, 3L)) }"); assertEval(Output.IgnoreWarningContext, "{ as.raw(c(1L, -2L, NA)) }"); + assertEval(Output.IgnoreWarningContext, "{ as.raw('10000001') }"); + assertEval(Output.IgnoreWarningContext, "{ as.raw(c('10000001', '42')) }"); } }