struct stat DirSt;
if (stat(Dir, &DirSt) == -1)
Ret = -1;
- else if ((DirSt.st_mode & ~S_ISGID) != Expected) {
+ // AIX has some extended definition of high order bits for st_mode, avoid trying to comparing those by masking them off.
+ else if (((DirSt.st_mode & ~S_ISGID) & 0xFFFF) != Expected) {
printf("Modes do not match: Expected %o but found %o (%s)\n", Expected,
DirSt.st_mode, Dir);
Ret = -1;
// Test that the specified output merges the profiling data.
// Run the program twice so that the counters accumulate.
-// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s
+// RUN: %clang_profgen -fcoverage-mapping -o %t %s
// RUN: rm -f %t.merging.profraw %t.merging.profdata
// RUN: %run %t %t.merging.profraw
// RUN: %run %t %t.merging.profraw
lto_prefix += config.lto_launch
return " " + " ".join(lto_prefix + [config.clang] + lto_flags + compile_flags) + " "
+def exclude_unsupported_files_for_aix(dirname):
+ for filename in os.listdir(dirname):
+ source_path = os.path.join( dirname, filename)
+ if os.path.isdir(source_path):
+ continue
+ f = open(source_path, 'r')
+ try:
+ data = f.read()
+ # -fprofile-instr-generate and rpath are not supported on AIX, exclude all tests with them.
+ if ("%clang_profgen" in data or "%clangxx_profgen" in data or "-rpath" in data):
+ config.excludes += [ filename ]
+ finally:
+ f.close()
+
# Add clang substitutions.
config.substitutions.append( ("%clang ", build_invocation(clang_cflags)) )
config.substitutions.append( ("%clangxx ", build_invocation(clang_cxxflags)) )
config.substitutions.append( ("%clang_lto_profgen=", build_invocation(clang_cflags, True) + " -fprofile-instr-generate=") )
-if config.host_os not in ['Windows', 'Darwin', 'FreeBSD', 'Linux', 'NetBSD', 'SunOS']:
+if config.host_os not in ['Windows', 'Darwin', 'FreeBSD', 'Linux', 'NetBSD', 'SunOS', 'AIX']:
config.unsupported = True
+if config.host_os in ['AIX']:
+ config.available_features.add('system-aix')
+ exclude_unsupported_files_for_aix(config.test_source_root)
+ exclude_unsupported_files_for_aix(config.test_source_root + "/Posix")
+
if config.target_arch in ['armv7l']:
config.unsupported = True