forked from OSchip/llvm-project
[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 llvm-svn: 374078
This commit is contained in:
parent
02376077be
commit
eb66985726
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue