From b250422723961c7e108b30ff45eee3680e036f4d Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Tue, 14 Aug 2018 14:45:13 +0200
Subject: [PATCH] fix bug in La_chol (incorrect pivot attribute in return)

---
 .../truffle/r/nodes/builtin/base/LaFunctions.java      |  2 +-
 .../com/oracle/truffle/r/test/ExpectedTestOutput.test  | 10 ++++++++++
 .../truffle/r/test/builtins/TestBuiltin_chol.java      |  1 +
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
index 0cdad307d4..91c039ad07 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
@@ -593,7 +593,7 @@ public class LaFunctions {
             }
 
             RDoubleVector result = (RDoubleVector) copyAttributesNode.execute(RDataFactory.createDoubleVector(aData, RDataFactory.INCOMPLETE_VECTOR), aIn);
-            setPivotAttrNode.execute(result, RRuntime.asLogical(piv));
+            setPivotAttrNode.execute(result, RDataFactory.createIntVector(ipiv, false));
             setRankAttrNode.execute(result, rank[0]);
             RList dn = getDimNamesNode.getDimNames(aIn);
             if (dn != null && dn.getDataAt(0) != null) {
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 0a6b1dce98..f31cfed5fb 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
@@ -15467,6 +15467,16 @@ Error in chartr(c("abq"), "cd", c("agbc", "efb")) :
 Error in chartr(c(3, 2), c("q", "c"), c("abc", "efb")) :
   invalid 'old' argument
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_chol.testChol#
+#chol(matrix(c(4,2,2,3), ncol=2), pivot=TRUE)
+     [,1]     [,2]
+[1,]    2 1.000000
+[2,]    0 1.414214
+attr(,"pivot")
+[1] 1 2
+attr(,"rank")
+[1] 2
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_chol.testChol#
 #{ chol(1) }
      [,1]
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chol.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chol.java
index 508e6d1cc4..480ddc86a6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chol.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_chol.java
@@ -44,5 +44,6 @@ public class TestBuiltin_chol extends TestBase {
         // the leading minor of order 2 is not positive definite
         // FastR output: Error in chol.default(m) : error code 2 from Lapack routine 'dpotrf'
         assertEval(Output.IgnoreErrorMessage, "{ m <- matrix(c(5,-5,-5,3),2,2) ; chol(m) }");
+        assertEval("chol(matrix(c(4,2,2,3), ncol=2), pivot=TRUE)");
     }
 }
-- 
GitLab