Reviewers: fmayer, vitalybuka Reviewed By: fmayer Pull Request: https://github.com/llvm/llvm-project/pull/181300
23 lines
802 B
C++
23 lines
802 B
C++
// RUN: %clang_cc1 -flto -flto-unit -triple x86_64-unknown-linux -fvisibility=hidden -fsanitize=cfi-vcall,signed-integer-overflow -fsanitize-trap=cfi-vcall,signed-integer-overflow -fsanitize-trap-loop -emit-llvm -o - %s | FileCheck %s
|
|
|
|
struct A {
|
|
virtual void f();
|
|
};
|
|
|
|
void vcall(A *a) {
|
|
// CHECK: [[TEST:%.*]] = call i1 @llvm.type.test
|
|
// CHECK-NEXT: br i1 [[TEST]], label %cont, label %trap
|
|
// CHECK: trap:
|
|
// CHECK-NEXT: call void @llvm.looptrap()
|
|
a->f();
|
|
}
|
|
|
|
int overflow(int a, int b) {
|
|
// CHECK: [[OVERFLOW:%.*]] = extractvalue { i32, i1 } %2, 1, !nosanitize
|
|
// CHECK-NEXT: [[NOTOVERFLOW:%.*]] = xor i1 [[OVERFLOW]], true, !nosanitize
|
|
// CHECK-NEXT: br i1 [[NOTOVERFLOW]], label %cont, label %trap
|
|
// CHECK: trap:
|
|
// CHECK-NEXT: call void @llvm.looptrap()
|
|
return a + b;
|
|
}
|