All of these are already unsupported for MSVC style configs. For some cases, simplify the regex to match any windows triple, while for others, mention windows-msvc and windows-gnu specifically, if they are separate cases that happen to fail for different reasons. -fsanitize=function is unsupported both in mingw and MSVC modes. The vptr tests expect to get demangled C++ type info names, but Itanium C++ typenames don't get demangled by ubsan on Windows. The test that tries to build a .so doesn't work as such on Windows. While mingw toolchains do support weak symbols, the relevant sanitizer symbols aren't made weak on Windows. Differential Revision: https://reviews.llvm.org/D148163
47 lines
1.3 KiB
C++
47 lines
1.3 KiB
C++
// RUN: %clangxx -w -fsanitize=bool -fno-sanitize-memory-param-retval %s -o %t
|
|
// RUN: %run %t 2>&1 | FileCheck %s
|
|
|
|
// __ubsan_on_report is not defined as weak. Redefining it here isn't supported
|
|
// on Windows.
|
|
//
|
|
// UNSUPPORTED: target={{.*windows.*}}
|
|
// Linkage issue
|
|
// XFAIL: target={{.*openbsd.*}}
|
|
|
|
#include <cstdio>
|
|
|
|
// Override __ubsan_on_report() from the runtime, just for testing purposes.
|
|
// Required for dyld macOS 12.0+
|
|
#if (__APPLE__)
|
|
__attribute__((weak))
|
|
#endif
|
|
extern "C" void
|
|
__ubsan_on_report(void) {
|
|
void __ubsan_get_current_report_data(
|
|
const char **OutIssueKind, const char **OutMessage,
|
|
const char **OutFilename, unsigned *OutLine, unsigned *OutCol,
|
|
char **OutMemoryAddr);
|
|
const char *IssueKind, *Message, *Filename;
|
|
unsigned Line, Col;
|
|
char *Addr;
|
|
|
|
__ubsan_get_current_report_data(&IssueKind, &Message, &Filename, &Line, &Col,
|
|
&Addr);
|
|
|
|
printf("Issue: %s\n", IssueKind);
|
|
printf("Location: %s:%u:%u\n", Filename, Line, Col);
|
|
printf("Message: %s\n", Message);
|
|
fflush(stdout);
|
|
|
|
(void)Addr;
|
|
}
|
|
|
|
int main() {
|
|
char C = 3;
|
|
bool B = *(bool *)&C;
|
|
// CHECK: Issue: invalid-bool-load
|
|
// CHECK-NEXT: Location: {{.*}}monitor.cpp:[[@LINE-2]]:12
|
|
// CHECK-NEXT: Message: Load of value 3, which is not a valid value for type 'bool'
|
|
return 0;
|
|
}
|