From 9d2cafcc8c04041068a412f64bc18b1692747426 Mon Sep 17 00:00:00 2001 From: David Greene Date: Tue, 8 Oct 2019 16:25:42 +0000 Subject: [PATCH] [UpdateCCTestChecks] Detect function mangled name on separate line Sometimes functions with large comment blocks in front of them have their declarations output on several lines by c-index-test. Hence the one-line function name/line/mangled pattern will not work to detect them. Break the pattern up into two patterns and keep state after seeing the name/line information until we finally see the mangled name. Differential Revision: https://reviews.llvm.org/D68272 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374078 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/update_cc_test_checks.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/utils/update_cc_test_checks.py b/utils/update_cc_test_checks.py index d4eb9f2ca1b..ea500ebbb61 100755 --- a/utils/update_cc_test_checks.py +++ b/utils/update_cc_test_checks.py @@ -50,18 +50,32 @@ def get_line2spell_and_mangled(args, clang_args): '-test-print-mangle', f.name]) if sys.version_info[0] > 2: output = output.decode() - - RE = re.compile(r'^FunctionDecl=(\w+):(\d+):\d+ \(Definition\) \[mangled=([^]]+)\]') + DeclRE = re.compile(r'^FunctionDecl=(\w+):(\d+):\d+ \(Definition\)') + MangleRE = re.compile(r'.*\[mangled=([^]]+)\]') + MatchedDecl = False for line in output.splitlines(): - m = RE.match(line) - if not m: continue - spell, line, mangled = m.groups() + # Get the function source name, line number and mangled name. Sometimes + # c-index-test outputs the mangled name on a separate line (this can happen + # with block comments in front of functions). Keep scanning until we see + # the mangled name. + decl_m = DeclRE.match(line) + mangle_m = MangleRE.match(line) + + if decl_m: + MatchedDecl = True + spell, lineno = decl_m.groups() + if MatchedDecl and mangle_m: + mangled = mangle_m.group(1) + MatchedDecl = False + else: + continue + if mangled == '_' + spell: # HACK for MacOS (where the mangled name includes an _ for C but the IR won't): mangled = spell # Note -test-print-mangle does not print file names so if #include is used, # the line number may come from an included file. - ret[int(line)-1] = (spell, mangled) + ret[int(lineno)-1] = (spell, mangled) if args.verbose: for line, func_name in sorted(ret.items()): print('line {}: found function {}'.format(line+1, func_name), file=sys.stderr) -- 2.40.0