mono/CppSharp

Missing implementations for GenericAArch64 ABI

JordanL8 opened this issue · 0 comments

There are a few places in Parser.cpp that switch on the target ABI and then only handle Itanium and Microsoft. An assert is raised for unhandled ABIs.

The methods that do this are:

  • Parser::WalkVTable
  • Parser::GetDeclMangledName

Related, I'm unsure if this is a typo or deliberate but ConvertToClangTargetCXXABI uses TargetCXXABI::GenericARM for AppAbi::AArch64 instead of TargetCXXABI::GenericAArch64.

ConvertToClangTargetCXXABI
static clang::TargetCXXABI::Kind
ConvertToClangTargetCXXABI(CppSharp::CppParser::AST::CppAbi abi)
{
    using namespace clang;

    switch (abi)
    {
    case CppSharp::CppParser::AST::CppAbi::Itanium:
        return TargetCXXABI::GenericItanium;
    case CppSharp::CppParser::AST::CppAbi::Microsoft:
        return TargetCXXABI::Microsoft;
    case CppSharp::CppParser::AST::CppAbi::ARM:
        return TargetCXXABI::GenericARM;
    case CppSharp::CppParser::AST::CppAbi::AArch64:
        return TargetCXXABI::GenericARM;
    case CppSharp::CppParser::AST::CppAbi::iOS:
        return TargetCXXABI::iOS;
    case CppSharp::CppParser::AST::CppAbi::AppleARM64:
        return TargetCXXABI::AppleARM64;
    }

    llvm_unreachable("Unsupported C++ ABI.");
}