brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 74085cd Raw
96 lines · python
1# RUN: %PYTHON %s | FileCheck %s2 3import gc4from mlir.ir import *5 6 7def run(f):8    print("\nTEST:", f.__name__)9    f()10    gc.collect()11    assert Context._get_live_count() == 012    return f13 14 15# CHECK-LABEL: TEST: test_exception16@run17def test_exception():18    ctx = Context()19    ctx.allow_unregistered_dialects = True20    try:21        Operation.parse(22            """23      func.func @foo() {24          "test.use"(%0) : (i64) -> ()  loc("use")25          %0 = "test.def"() : () -> i64 loc("def")26          return27      }28    """,29            context=ctx,30        )31    except MLIRError as e:32        # CHECK: Exception: <33        # CHECK:   Unable to parse operation assembly:34        # CHECK:   error: "use": operand #0 does not dominate this use35        # CHECK:    note: "use": see current operation: "test.use"(%0) : (i64) -> ()36        # CHECK:    note: "def": operand defined here (op in the same block)37        # CHECK: >38        print(f"Exception: <{e}>")39 40        # CHECK: message: Unable to parse operation assembly41        print(f"message: {e.message}")42 43        # CHECK: error_diagnostics[0]:           loc("use") operand #0 does not dominate this use44        # CHECK: error_diagnostics[0].notes[0]:  loc("use") see current operation: "test.use"(%0) : (i64) -> ()45        # CHECK: error_diagnostics[0].notes[1]:  loc("def") operand defined here (op in the same block)46        print(47            "error_diagnostics[0]:          ",48            e.error_diagnostics[0].location,49            e.error_diagnostics[0].message,50        )51        print(52            "error_diagnostics[0].notes[0]: ",53            e.error_diagnostics[0].notes[0].location,54            e.error_diagnostics[0].notes[0].message,55        )56        print(57            "error_diagnostics[0].notes[1]: ",58            e.error_diagnostics[0].notes[1].location,59            e.error_diagnostics[0].notes[1].message,60        )61 62 63# CHECK-LABEL: test_emit_error_diagnostics64@run65def test_emit_error_diagnostics():66    ctx = Context()67    loc = Location.unknown(ctx)68    handler_diags = []69 70    def handler(d):71        handler_diags.append(str(d))72        return True73 74    ctx.attach_diagnostic_handler(handler)75 76    try:77        Attribute.parse("not an attr", ctx)78    except MLIRError as e:79        # CHECK: emit_error_diagnostics=False:80        # CHECK: e.error_diagnostics: ['expected attribute value']81        # CHECK: handler_diags: []82        print(f"emit_error_diagnostics=False:")83        print(f"e.error_diagnostics: {[str(diag) for diag in e.error_diagnostics]}")84        print(f"handler_diags: {handler_diags}")85 86    ctx.emit_error_diagnostics = True87    try:88        Attribute.parse("not an attr", ctx)89    except MLIRError as e:90        # CHECK: emit_error_diagnostics=True:91        # CHECK: e.error_diagnostics: []92        # CHECK: handler_diags: ['expected attribute value']93        print(f"emit_error_diagnostics=True:")94        print(f"e.error_diagnostics: {[str(diag) for diag in e.error_diagnostics]}")95        print(f"handler_diags: {handler_diags}")96