diff options
Diffstat (limited to 'clang/lib/AST/MicrosoftCXXABI.cpp')
| -rw-r--r-- | clang/lib/AST/MicrosoftCXXABI.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/AST/MicrosoftCXXABI.cpp b/clang/lib/AST/MicrosoftCXXABI.cpp index b7dc0e62e66a..7f4a7b2b9381 100644 --- a/clang/lib/AST/MicrosoftCXXABI.cpp +++ b/clang/lib/AST/MicrosoftCXXABI.cpp @@ -69,6 +69,7 @@ class MSHIPNumberingContext : public MicrosoftNumberingContext { std::unique_ptr<MangleNumberingContext> DeviceCtx; public: + using MicrosoftNumberingContext::getManglingNumber; MSHIPNumberingContext(MangleContext *DeviceMangler) { DeviceCtx = createItaniumNumberingContext(DeviceMangler); } @@ -76,6 +77,20 @@ public: unsigned getDeviceManglingNumber(const CXXMethodDecl *CallOperator) override { return DeviceCtx->getManglingNumber(CallOperator); } + + unsigned getManglingNumber(const TagDecl *TD, + unsigned MSLocalManglingNumber) override { + unsigned DeviceN = DeviceCtx->getManglingNumber(TD, MSLocalManglingNumber); + unsigned HostN = + MicrosoftNumberingContext::getManglingNumber(TD, MSLocalManglingNumber); + if (DeviceN > 0xFFFF || HostN > 0xFFFF) { + DiagnosticsEngine &Diags = TD->getASTContext().getDiagnostics(); + unsigned DiagID = Diags.getCustomDiagID( + DiagnosticsEngine::Error, "Mangling number exceeds limit (65535)"); + Diags.Report(TD->getLocation(), DiagID); + } + return (DeviceN << 16) | HostN; + } }; class MSSYCLNumberingContext : public MicrosoftNumberingContext { |
