forked from OSchip/llvm-project
43 lines
849 B
C++
43 lines
849 B
C++
// A global constructor from a non-instrumented part calls a function
|
|
// in an instrumented part.
|
|
// Regression test for https://code.google.com/p/address-sanitizer/issues/detail?id=363.
|
|
|
|
// RUN: %clangxx -DINSTRUMENTED_PART=0 -c %s -o %t-uninst.o
|
|
// RUN: %clangxx_asan -DINSTRUMENTED_PART=1 -c %s -o %t-inst.o
|
|
// RUN: %clangxx_asan %t-uninst.o %t-inst.o -o %t
|
|
|
|
// RUN: %run %t 2>&1 | FileCheck %s
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
void func(char *ptr);
|
|
|
|
#if INSTRUMENTED_PART == 1
|
|
|
|
void func(char *ptr) {
|
|
*ptr = 'X';
|
|
}
|
|
|
|
#else // INSTRUMENTED_PART == 1
|
|
|
|
struct C1 {
|
|
C1() {
|
|
printf("Hello ");
|
|
char buffer[10] = "world";
|
|
func(buffer);
|
|
printf("%s\n", buffer);
|
|
}
|
|
};
|
|
|
|
C1 *obj = new C1();
|
|
|
|
int main(int argc, const char *argv[]) {
|
|
return 0;
|
|
}
|
|
|
|
#endif // INSTRUMENTED_PART == 1
|
|
|
|
// CHECK: Hello Xorld
|