diff options
Diffstat (limited to 'test/asan/TestCases/Darwin/odr-lto.cpp')
-rw-r--r-- | test/asan/TestCases/Darwin/odr-lto.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/asan/TestCases/Darwin/odr-lto.cpp b/test/asan/TestCases/Darwin/odr-lto.cpp new file mode 100644 index 000000000..e1e454be0 --- /dev/null +++ b/test/asan/TestCases/Darwin/odr-lto.cpp @@ -0,0 +1,39 @@ +// Check that -asan-use-private-alias silence the false +// positive ODR violation on Darwin with LTO. + +// REQUIRES: lto + +// 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: %run %t 2>&1 | FileCheck %s + +#include <stdio.h> +#include <stdlib.h> +void putstest(); + +#if PART == 1 + +static const char *my_global = "test\n\00abc"; + +int main() +{ + fputs(my_global, stderr); + putstest(); + fprintf(stderr, "Done.\n"); + return 0; +} + +#else // PART == 1 + +static const char *my_other_global = "test\n\00abc"; + +void putstest() +{ + fputs(my_other_global, stderr); +} + +#endif // PART == 1 + +// CHECK-NOT: ERROR: AddressSanitizer: odr-violation +// CHECK: Done. |