| // Test that mixing instrumented and non-instrumented code doesn't lead to crash. |
| // Build two modules (one is instrumented, another is not) that have globals |
| // with same names. Check, that ASan doesn't crash with CHECK failure or |
| // false positive global-buffer-overflow due to sanitized library poisons |
| // globals from non-sanitized one. |
| // |
| // FIXME: https://github.com/google/sanitizers/issues/316 |
| // XFAIL: android |
| // |
| // RUN: %clangxx_asan -DBUILD_INSTRUMENTED_DSO=1 -fPIC -shared -mllvm -asan-use-private-alias %s -o %t-INSTRUMENTED-SO.so |
| // RUN: %clangxx -DBUILD_UNINSTRUMENTED_DSO=1 -fPIC -shared %s -o %t-UNINSTRUMENTED-SO.so |
| // RUN: %clangxx %s -c -mllvm -asan-use-private-alias -o %t.o |
| // RUN: %clangxx_asan %t.o %t-UNINSTRUMENTED-SO.so %t-INSTRUMENTED-SO.so -o %t-EXE |
| // RUN: %env_asan_opts=use_odr_indicator=true %run %t-EXE |
| |
| #if defined (BUILD_INSTRUMENTED_DSO) |
| long h = 15; |
| long f = 4; |
| long foo(long *p) { |
| return *p; |
| } |
| #elif defined (BUILD_UNINSTRUMENTED_DSO) |
| long foo(long *); |
| long h = 12; |
| long i = 13; |
| long f = 5; |
| |
| int bar() { |
| if (foo(&f) != 5 || foo(&h) != 12 || foo(&i) != 13) |
| return 1; |
| return 0; |
| } |
| #else |
| extern int bar(); |
| |
| int main() { |
| return bar(); |
| } |
| #endif |