diff --git a/src/amd/compiler/tests/check_output.py b/src/amd/compiler/tests/check_output.py index c4a022e7a34..ad007c44952 100644 --- a/src/amd/compiler/tests/check_output.py +++ b/src/amd/compiler/tests/check_output.py @@ -40,10 +40,10 @@ initial_code = ''' import re def insert_code(code): - insert_queue.append(CodeCheck(code)) + insert_queue.append(CodeCheck(code, current_position)) def insert_pattern(pattern): - insert_queue.append(PatternCheck(pattern, False, '(code pattern)')) + insert_queue.append(PatternCheck(pattern, False, current_position)) def vector_gpr(prefix, name, size, align): insert_code(f'{name} = {name}0') @@ -80,8 +80,9 @@ def search_re(pattern): ''' class Check: - def __init__(self, data): + def __init__(self, data, position): self.data = data.rstrip() + self.position = position def run(self, state): pass @@ -109,12 +110,12 @@ class CodeCheck(Check): state.result.log += state.g['log'] state.g['log'] = '' except BaseException as e: - state.result.log += 'code check raised exception:\n' + state.result.log += 'code check at %s raised exception:\n' % self.position state.result.log += code + '\n' state.result.log += str(e) return False if not state.g['success']: - state.result.log += 'code check failed:\n' + state.result.log += 'code check at %s failed:\n' % self.position state.result.log += code + '\n' return False return True @@ -338,9 +339,8 @@ def do_match(g, pattern, output, skip_lines, in_func=False): class PatternCheck(Check): def __init__(self, data, search, position): - Check.__init__(self, data) + Check.__init__(self, data, position) self.search = search - self.position = position def run(self, state): pattern_stream = StringStream(self.data.rstrip(), 'pattern') @@ -363,12 +363,13 @@ class CheckState: self.variant = variant self.checks = checks - self.checks.insert(0, CodeCheck(initial_code)) + self.checks.insert(0, CodeCheck(initial_code, None)) self.insert_queue = [] self.g = {'success': True, 'funcs': {}, 'insert_queue': self.insert_queue, 'variant': variant, 'log': '', 'output': StringStream(output, 'output'), - 'CodeCheck': CodeCheck, 'PatternCheck': PatternCheck} + 'CodeCheck': CodeCheck, 'PatternCheck': PatternCheck, + 'current_position': ''} class TestResult: def __init__(self, expected): @@ -381,6 +382,7 @@ def check_output(result, variant, checks, output): while len(state.checks): check = state.checks.pop(0) + state.current_position = check.position if not check.run(state): result.result = 'failed' return @@ -398,7 +400,7 @@ def parse_check(variant, line, checks, pos): if len(checks) and isinstance(checks[-1], CodeCheck): checks[-1].data += '\n' + line else: - checks.append(CodeCheck(line)) + checks.append(CodeCheck(line, pos)) elif line.startswith('!'): checks.append(PatternCheck(line[1:], False, pos)) elif line.startswith('>>'):