<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/61442>61442</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] bad CHECKs generated with `generate-test-checks.py` 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bmahjour
      </td>
    </tr>
</table>

<pre>
    ```
> cat tmp.mlir
module {
func.func @test1() {
  %5 = dialect.op {
 value=0
  }
  %6 = dialect.use %5
}

func.func @test2() {
 %5 = dialect.op { value=0 }
  %6 = dialect.use %5
}

func.func @test3() {
  %5 = dialect.op
  {
    value=0
  }
  %6 = dialect.use %5
}
}

> cat tmp.mlir | ~/workspaces/llvm-project/mlir/utils/generate-test-checks.py
// NOTE: Assertions have been autogenerated by utils/generate-test-checks.py

// The script is designed to make adding checks to
// a test case fast, it is *not* designed to be authoritative
// about what constitutes a good test! The CHECK should be
// minimized and named to reflect the test intent.



// CHECK-LABEL: func.func @test1() {
// CHECK: %[[VAL_0:.*]] = dialect.op {
// CHECK:          value=0
// CHECK: }
// CHECK:         %[[VAL_1:.*]] = dialect.use %[[VAL_2:.*]]
// CHECK:       }

// CHECK-LABEL: func.func @test2() {
// CHECK: %[[VAL_0:.*]] = dialect.op { value=0 }
// CHECK:         %[[VAL_1:.*]] = dialect.use %[[VAL_0]]
// CHECK:       }

// CHECK-LABEL: func.func @test3() {
// CHECK:         %[[VAL_0:.*]] = dialect.op
// CHECK: {
// CHECK:           value=0
// CHECK:         }
// CHECK: %[[VAL_1:.*]] = dialect.use %[[VAL_0]]
// CHECK:       }
```

In `test1`, instead of matching the value produced by `dialect.op` (ie. `VAL_0`), a new regexp variable (ie `VAL_2`) is introduced. This could cause false passes even if the result of the first op is not used as the operand of `dialect.use`.

Notice `test2` and `test3` are fine, so the issue seems to be related to SSA values produced by an operation with a line break after '{'.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VlFv4zYM_jXKC1HDlhOnechD2jTYYd0N2BV7HWSbiXW1JUOk03UP--2DZLeJk6UtcL0gMCCb-viRoj5SEemdQVyK2Y2YrSeq48q6Zd6o6rvt3CS35fNSZPHwj9ciXon0DgrFwE0bNbV2_dvGll2NIOY3_XrbmSLyDxDTmJE4EfJayMXBAkDI2QxEuoZSqxoLjmx79Hmv6g5Fuo5fzefro53ZaGdHGOAGii-WF7jIMy4XqBxIfKL39EOZOET9agWfk5MxvdPjBDG_hX-F3DxZ90itKpCE3NT1vrlqnf2OBQu5CecuNx3r2n_doUGnGK98eFdFhcUjRe3z4EBuhNzA198f7kS6ghUROtbWEFRqj5AjGlAd2xeQEvJn-BjyMf5DhUCF0y2DJigxFHYJbKFRjwiqLLXZQY8AbEd7FXh4KBQhbBWxkLegA46QK2NZyNUIMUfob4pmxXqPY7DcdgxPlWIorCHW3DESKNhZWwZHQiaB7u0vd7e_AlW2q0vIxyiNNrrR_2AJypRgVNN7drj1ZwtcYc9ZG0bD0Sgh58kJnq7uVzd39_4M3r-cx_v8DiFnQSJu_lzd_xWLdBUJuRKztZitL97gU4zX30kVn_l6LdALACMyyWUywwU42MqR7VtOTi_Jx9J4pis_lsb_U59Pz0n8s5JxJnMfov5mUi7Vy3sF917FwVmgb53bT8vuSZ8Nzy8GRDbc0SwOwmSIUZVgt9AoLiova14OQozQOlt2RS-iIouPcpfFIOS1xsi_77l5wIXHVGDwCRzu8O8W9spplftm7s1frGVv7UVRGx68RPBQaYIiKFihuqCfNSG0iggJcI8G9Dbwc0hdzZ62X221IwbbejxjGTryUkfhm23RedWz2-MQOkKRxSOl-2pZF_iSIM8wqOWwTsPaeV8GfZRkA7wm6hAIsaFBzB3WofGwhW_fhsmDRqlUpmflGxc8aa5AQa0NQu5QPYLaMjoQcu5rUc6jSblMy0W6UBNcJtn8epFMZ9fZpFqmKZZpnJZzTKeLbarktMBiLhOpEplgJid6KWOZxmkyk0m8mGZRHueFyjBJkrmcFvlWTGNslK4j35Ij63aTEM8yS6ZTOalVjjWFcU7KvktLP9i5ZejgebcjMY1rTUwHANZchxHwt_svf_iSzlXZVynBoSuHqEUWX2rJWQyTztXLirklkQ7VvtNcdXlU2GaYIs6HicDfN_sQwn8BAAD__-pi8EY">