# markers for tests that are known to fail with versions of libc++ as
# were shipped with a particular triple.
if self.use_system_lib:
- # Drop sub-major version components from the triple, because the
- # current XFAIL handling expects exact matches for feature checks.
- sanitized_triple = re.sub(
- r"([^-]+)-([^-]+)-([^-.]+).*", r"\1-\2-\3",
- self.config.target_triple)
self.config.available_features.add(
- 'with_system_lib=%s' % sanitized_triple)
+ 'with_system_lib=%s' % self.config.target_triple)
if 'libcpp-has-no-threads' in self.config.available_features:
self.compile_flags += ['-D_LIBCPP_HAS_NO_THREADS']
# If no target triple was given, try to infer it from the compiler
# under test.
if not self.config.target_triple:
- self.config.target_triple = lit.util.capture(
+ target_triple = lit.util.capture(
[self.cxx, '-dumpmachine']).strip()
+ # Drop sub-major version components from the triple, because the
+ # current XFAIL handling expects exact matches for feature checks.
+ # Example: x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu.
+ # The 5th group handles triples greater than 3 parts
+ # (ex x86_64-pc-linux-gnu).
+ target_triple = re.sub(r'([^-]+)-([^-]+)-([^.]+)([^-]*)(.*)',
+ r'\1-\2-\3\5', target_triple)
+ # linux-gnu is needed in the triple to properly identify linuxes
+ # that use GLIBC. Handle redhat and opensuse triples as special
+ # cases and append the missing `-gnu` portion.
+ if target_triple.endswith('redhat-linux') or \
+ target_triple.endswith('suse-linux'):
+ target_triple += '-gnu'
+ self.config.target_triple = target_triple
self.lit_config.note(
"inferred target_triple as: %r" % self.config.target_triple)