mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
763ff400ea
Sometimes, llvm-symbolizer gives wrong results due to incorrect sizes of some symbols. The reason for that was an incorrectly sorted array in computeSymbolSizes. The comparison function used subtraction of unsigned types, which is incorrect. Let's change this to return explicit -1 or 1. Differential Revision: https://reviews.llvm.org/D26537 llvm-svn: 287028
34 lines
1.1 KiB
C++
34 lines
1.1 KiB
C++
//===- SymbolSizeTest.cpp - Tests for SymbolSize.cpp ----------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Object/SymbolSize.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
using namespace llvm::object;
|
|
|
|
TEST(Object, SymbolSizeSort) {
|
|
auto it = symbol_iterator(SymbolRef());
|
|
std::vector<SymEntry> Syms{
|
|
SymEntry{it, 0xffffffff00000000ull, 1, 0},
|
|
SymEntry{it, 0x00ffffff00000000ull, 2, 0},
|
|
SymEntry{it, 0x00ffffff000000ffull, 3, 0},
|
|
SymEntry{it, 0x0000000100000000ull, 4, 0},
|
|
SymEntry{it, 0x00000000000000ffull, 5, 0},
|
|
SymEntry{it, 0x00000001000000ffull, 6, 0},
|
|
SymEntry{it, 0x000000010000ffffull, 7, 0},
|
|
};
|
|
|
|
array_pod_sort(Syms.begin(), Syms.end(), compareAddress);
|
|
|
|
for (unsigned I = 0, N = Syms.size(); I < N - 1; ++I) {
|
|
EXPECT_LE(Syms[I].Address, Syms[I + 1].Address);
|
|
}
|
|
}
|