From a51d607d908894b90f0316666b214039a2283883 Mon Sep 17 00:00:00 2001
From: Tomas Stupka <tomas.stupka@oracle.com>
Date: Wed, 6 Dec 2017 12:20:12 +0100
Subject: [PATCH] when casting list to atomic, complete has to be properly set
 in result

---
 .../truffle/r/nodes/binary/BinaryBooleanNode.java  | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
index b367673e33..61e9e4df60 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
@@ -34,6 +34,7 @@ import com.oracle.truffle.r.nodes.profile.TruffleBoundaryNode;
 import com.oracle.truffle.r.runtime.RDeparse;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RError.Message;
+import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RComplex;
 import com.oracle.truffle.r.runtime.data.RComplexVector;
@@ -194,13 +195,26 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 {
                 if (value instanceof RAbstractVector && ((RAbstractVector) value).getLength() == 1) {
                     value = ((RAbstractVector) value).getDataAtAsObject(0);
                 }
+
                 if (type == RType.Integer && value instanceof Integer) {
+                    if (RRuntime.isNA((int) value)) {
+                        result.setComplete(false);
+                    }
                     ((RIntVector) result).setDataAt(store, i, (int) value);
                 } else if (type == RType.Double && value instanceof Double) {
+                    if (RRuntime.isNA((double) value)) {
+                        result.setComplete(false);
+                    }
                     ((RDoubleVector) result).setDataAt(store, i, (double) value);
                 } else if (type == RType.Logical && value instanceof Byte) {
+                    if (RRuntime.isNA((byte) value)) {
+                        result.setComplete(false);
+                    }
                     ((RLogicalVector) result).setDataAt(store, i, (byte) value);
                 } else if (type == RType.Complex && value instanceof RComplex) {
+                    if (RRuntime.isNA((RComplex) value)) {
+                        result.setComplete(false);
+                    }
                     ((RComplexVector) result).setDataAt(store, i, (RComplex) value);
                 } else if (type == RType.Raw && value instanceof RRaw) {
                     ((RRawVector) result).setRawDataAt(store, i, ((RRaw) value).getValue());
-- 
GitLab