diff --git a/llvm/test/tools/llvm-nm/AArch64/Inputs/redacted-function.macho-aarch64 b/llvm/test/tools/llvm-nm/AArch64/Inputs/redacted-function.macho-aarch64 new file mode 100755 index 000000000000..eebb208b421c Binary files /dev/null and b/llvm/test/tools/llvm-nm/AArch64/Inputs/redacted-function.macho-aarch64 differ diff --git a/llvm/test/tools/llvm-nm/AArch64/macho-redacted-function.test b/llvm/test/tools/llvm-nm/AArch64/macho-redacted-function.test new file mode 100644 index 000000000000..c662f54c93b6 --- /dev/null +++ b/llvm/test/tools/llvm-nm/AArch64/macho-redacted-function.test @@ -0,0 +1,16 @@ +RUN: llvm-nm %p/Inputs/redacted-function.macho-aarch64 | FileCheck %s + +CHECK: + +# Generated with: +# $ cat /tmp/a.c +# static int i(void) { +# return 0; +# } +# +# int main(void) { +# return i(); +# } +# +# $ xcrun -sdk watchos clang -arch arm64_32 /tmp/a.c -o /tmp/redacted-function.macho-aarch64 +# $ xcrun -sdk watchos strip -N /tmp/redacted-function.macho-aarch64 diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index a34352d1512c..9680149d4f8c 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -316,18 +316,20 @@ struct NMSymbol { static bool compareSymbolAddress(const NMSymbol &A, const NMSymbol &B) { bool ADefined; // Symbol flags have been checked in the caller. - uint32_t AFlags = cantFail(A.Sym.getFlags()); - if (A.Sym.getRawDataRefImpl().p) + if (A.Sym.getRawDataRefImpl().p) { + uint32_t AFlags = cantFail(A.Sym.getFlags()); ADefined = !(AFlags & SymbolRef::SF_Undefined); - else + } else { ADefined = A.TypeChar != 'U'; + } bool BDefined; // Symbol flags have been checked in the caller. - uint32_t BFlags = cantFail(B.Sym.getFlags()); - if (B.Sym.getRawDataRefImpl().p) + if (B.Sym.getRawDataRefImpl().p) { + uint32_t BFlags = cantFail(B.Sym.getFlags()); BDefined = !(BFlags & SymbolRef::SF_Undefined); - else + } else { BDefined = B.TypeChar != 'U'; + } return std::make_tuple(ADefined, A.Address, A.Name, A.Size) < std::make_tuple(BDefined, B.Address, B.Name, B.Size); }