Permalink
Browse files

ES/Formats: Work around a GCC bug

In old GCC versions, capturing 'this' does not work for some lambdas.
The workaround is to not use auto for the parameter (even though the
type is obvious). This can be dropped once we require GCC 7.
  • Loading branch information...
leoetlino committed May 24, 2018
1 parent da03ff2 commit 7c6844e895618ae7d14549fc35047b20e00ab8f5
Showing with 6 additions and 2 deletions.
  1. +6 −2 Source/Core/Core/IOS/ES/Formats.cpp
@@ -683,14 +683,18 @@ CertReader::CertReader(std::vector<u8>&& bytes) : SignedBlobReader(std::move(byt
if (!IsSignatureValid())
return;
static constexpr std::array<std::tuple<SignatureType, PublicKeyType, size_t>, 4> types{{
// XXX: in old GCC versions, capturing 'this' does not work for some lambdas. The workaround
// is to not use auto for the parameter (even though the type is obvious).
// This can be dropped once we require GCC 7.
using CertStructInfo = std::tuple<SignatureType, PublicKeyType, size_t>;
static constexpr std::array<CertStructInfo, 4> types{{
{SignatureType::RSA4096, PublicKeyType::RSA2048, sizeof(CertRSA4096RSA2048)},
{SignatureType::RSA2048, PublicKeyType::RSA2048, sizeof(CertRSA2048RSA2048)},
{SignatureType::RSA2048, PublicKeyType::ECC, sizeof(CertRSA2048ECC)},
{SignatureType::ECC, PublicKeyType::ECC, sizeof(CertECC)},
}};
const auto info = std::find_if(types.cbegin(), types.cend(), [this](const auto& entry) {
const auto info = std::find_if(types.cbegin(), types.cend(), [this](const CertStructInfo& entry) {
return m_bytes.size() >= std::get<2>(entry) && std::get<0>(entry) == GetSignatureType() &&
std::get<1>(entry) == GetPublicKeyType();
});

0 comments on commit 7c6844e

Please sign in to comment.