Martin Storsjö ba148a1c86 [compiler-rt] [test] [ubsan] Mark failing tests as unsupported for mingw configs
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
2023-04-19 23:05:30 +03:00

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;
}