diff --git a/libcxx/utils/libcxx/test/dsl.py b/libcxx/utils/libcxx/test/dsl.py --- a/libcxx/utils/libcxx/test/dsl.py +++ b/libcxx/utils/libcxx/test/dsl.py @@ -52,13 +52,14 @@ res = ('', '', 127, None) return res -def _makeConfigTest(config): +def _makeConfigTest(config, testPrefix=None): sourceRoot = os.path.join(config.test_exec_root, '__config_src__') execRoot = os.path.join(config.test_exec_root, '__config_exec__') suite = lit.Test.TestSuite('__config__', sourceRoot, execRoot, config) if not os.path.exists(sourceRoot): os.makedirs(sourceRoot) - tmp = tempfile.NamedTemporaryFile(dir=sourceRoot, delete=False, suffix='.cpp') + tmp = tempfile.NamedTemporaryFile(dir=sourceRoot, delete=False, suffix='.cpp', + prefix=testPrefix) tmp.close() pathInSuite = [os.path.relpath(tmp.name, sourceRoot)] class TestWrapper(lit.Test.Test): @@ -82,7 +83,7 @@ _executeScriptInternal(test, ['rm %t.exe']) return exitCode == 0 -def programOutput(config, program, args=[]): +def programOutput(config, program, args=[], testPrefix=None): """ Compiles a program for the test target, run it on the test target and return the output. @@ -91,7 +92,7 @@ execution of the program is done through the %{exec} substitution, which means that the program may be run on a remote host depending on what %{exec} does. """ - with _makeConfigTest(config) as test: + with _makeConfigTest(config, testPrefix=testPrefix) as test: with open(test.getSourcePath(), 'w') as source: source.write(program) try: @@ -142,7 +143,8 @@ else return 1; } """ - return programOutput(config, program, args=[pipes.quote(locale)]) != None + return programOutput(config, program, args=[pipes.quote(locale)], + testPrefix="check_locale_" + locale) is not None def compilerMacros(config, flags=''): """ diff --git a/libcxx/utils/libcxx/test/features.py b/libcxx/utils/libcxx/test/features.py --- a/libcxx/utils/libcxx/test/features.py +++ b/libcxx/utils/libcxx/test/features.py @@ -104,10 +104,10 @@ 'cs_CZ.ISO8859-2': ['cs_CZ.ISO8859-2', 'Czech_Czech Republic.1250'] } for locale, alts in locales.items(): - DEFAULT_FEATURES += [ - Feature(name='locale.{}'.format(locale), - when=lambda cfg: any(hasLocale(cfg, alt) for alt in alts)) - ] + # Note: Using alts directly in the lambda body here will bind it to the value at the + # end of the loop. Assigning it to a default argument works around this issue. + DEFAULT_FEATURES.append(Feature(name='locale.{}'.format(locale), + when=lambda cfg, alts=alts: any(hasLocale(cfg, alt) for alt in alts))) # Add features representing the platform name: darwin, linux, windows, etc...