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