xref: /openbsd-src/gnu/llvm/compiler-rt/lib/sanitizer_common/tests/sanitizer_symbolizer_test.cpp (revision 3cab2bb3f667058bece8e38b12449a63a9d73c4b)
1*3cab2bb3Spatrick //===-- sanitizer_symbolizer_test.cpp -------------------------------------===//
2*3cab2bb3Spatrick //
3*3cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*3cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*3cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*3cab2bb3Spatrick //
7*3cab2bb3Spatrick //===----------------------------------------------------------------------===//
8*3cab2bb3Spatrick //
9*3cab2bb3Spatrick // Tests for sanitizer_symbolizer.h and sanitizer_symbolizer_internal.h
10*3cab2bb3Spatrick //
11*3cab2bb3Spatrick //===----------------------------------------------------------------------===//
12*3cab2bb3Spatrick 
13*3cab2bb3Spatrick #include "sanitizer_common/sanitizer_allocator_internal.h"
14*3cab2bb3Spatrick #include "sanitizer_common/sanitizer_symbolizer_internal.h"
15*3cab2bb3Spatrick #include "gtest/gtest.h"
16*3cab2bb3Spatrick 
17*3cab2bb3Spatrick namespace __sanitizer {
18*3cab2bb3Spatrick 
TEST(Symbolizer,ExtractToken)19*3cab2bb3Spatrick TEST(Symbolizer, ExtractToken) {
20*3cab2bb3Spatrick   char *token;
21*3cab2bb3Spatrick   const char *rest;
22*3cab2bb3Spatrick 
23*3cab2bb3Spatrick   rest = ExtractToken("a;b;c", ";", &token);
24*3cab2bb3Spatrick   EXPECT_STREQ("a", token);
25*3cab2bb3Spatrick   EXPECT_STREQ("b;c", rest);
26*3cab2bb3Spatrick   InternalFree(token);
27*3cab2bb3Spatrick 
28*3cab2bb3Spatrick   rest = ExtractToken("aaa-bbb.ccc", ";.-*", &token);
29*3cab2bb3Spatrick   EXPECT_STREQ("aaa", token);
30*3cab2bb3Spatrick   EXPECT_STREQ("bbb.ccc", rest);
31*3cab2bb3Spatrick   InternalFree(token);
32*3cab2bb3Spatrick }
33*3cab2bb3Spatrick 
TEST(Symbolizer,ExtractInt)34*3cab2bb3Spatrick TEST(Symbolizer, ExtractInt) {
35*3cab2bb3Spatrick   int token;
36*3cab2bb3Spatrick   const char *rest = ExtractInt("123,456;789", ";,", &token);
37*3cab2bb3Spatrick   EXPECT_EQ(123, token);
38*3cab2bb3Spatrick   EXPECT_STREQ("456;789", rest);
39*3cab2bb3Spatrick }
40*3cab2bb3Spatrick 
TEST(Symbolizer,ExtractUptr)41*3cab2bb3Spatrick TEST(Symbolizer, ExtractUptr) {
42*3cab2bb3Spatrick   uptr token;
43*3cab2bb3Spatrick   const char *rest = ExtractUptr("123,456;789", ";,", &token);
44*3cab2bb3Spatrick   EXPECT_EQ(123U, token);
45*3cab2bb3Spatrick   EXPECT_STREQ("456;789", rest);
46*3cab2bb3Spatrick }
47*3cab2bb3Spatrick 
TEST(Symbolizer,ExtractTokenUpToDelimiter)48*3cab2bb3Spatrick TEST(Symbolizer, ExtractTokenUpToDelimiter) {
49*3cab2bb3Spatrick   char *token;
50*3cab2bb3Spatrick   const char *rest =
51*3cab2bb3Spatrick       ExtractTokenUpToDelimiter("aaa-+-bbb-+-ccc", "-+-", &token);
52*3cab2bb3Spatrick   EXPECT_STREQ("aaa", token);
53*3cab2bb3Spatrick   EXPECT_STREQ("bbb-+-ccc", rest);
54*3cab2bb3Spatrick   InternalFree(token);
55*3cab2bb3Spatrick }
56*3cab2bb3Spatrick 
57*3cab2bb3Spatrick #if !SANITIZER_WINDOWS
TEST(Symbolizer,DemangleSwiftAndCXX)58*3cab2bb3Spatrick TEST(Symbolizer, DemangleSwiftAndCXX) {
59*3cab2bb3Spatrick   // Swift names are not demangled in default llvm build because Swift
60*3cab2bb3Spatrick   // runtime is not linked in.
61*3cab2bb3Spatrick   EXPECT_STREQ("_TtSd", DemangleSwiftAndCXX("_TtSd"));
62*3cab2bb3Spatrick   // Check that the rest demangles properly.
63*3cab2bb3Spatrick   EXPECT_STREQ("f1(char*, int)", DemangleSwiftAndCXX("_Z2f1Pci"));
64*3cab2bb3Spatrick #if !SANITIZER_FREEBSD // QoI issue with libcxxrt on FreeBSD
65*3cab2bb3Spatrick   EXPECT_STREQ("foo", DemangleSwiftAndCXX("foo"));
66*3cab2bb3Spatrick #endif
67*3cab2bb3Spatrick   EXPECT_STREQ("", DemangleSwiftAndCXX(""));
68*3cab2bb3Spatrick }
69*3cab2bb3Spatrick #endif
70*3cab2bb3Spatrick 
71*3cab2bb3Spatrick }  // namespace __sanitizer
72