Always enable proper symbolize implementation on Windows (#257)
This commit is contained in:
parent
2796d500ae
commit
ecc0033b54
5 changed files with 45 additions and 17 deletions
|
|
@ -35,10 +35,29 @@
|
|||
|
||||
using testing::Contains;
|
||||
|
||||
#ifdef _WIN32
|
||||
#define ABSL_SYMBOLIZE_TEST_NOINLINE __declspec(noinline)
|
||||
#else
|
||||
#define ABSL_SYMBOLIZE_TEST_NOINLINE ABSL_ATTRIBUTE_NOINLINE
|
||||
#endif
|
||||
|
||||
// Functions to symbolize. Use C linkage to avoid mangled names.
|
||||
extern "C" {
|
||||
void nonstatic_func() { ABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); }
|
||||
static void static_func() { ABSL_BLOCK_TAIL_CALL_OPTIMIZATION(); }
|
||||
ABSL_SYMBOLIZE_TEST_NOINLINE void nonstatic_func() {
|
||||
// The next line makes this a unique function to prevent the compiler from
|
||||
// folding identical functions together.
|
||||
volatile int x = __LINE__;
|
||||
static_cast<void>(x);
|
||||
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
||||
}
|
||||
|
||||
ABSL_SYMBOLIZE_TEST_NOINLINE static void static_func() {
|
||||
// The next line makes this a unique function to prevent the compiler from
|
||||
// folding identical functions together.
|
||||
volatile int x = __LINE__;
|
||||
static_cast<void>(x);
|
||||
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
||||
}
|
||||
} // extern "C"
|
||||
|
||||
struct Foo {
|
||||
|
|
@ -46,7 +65,11 @@ struct Foo {
|
|||
};
|
||||
|
||||
// A C++ method that should have a mangled name.
|
||||
void ABSL_ATTRIBUTE_NOINLINE Foo::func(int) {
|
||||
ABSL_SYMBOLIZE_TEST_NOINLINE void Foo::func(int) {
|
||||
// The next line makes this a unique function to prevent the compiler from
|
||||
// folding identical functions together.
|
||||
volatile int x = __LINE__;
|
||||
static_cast<void>(x);
|
||||
ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
|
||||
}
|
||||
|
||||
|
|
@ -449,14 +472,14 @@ void ABSL_ATTRIBUTE_NOINLINE TestWithReturnAddress() {
|
|||
#endif
|
||||
}
|
||||
|
||||
#elif defined(_WIN32) && defined(_DEBUG)
|
||||
#elif defined(_WIN32)
|
||||
|
||||
TEST(Symbolize, Basics) {
|
||||
EXPECT_STREQ("nonstatic_func", TrySymbolize((void *)(&nonstatic_func)));
|
||||
|
||||
// The name of an internal linkage symbol is not specified; allow either a
|
||||
// mangled or an unmangled name here.
|
||||
const char* static_func_symbol = TrySymbolize((void *)(&static_func));
|
||||
const char *static_func_symbol = TrySymbolize((void *)(&static_func));
|
||||
ASSERT_TRUE(static_func_symbol != nullptr);
|
||||
EXPECT_TRUE(strstr(static_func_symbol, "static_func") != nullptr);
|
||||
|
||||
|
|
@ -483,7 +506,7 @@ TEST(Symbolize, Truncation) {
|
|||
}
|
||||
|
||||
TEST(Symbolize, SymbolizeWithDemangling) {
|
||||
const char* result = TrySymbolize((void *)(&Foo::func));
|
||||
const char *result = TrySymbolize((void *)(&Foo::func));
|
||||
ASSERT_TRUE(result != nullptr);
|
||||
EXPECT_TRUE(strstr(result, "Foo::func") != nullptr) << result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue