[PATCH] D68272: [UpdateCCTestChecks] Detect function mangled name on separate line
David Greene via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 1 07:29:20 PDT 2019
greened created this revision.
greened added reviewers: xbolva00, MaskRay.
greened added a project: LLVM.
Herald added a subscriber: llvm-commits.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D68272
Files:
llvm/utils/update_cc_test_checks.py
Index: llvm/utils/update_cc_test_checks.py
===================================================================
--- llvm/utils/update_cc_test_checks.py
+++ llvm/utils/update_cc_test_checks.py
@@ -50,18 +50,32 @@
'-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)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68272.222610.patch
Type: text/x-patch
Size: 1733 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191001/efcff65b/attachment.bin>
More information about the llvm-commits
mailing list