[PATCH] D97107: Replace func name with regex for update test scripts
nikic added a comment. Looks like this has broken update_analyze_test_checks.py. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97107/new/ https://reviews.llvm.org/D97107 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D97107: Replace func name with regex for update test scripts
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG1ce846be04f8: Replace func name with regex for update test scripts (authored by ggeorgakoudis). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97107/new/ https://reviews.llvm.org/D97107 Files: clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c.expected clang/test/utils/update_cc_test_checks/generated-funcs-regex.test llvm/utils/UpdateTestChecks/common.py llvm/utils/update_llc_test_checks.py Index: llvm/utils/update_llc_test_checks.py === --- llvm/utils/update_llc_test_checks.py +++ llvm/utils/update_llc_test_checks.py @@ -109,7 +109,8 @@ flags=type('', (object,), { 'verbose': ti.args.verbose, 'function_signature': False, -'check_attributes': False}), +'check_attributes': False, +'replace_function_regex': []}), scrubber_args=[ti.args]) for prefixes, llc_args, triple_in_cmd, march_in_cmd in run_list: Index: llvm/utils/UpdateTestChecks/common.py === --- llvm/utils/UpdateTestChecks/common.py +++ llvm/utils/UpdateTestChecks/common.py @@ -30,6 +30,8 @@ help='Activate CHECK line generation from this point forward') parser.add_argument('--disable', action='store_false', dest='enabled', help='Deactivate CHECK line generation from this point forward') + parser.add_argument('--replace-function-regex', nargs='+', default=[], + help='List of regular expressions to replace matching function names') args = parser.parse_args() global _verbose _verbose = args.verbose @@ -275,6 +277,8 @@ self._record_args = flags.function_signature self._check_attributes = flags.check_attributes self._scrubber_args = scrubber_args +# Strip double-quotes if input was read by UTC_ARGS +self._replace_function_regex = list(map(lambda x: x.strip('"'), flags.replace_function_regex)) self._func_dict = {} self._func_order = {} self._global_var_dict = {} @@ -348,6 +352,30 @@ self._func_dict[prefix][func] = None continue +# Replace function names matching the regex. +for regex in self._replace_function_regex: + # Pattern that matches capture groups in the regex in leftmost order. + group_regex = re.compile('\(.*?\)') + # Replace function name with regex. + match = re.match(regex, func) + if match: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): + func_repl = group_regex.sub(g, func_repl, count=1) +func = '{{' + func_repl + '}}' + + # Replace all calls to regex matching functions. + matches = re.finditer(regex, scrubbed_body) + for match in matches: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): +func_repl = group_regex.sub(g, func_repl, count=1) +# Substitute function call names that match the regex with the same +# capture groups set. +scrubbed_body = re.sub(func_repl, '{{' + func_repl + '}}', scrubbed_body) + self._func_dict[prefix][func] = function_body( scrubbed_body, scrubbed_extra, args_and_sig, attrs) self._func_order[prefix].append(func) @@ -794,6 +822,8 @@ continue # Don't add default values autogenerated_note_args += action.option_strings[0] + ' ' if action.const is None: # action takes a parameter + if action.nargs == '+': +value = ' '.join(map(lambda v: '"' + v.strip('"') + '"', value)) autogenerated_note_args += '%s ' % value if autogenerated_note_args: autogenerated_note_args = ' %s %s' % (UTC_ARGS_KEY, autogenerated_note_args[:-1]) Index: clang/test/utils/update_cc_test_checks/generated-funcs-regex.test === --- /dev/null +++ clang/test/utils/update_cc_test_checks/generated-funcs-regex.test @@ -0,0 +1,9 @@ +## Test that CHECK lines are generated for clang-generated functions replaced +## by regex + +## RUN: cp %S/Inputs/generated-funcs-regex.c %t-generated-funcs-regex.c && %update_cc_test_checks --include-generated-funcs --replace-function-regex "__([a-z]+)_offloading_[a-z0-9]+_[a-z0-9]+_(.*)_l[0-9]+" -- %t-generated-funcs-regex.c +# RUN: diff -u %S/Inputs/generated-funcs-regex.c.expected %t-generated-funcs-regex.c + +## Check that re-running update_cc_test_checks doesn't change the output +# RUN: %updat
[PATCH] D97107: Replace func name with regex for update test scripts
ggeorgakoudis updated this revision to Diff 330407. ggeorgakoudis added a comment. Fix for upstreaming Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97107/new/ https://reviews.llvm.org/D97107 Files: clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c.expected clang/test/utils/update_cc_test_checks/generated-funcs-regex.test llvm/utils/UpdateTestChecks/common.py llvm/utils/update_llc_test_checks.py Index: llvm/utils/update_llc_test_checks.py === --- llvm/utils/update_llc_test_checks.py +++ llvm/utils/update_llc_test_checks.py @@ -109,7 +109,8 @@ flags=type('', (object,), { 'verbose': ti.args.verbose, 'function_signature': False, -'check_attributes': False}), +'check_attributes': False, +'replace_function_regex': []}), scrubber_args=[ti.args]) for prefixes, llc_args, triple_in_cmd, march_in_cmd in run_list: Index: llvm/utils/UpdateTestChecks/common.py === --- llvm/utils/UpdateTestChecks/common.py +++ llvm/utils/UpdateTestChecks/common.py @@ -30,6 +30,8 @@ help='Activate CHECK line generation from this point forward') parser.add_argument('--disable', action='store_false', dest='enabled', help='Deactivate CHECK line generation from this point forward') + parser.add_argument('--replace-function-regex', nargs='+', default=[], + help='List of regular expressions to replace matching function names') args = parser.parse_args() global _verbose _verbose = args.verbose @@ -275,6 +277,8 @@ self._record_args = flags.function_signature self._check_attributes = flags.check_attributes self._scrubber_args = scrubber_args +# Strip double-quotes if input was read by UTC_ARGS +self._replace_function_regex = list(map(lambda x: x.strip('"'), flags.replace_function_regex)) self._func_dict = {} self._func_order = {} self._global_var_dict = {} @@ -348,6 +352,30 @@ self._func_dict[prefix][func] = None continue +# Replace function names matching the regex. +for regex in self._replace_function_regex: + # Pattern that matches capture groups in the regex in leftmost order. + group_regex = re.compile('\(.*?\)') + # Replace function name with regex. + match = re.match(regex, func) + if match: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): + func_repl = group_regex.sub(g, func_repl, count=1) +func = '{{' + func_repl + '}}' + + # Replace all calls to regex matching functions. + matches = re.finditer(regex, scrubbed_body) + for match in matches: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): +func_repl = group_regex.sub(g, func_repl, count=1) +# Substitute function call names that match the regex with the same +# capture groups set. +scrubbed_body = re.sub(func_repl, '{{' + func_repl + '}}', scrubbed_body) + self._func_dict[prefix][func] = function_body( scrubbed_body, scrubbed_extra, args_and_sig, attrs) self._func_order[prefix].append(func) @@ -794,6 +822,8 @@ continue # Don't add default values autogenerated_note_args += action.option_strings[0] + ' ' if action.const is None: # action takes a parameter + if action.nargs == '+': +value = ' '.join(map(lambda v: '"' + v.strip('"') + '"', value)) autogenerated_note_args += '%s ' % value if autogenerated_note_args: autogenerated_note_args = ' %s %s' % (UTC_ARGS_KEY, autogenerated_note_args[:-1]) Index: clang/test/utils/update_cc_test_checks/generated-funcs-regex.test === --- /dev/null +++ clang/test/utils/update_cc_test_checks/generated-funcs-regex.test @@ -0,0 +1,9 @@ +## Test that CHECK lines are generated for clang-generated functions replaced +## by regex + +## RUN: cp %S/Inputs/generated-funcs-regex.c %t-generated-funcs-regex.c && %update_cc_test_checks --include-generated-funcs --replace-function-regex "__([a-z]+)_offloading_[a-z0-9]+_[a-z0-9]+_(.*)_l[0-9]+" -- %t-generated-funcs-regex.c +# RUN: diff -u %S/Inputs/generated-funcs-regex.c.expected %t-generated-funcs-regex.c + +## Check that re-running update_cc_test_checks doesn't change the output +# RUN: %update_cc_test_checks %t-generated-funcs-regex.c +# RUN: diff -u %S/Inputs/generated-funcs-regex.c.expected %t-generated-funcs-regex.c Index: clan
[PATCH] D97107: Replace func name with regex for update test scripts
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG5eaf70afb5f8: Replace func name with regex for update test scripts (authored by ggeorgakoudis). Changed prior to commit: https://reviews.llvm.org/D97107?vs=330399&id=330402#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D97107/new/ https://reviews.llvm.org/D97107 Files: clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c clang/test/utils/update_cc_test_checks/Inputs/generated-funcs-regex.c.expected clang/test/utils/update_cc_test_checks/generated-funcs-regex.test llvm/utils/UpdateTestChecks/common.py llvm/utils/update_llc_test_checks.py Index: llvm/utils/update_llc_test_checks.py === --- llvm/utils/update_llc_test_checks.py +++ llvm/utils/update_llc_test_checks.py @@ -109,7 +109,8 @@ flags=type('', (object,), { 'verbose': ti.args.verbose, 'function_signature': False, -'check_attributes': False}), +'check_attributes': False, +'replace_function_regex': []}), scrubber_args=[ti.args]) for prefixes, llc_args, triple_in_cmd, march_in_cmd in run_list: Index: llvm/utils/UpdateTestChecks/common.py === --- llvm/utils/UpdateTestChecks/common.py +++ llvm/utils/UpdateTestChecks/common.py @@ -30,6 +30,8 @@ help='Activate CHECK line generation from this point forward') parser.add_argument('--disable', action='store_false', dest='enabled', help='Deactivate CHECK line generation from this point forward') + parser.add_argument('--replace-function-regex', nargs='+', default=[], + help='List of regular expressions to replace matching function names') args = parser.parse_args() global _verbose _verbose = args.verbose @@ -275,6 +277,8 @@ self._record_args = flags.function_signature self._check_attributes = flags.check_attributes self._scrubber_args = scrubber_args +# Strip double-quotes if input was read by UTC_ARGS +self._replace_function_regex = list(map(lambda x: x.strip('"'), flags.replace_function_regex)) self._func_dict = {} self._func_order = {} self._global_var_dict = {} @@ -348,6 +352,30 @@ self._func_dict[prefix][func] = None continue +# Replace function names matching the regex. +for regex in self._replace_function_regex: + # Pattern that matches capture groups in the regex in leftmost order. + group_regex = re.compile('\(.*?\)') + # Replace function name with regex. + match = re.match(regex, func) + if match: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): + func_repl = group_regex.sub(g, func_repl, count=1) +func = '{{' + func_repl + '}}' + + # Replace all calls to regex matching functions. + matches = re.finditer(regex, scrubbed_body) + for match in matches: +func_repl = regex +# Replace any capture groups with their matched strings. +for g in match.groups(): +func_repl = group_regex.sub(g, func_repl, count=1) +# Substitute function call names that match the regex with the same +# capture groups set. +scrubbed_body = re.sub(func_repl, '{{' + func_repl + '}}', scrubbed_body) + self._func_dict[prefix][func] = function_body( scrubbed_body, scrubbed_extra, args_and_sig, attrs) self._func_order[prefix].append(func) @@ -794,6 +822,8 @@ continue # Don't add default values autogenerated_note_args += action.option_strings[0] + ' ' if action.const is None: # action takes a parameter + if action.nargs == '+': +value = ' '.join(map(lambda v: '"' + v.strip('"') + '"', value)) autogenerated_note_args += '%s ' % value if autogenerated_note_args: autogenerated_note_args = ' %s %s' % (UTC_ARGS_KEY, autogenerated_note_args[:-1]) Index: clang/test/utils/update_cc_test_checks/generated-funcs-regex.test === --- /dev/null +++ clang/test/utils/update_cc_test_checks/generated-funcs-regex.test @@ -0,0 +1,9 @@ +## Test that CHECK lines are generated for clang-generated functions replaced +## by regex + +## RUN: cp %S/Inputs/generated-funcs-regex.c %t-generated-funcs-regex.c && %update_cc_test_checks --include-generated-funcs --replace-function-regex "__([a-z]+)_offloading_[a-z0-9]+_[a-z0-9]+_(.*)_l[0-9]+" -- %t-generated-funcs-regex.c +# RUN: diff -u %S/Inputs/generated-funcs-regex.c.expected %t-generated-funcs-regex.c + +##