
Recently, Solaris bootstrap got broken because Solaris uses a non-standard mangling of `std::tm` and a few others. This was fixed with a hack in PR #100724. The Solaris ABI requires mangling `std::tm` as `tm` and similarly for `std::div_t`, `std::ldiv_t`, and `std::lconv`, which is what this patch implements. The hack needs to stay in place to allow building with older versions of `clang`. Tested on `amd64-pc-solaris2.11`, `sparcv9-sun-solaris2.11` (2-stage builds with both `clang-19` and `gcc-14` as build compiler), and `x86_64-pc-linux-gnu`.
35 lines
955 B
C++
35 lines
955 B
C++
/// Check that std::tm and a few others are mangled as tm on Solaris only.
|
|
/// Issue #33114.
|
|
///
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple amd64-pc-solaris2.11 | FileCheck --check-prefix=CHECK-SOLARIS %s
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-unknown-linux-gnu | FileCheck --check-prefix=CHECK-LINUX %s
|
|
//
|
|
// REQUIRES: x86-registered-target
|
|
|
|
namespace std {
|
|
extern "C" {
|
|
struct tm {
|
|
int tm_sec;
|
|
};
|
|
struct ldiv_t {
|
|
long quot;
|
|
};
|
|
}
|
|
}
|
|
|
|
// CHECK-SOLARIS: @_Z6tmfunc2tm
|
|
// CHECK-SOLARIS: @_Z9tmccpfunc2tmPKcS1_
|
|
// CHECK-SOLARIS: @_Z7tm2func2tmS_
|
|
// CHECK-LINUX: @_Z6tmfuncSt2tm
|
|
// CHECK-LINUX: @_Z9tmccpfuncSt2tmPKcS1_
|
|
// CHECK-LINUX: @_Z7tm2funcSt2tmS_
|
|
|
|
void tmfunc (std::tm tm) {}
|
|
void tmccpfunc (std::tm tm, const char *ccp, const char *ccp2) {}
|
|
void tm2func (std::tm tm, std::tm tm2) {}
|
|
|
|
// CHECK-SOLARIS: @_Z7ldtfunc6ldiv_t
|
|
// CHECK-LINUX: @_Z7ldtfuncSt6ldiv_t
|
|
|
|
void ldtfunc (std::ldiv_t ldt) {}
|