Files
llvm-project/compiler-rt/test/cfi/target_uninstrumented.cpp
Aiden Grossman c12f08f645 Reapply "[compiler-rt] Remove %T from shared object substitutions (#155302)"
This reverts commit 05e31438ac.

There was quite a bit of churn with this patch, everytime related to the executable
no longer being in the same directory as the shared objects. This reland ensures
that all of the executables in the tests touched are in the same directory as the
shared objects in the substitutions.
2025-09-21 19:49:08 +00:00

49 lines
1.1 KiB
C++

// RUN: mkdir -p %t.dir && cd %t.dir
// RUN: %clangxx -g -DSHARED_LIB %s -fPIC -shared -o %dynamiclib %ld_flags_rpath_so
// RUN: %clangxx_cfi_diag -g %s -o %t.dir/EXE %ld_flags_rpath_exe
// RUN: %run %t.dir/EXE 2>&1 | FileCheck %s
// REQUIRES: cxxabi
// UNSUPPORTED: target={{.*windows-msvc.*}}
#include <stdio.h>
#include <string.h>
struct A {
virtual void f();
};
void *create_B();
#ifdef SHARED_LIB
struct B {
virtual void f();
};
void B::f() {}
void *create_B() {
return (void *)(new B());
}
#else
void A::f() {}
int main(int argc, char *argv[]) {
void *p = create_B();
// CHECK: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
// CHECK: invalid vtable
// CHECK: check failed in {{.*}}, vtable located in {{.*}}libtarget_uninstrumented.cpp.dynamic.so
A *a = (A *)p;
memset(p, 0, sizeof(A));
// CHECK: runtime error: control flow integrity check for type 'A' failed during cast to unrelated type
// CHECK: invalid vtable
// CHECK: check failed in {{.*}}, vtable located in (unknown)
a = (A *)p;
// CHECK: done
fprintf(stderr, "done %p\n", a);
}
#endif