mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-26 21:38:13 +00:00
[UTC] Add --version argument
We have a number of pending changes to update_test_checks.py (and friends) that are essentially blocked on test churn: If the output of UTC for an existing flag combination changes, then the next time a test is regenerated, it will contain many spurious changes. This makes changes to UTC default behavior essentially impossible. Examples of such changes are: * D133943/D142373 want --function-signature to also check the return type/attributes. * D139006/D140212 want to make --function-signature the default behavior. * D142452 wants to add wildcards for block labels. This patch tries to resolve this issue by adding a --version argument, which works as follows: * When regenerating an old test, the default version is 1. * When generating a new test, the default version is the newest. When an explicit version is specified, that of course wins. This means that any currently existing tests will keep using --version 1 format, while any new tests will automatically embed --version N where N is the latest version, and then keep using that test format from then on. This patch only implements the --version flag without bumping the default version, so it does not have any visible behavior change by itself. Differential Revision: https://reviews.llvm.org/D142473
This commit is contained in:
parent
bfe63ed1fe
commit
5375b638be
@ -26,6 +26,10 @@ else:
|
|||||||
extra_args = '--clang ' + shell_quote(clang_path)
|
extra_args = '--clang ' + shell_quote(clang_path)
|
||||||
opt_path = os.path.join(config.llvm_tools_dir, 'opt')
|
opt_path = os.path.join(config.llvm_tools_dir, 'opt')
|
||||||
extra_args += ' --opt ' + shell_quote(opt_path)
|
extra_args += ' --opt ' + shell_quote(opt_path)
|
||||||
|
# Specify an explicit default version in UTC tests, so that the --version
|
||||||
|
# embedded in UTC_ARGS does not change in all test expectations every time
|
||||||
|
# the default is bumped.
|
||||||
|
extra_args += ' --version=1'
|
||||||
script_path = os.path.join(config.llvm_src_root, 'utils',
|
script_path = os.path.join(config.llvm_src_root, 'utils',
|
||||||
'update_cc_test_checks.py')
|
'update_cc_test_checks.py')
|
||||||
assert os.path.isfile(script_path)
|
assert os.path.isfile(script_path)
|
||||||
|
@ -15,6 +15,10 @@ def add_update_script_substition(name, python_exe=config.python_executable,
|
|||||||
assert name.startswith('%')
|
assert name.startswith('%')
|
||||||
script_path = os.path.join(config.llvm_src_root, 'utils', name[1:] + '.py')
|
script_path = os.path.join(config.llvm_src_root, 'utils', name[1:] + '.py')
|
||||||
assert os.path.isfile(script_path)
|
assert os.path.isfile(script_path)
|
||||||
|
# Specify an explicit default version in UTC tests, so that the --version
|
||||||
|
# embedded in UTC_ARGS does not change in all test expectations every time
|
||||||
|
# the default is bumped.
|
||||||
|
extra_args += ' --version=1'
|
||||||
config.substitutions.append(
|
config.substitutions.append(
|
||||||
(name, "'%s' %s %s" % (python_exe, script_path, extra_args)))
|
(name, "'%s' %s %s" % (python_exe, script_path, extra_args)))
|
||||||
|
|
||||||
|
@ -18,6 +18,13 @@ from typing import List
|
|||||||
_verbose = False
|
_verbose = False
|
||||||
_prefix_filecheck_ir_name = ''
|
_prefix_filecheck_ir_name = ''
|
||||||
|
|
||||||
|
"""
|
||||||
|
Version changelog:
|
||||||
|
|
||||||
|
1: Initial version, used by tests that don't specify --version explicitly.
|
||||||
|
"""
|
||||||
|
DEFAULT_VERSION = 1
|
||||||
|
|
||||||
class Regex(object):
|
class Regex(object):
|
||||||
"""Wrap a compiled regular expression object to allow deep copy of a regexp.
|
"""Wrap a compiled regular expression object to allow deep copy of a regexp.
|
||||||
This is required for the deep copy done in do_scrub.
|
This is required for the deep copy done in do_scrub.
|
||||||
@ -138,6 +145,10 @@ def parse_commandline_args(parser):
|
|||||||
dest='gen_unused_prefix_body',
|
dest='gen_unused_prefix_body',
|
||||||
default=True,
|
default=True,
|
||||||
help='Generate a function body that always matches for unused prefixes. This is useful when unused prefixes are desired, and it avoids needing to annotate each FileCheck as allowing them.')
|
help='Generate a function body that always matches for unused prefixes. This is useful when unused prefixes are desired, and it avoids needing to annotate each FileCheck as allowing them.')
|
||||||
|
# This is the default when regenerating existing tests. The default when
|
||||||
|
# generating new tests is determined by DEFAULT_VERSION.
|
||||||
|
parser.add_argument('--version', type=int, default=1,
|
||||||
|
help='The version of output format')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
global _verbose, _global_value_regex, _global_hex_value_regex
|
global _verbose, _global_value_regex, _global_hex_value_regex
|
||||||
_verbose = args.verbose
|
_verbose = args.verbose
|
||||||
@ -226,12 +237,18 @@ def itertests(test_patterns, parser, script_name, comment_prefix=None, argparse_
|
|||||||
for test in tests_list:
|
for test in tests_list:
|
||||||
with open(test) as f:
|
with open(test) as f:
|
||||||
input_lines = [l.rstrip() for l in f]
|
input_lines = [l.rstrip() for l in f]
|
||||||
args = parser.parse_args()
|
first_line = input_lines[0] if input_lines else ""
|
||||||
|
is_regenerate = UTC_ADVERT in first_line
|
||||||
|
|
||||||
|
# If we're generating a new test, set the default version to the latest.
|
||||||
|
argv = sys.argv[:]
|
||||||
|
if not is_regenerate:
|
||||||
|
argv.insert(1, '--version=' + str(DEFAULT_VERSION))
|
||||||
|
|
||||||
|
args = parser.parse_args(argv[1:])
|
||||||
if argparse_callback is not None:
|
if argparse_callback is not None:
|
||||||
argparse_callback(args)
|
argparse_callback(args)
|
||||||
argv = sys.argv[:]
|
if is_regenerate:
|
||||||
first_line = input_lines[0] if input_lines else ""
|
|
||||||
if UTC_ADVERT in first_line:
|
|
||||||
if script_name not in first_line and not args.force_update:
|
if script_name not in first_line and not args.force_update:
|
||||||
warn("Skipping test which wasn't autogenerated by " + script_name, test)
|
warn("Skipping test which wasn't autogenerated by " + script_name, test)
|
||||||
continue
|
continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user