diff options
| -rw-r--r-- | compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc | 41 | ||||
| -rw-r--r-- | compiler-rt/test/lit.common.cfg | 3 | ||||
| -rw-r--r-- | compiler-rt/test/safestack/lit.cfg | 1 |
3 files changed, 44 insertions, 1 deletions
diff --git a/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc b/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc new file mode 100644 index 00000000000..23f1e05c3e1 --- /dev/null +++ b/compiler-rt/test/asan/TestCases/Darwin/odr-lto.cc @@ -0,0 +1,41 @@ +// Check that -asan-use-private-alias and use_odr_indicator=1 silence the false +// positive ODR violation on Darwin with LTO. + +// REQUIRES: lto + +// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto +// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto +// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto +// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ODR + +// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto -mllvm -asan-use-private-alias +// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto -mllvm -asan-use-private-alias +// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto +// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ODR + +#include <stdio.h> +#include <stdlib.h> +void putstest(); + +#if PART == 1 + +int main() +{ + fputs("test\n", stderr); + putstest(); + fprintf(stderr, "Done.\n"); + return 0; +} + +#else // PART == 1 + +void putstest() +{ + fputs("test\n", stderr); +} + +#endif // PART == 1 + +// CHECK-ODR: ERROR: AddressSanitizer: odr-violation +// CHECK-NO-ODR-NOT: ERROR: AddressSanitizer: odr-violation +// CHECK-NO-ODR: Done. diff --git a/compiler-rt/test/lit.common.cfg b/compiler-rt/test/lit.common.cfg index 9c5e7d0b74c..d4e7eb31062 100644 --- a/compiler-rt/test/lit.common.cfg +++ b/compiler-rt/test/lit.common.cfg @@ -177,6 +177,9 @@ elif config.host_os == 'Windows' and is_windows_lto_supported(): else: config.lto_supported = False +if config.lto_supported: + config.available_features.add('lto') + # Ask llvm-config about assertion mode. try: llvm_config_cmd = subprocess.Popen( diff --git a/compiler-rt/test/safestack/lit.cfg b/compiler-rt/test/safestack/lit.cfg index 535c09742ca..d4ec73ce703 100644 --- a/compiler-rt/test/safestack/lit.cfg +++ b/compiler-rt/test/safestack/lit.cfg @@ -16,7 +16,6 @@ config.substitutions.append( ("%clang_nosafestack ", config.clang + " -O0 -fno-s config.substitutions.append( ("%clang_safestack ", config.clang + " -O0 -fsanitize=safe-stack ") ) if config.lto_supported: - config.available_features.add('lto') config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=safe-stack ']))) # SafeStack tests are currently supported on Linux, FreeBSD and Darwin only. |

