# RUN: %PYTHON %s | FileCheck %s import gc from mlir.ir import * def run(f): print("\nTEST:", f.__name__) f() gc.collect() assert Context._get_live_count() == 0 return f # CHECK-LABEL: TEST: test_exception @run def test_exception(): ctx = Context() ctx.allow_unregistered_dialects = True try: Operation.parse( """ func.func @foo() { "test.use"(%0) : (i64) -> () loc("use") %0 = "test.def"() : () -> i64 loc("def") return } """, context=ctx, ) except MLIRError as e: # CHECK: Exception: < # CHECK: Unable to parse operation assembly: # CHECK: error: "use": operand #0 does not dominate this use # CHECK: note: "use": see current operation: "test.use"(%0) : (i64) -> () # CHECK: note: "def": operand defined here (op in the same block) # CHECK: > print(f"Exception: <{e}>") # CHECK: message: Unable to parse operation assembly print(f"message: {e.message}") # CHECK: error_diagnostics[0]: loc("use") operand #0 does not dominate this use # CHECK: error_diagnostics[0].notes[0]: loc("use") see current operation: "test.use"(%0) : (i64) -> () # CHECK: error_diagnostics[0].notes[1]: loc("def") operand defined here (op in the same block) print( "error_diagnostics[0]: ", e.error_diagnostics[0].location, e.error_diagnostics[0].message, ) print( "error_diagnostics[0].notes[0]: ", e.error_diagnostics[0].notes[0].location, e.error_diagnostics[0].notes[0].message, ) print( "error_diagnostics[0].notes[1]: ", e.error_diagnostics[0].notes[1].location, e.error_diagnostics[0].notes[1].message, ) # CHECK-LABEL: test_emit_error_diagnostics @run def test_emit_error_diagnostics(): ctx = Context() loc = Location.unknown(ctx) handler_diags = [] def handler(d): handler_diags.append(str(d)) return True ctx.attach_diagnostic_handler(handler) try: Attribute.parse("not an attr", ctx) except MLIRError as e: # CHECK: emit_error_diagnostics=False: # CHECK: e.error_diagnostics: ['expected attribute value'] # CHECK: handler_diags: [] print(f"emit_error_diagnostics=False:") print(f"e.error_diagnostics: {[str(diag) for diag in e.error_diagnostics]}") print(f"handler_diags: {handler_diags}") ctx.emit_error_diagnostics = True try: Attribute.parse("not an attr", ctx) except MLIRError as e: # CHECK: emit_error_diagnostics=True: # CHECK: e.error_diagnostics: [] # CHECK: handler_diags: ['expected attribute value'] print(f"emit_error_diagnostics=True:") print(f"e.error_diagnostics: {[str(diag) for diag in e.error_diagnostics]}") print(f"handler_diags: {handler_diags}")