{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "com.cloudbees.jenkins.GitHubPushCause",
          "shortDescription" : "Started by GitHub push by gasche"
        }
      ]
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/trunk" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 132,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
            "branch" : [
              {
                "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
                "name" : "origin/trunk"
              }
            ]
          },
          "revision" : {
            "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
            "branch" : [
              {
                "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
                "name" : "origin/trunk"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
        "branch" : [
          {
            "SHA1" : "5c9d5db72847fd798ae99c3dac4940a5ee04b3dc",
            "name" : "origin/trunk"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/ocaml/ocaml"
      ],
      "scmName" : ""
    },
    {
      "_class" : "hudson.plugins.git.GitTagAction"
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#132",
  "duration" : 2449141,
  "estimatedDuration" : 2534434,
  "executor" : None,
  "fullDisplayName" : "Risc-V-legacy #132",
  "id" : "132",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 132,
  "queueId" : 50704,
  "result" : "SUCCESS",
  "timestamp" : 1590858112266,
  "url" : "https://ci.inria.fr/ocaml/view/all/job/Risc-V-legacy/132/",
  "builtOn" : "olive",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "testsuite/tests/typing-warnings/exhaustiveness.ml",
          "testsuite/tests/basic-more/morematch.compilers.reference",
          "typing/parmatch.ml"
        ],
        "commitId" : "8f71174eb22b837efab890aade8b85daf141e5a4",
        "timestamp" : 1590851437000,
        "author" : {
          "absoluteUrl" : "https://ci.inria.fr/ocaml/user/gabriel.scherer",
          "fullName" : "gabriel.scherer"
        },
        "authorEmail" : "gabriel.scherer@gmail.com",
        "comment" : "parmatch: make 'exhaust' lazy by returning a Seq.t\u000a\u000aThis solves exponential-blowup issue with the strict traversal and/or\u000astrict witness computation in cases where an exponential number of\u000acounter-examples is generated. This fixes Stack Overflow and\u000aexponential-time issues on examples using or-patterns heavily,\u000aincluding one that naturally found its way in real-world user\u000acode (see the following testsuite commit).\u000a\u000aWe now systematically keep only one counter-example, instead of\u000aletting the type-checker decide whether to discard\u000acounter-examples (in Backtrack_or mode) or to preserve\u000athem (in Refine_or mode).\u000a\u000aNote: in the exhaustivity warning, there are sub-messages printed to\u000aindicate that:\u000a\u000a- the exhaustivity counter-example is related to an extensible type, or\u000a- that a when-guarded clause does match the counter-example\u000a\u000aIn both cases the warning is there to explain the counter-example(s)\u000ashown (not a property of all counter-examples); keeping at most one\u000avalid counter-example means that they will be printed less often, but\u000ait is the correct/intended behavior in that case.\u000a",
        "date" : "2020-05-30 17:10:37 +0200",
        "id" : "8f71174eb22b837efab890aade8b85daf141e5a4",
        "msg" : "parmatch: make 'exhaust' lazy by returning a Seq.t",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "testsuite/tests/typing-warnings/exhaustiveness.ml"
          },
          {
            "editType" : "edit",
            "file" : "typing/parmatch.ml"
          },
          {
            "editType" : "edit",
            "file" : "testsuite/tests/basic-more/morematch.compilers.reference"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "testsuite/tests/typing-warnings/fragile_matching.ml"
        ],
        "commitId" : "a8adec16f1e23e664d66dc03b4e8ca8f8485987b",
        "timestamp" : 1590851437000,
        "author" : {
          "absoluteUrl" : "https://ci.inria.fr/ocaml/user/gabriel.scherer",
          "fullName" : "gabriel.scherer"
        },
        "authorEmail" : "gabriel.scherer@gmail.com",
        "comment" : "add regression tests for fragile-matching stack overflows\u000a",
        "date" : "2020-05-30 17:10:37 +0200",
        "id" : "a8adec16f1e23e664d66dc03b4e8ca8f8485987b",
        "msg" : "add regression tests for fragile-matching stack overflows",
        "paths" : [
          {
            "editType" : "add",
            "file" : "testsuite/tests/typing-warnings/fragile_matching.ml"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "Changes"
        ],
        "commitId" : "f8e24bda0c8afbe5a841be378227da69a4d08ed7",
        "timestamp" : 1590851514000,
        "author" : {
          "absoluteUrl" : "https://ci.inria.fr/ocaml/user/gabriel.scherer",
          "fullName" : "gabriel.scherer"
        },
        "authorEmail" : "gabriel.scherer@gmail.com",
        "comment" : "Changes entry\u000a",
        "date" : "2020-05-30 17:11:54 +0200",
        "id" : "f8e24bda0c8afbe5a841be378227da69a4d08ed7",
        "msg" : "Changes entry",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "Changes"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "testsuite/tests/typing-gadts/yallop_bugs.ml",
          "typing/parmatch.ml",
          "testsuite/tests/typing-gadts/pr5785.ml",
          "testsuite/tests/typing-warnings/exhaustiveness.ml",
          "testsuite/tests/typing-gadts/test.ml"
        ],
        "commitId" : "d8acfa92e4c25703d90de0675942c6ba74b11a4a",
        "timestamp" : 1590851514000,
        "author" : {
          "absoluteUrl" : "https://ci.inria.fr/ocaml/user/gabriel.scherer",
          "fullName" : "gabriel.scherer"
        },
        "authorEmail" : "gabriel.scherer@gmail.com",
        "comment" : "parmatch: ensure specialized submatrices are in source order\u000a\u000aWe produce exhaustivity counter-example in the order of the\u000aspecialized submatrices. Having submatrices in source order gives the\u000anice behavior that the clause that would naturally been inserted first\u000ain the source is given first as a counter-example.\u000a\u000aConsider for example:\u000a\u000a    function\u000a    | true, true -> true\u000a    | false, false -> false\u000a\u000aThe two counter-examples are (true, false) and (false, true).\u000a\u000aBefore this patch, (false, true) would be shown first.\u000aAfter this patch, (true, false) is shown first.\u000aThis corresponds to the following natural completion order:\u000a\u000a    function\u000a    | true, true -> true\u000a    | true, false -> ?\u000a    | false, false -> false\u000a    | false, true -> ?\u000a\u000aOn the other hand, the ordering of the default submatrix, with respect\u000ato the specialized submatrices, is not preserved -- it is always\u000aordered last.\u000aOne could intuitively expect the default submatrix to appear in the\u000aposition of the first omega row in the source. We tried this, and\u000ait is not a good idea:\u000a- the change is much more invasive as the interface of\u000a  `build_specialized_submatrices` has to change\u000a- the behavior of the result is in fact unpleasant; it is not\u000a  intuitive to order counter-examples in this way.\u000a\u000aFor example, consider:\u000a\u000a    function\u000a    | _, None -> false\u000a    | true, Some true -> false\u000a\u000aThe two exhaustivity counter-examples are (true, Some false)\u000aand (false, Some _). The second comes from the default submatrix:\u000amorally it is (_, Some _), with \"some other constructor missing from\u000athe column\" instead of the first _. There is no reason to suppose that\u000athe user would want to place this (_, Some _) or (false, Some _)\u000acounter-example first in the completed code; indeed, this intuition\u000awould suggest writing an exhaustive covering of patterns of the\u000aform (_, foo), inserted after the first clause, but then the other\u000aclauses below become unnecessary!\u000a\u000aWhen an omega patterns appears high in the column like this, it is\u000ausually because there is a very specific matching condition to the\u000arest of its row, that justifies some shortcutting behavior. The\u000aprogram is typically *not* completed by adding more specific matching\u000aconditions.\u000a",
        "date" : "2020-05-30 17:11:54 +0200",
        "id" : "d8acfa92e4c25703d90de0675942c6ba74b11a4a",
        "msg" : "parmatch: ensure specialized submatrices are in source order",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "testsuite/tests/typing-gadts/yallop_bugs.ml"
          },
          {
            "editType" : "edit",
            "file" : "testsuite/tests/typing-gadts/test.ml"
          },
          {
            "editType" : "edit",
            "file" : "testsuite/tests/typing-warnings/exhaustiveness.ml"
          },
          {
            "editType" : "edit",
            "file" : "typing/parmatch.ml"
          },
          {
            "editType" : "edit",
            "file" : "testsuite/tests/typing-gadts/pr5785.ml"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://ci.inria.fr/ocaml/user/gabriel.scherer",
      "fullName" : "gabriel.scherer"
    }
  ]
}