diff options
Diffstat (limited to 'lib/AST/MicrosoftCXXABI.cpp')
| -rw-r--r-- | lib/AST/MicrosoftCXXABI.cpp | 21 | 
1 files changed, 21 insertions, 0 deletions
| diff --git a/lib/AST/MicrosoftCXXABI.cpp b/lib/AST/MicrosoftCXXABI.cpp index 6870315b2160..0603d3b7b9b5 100644 --- a/lib/AST/MicrosoftCXXABI.cpp +++ b/lib/AST/MicrosoftCXXABI.cpp @@ -28,7 +28,28 @@ namespace {  /// \brief Numbers things which need to correspond across multiple TUs.  /// Typically these are things like static locals, lambdas, or blocks.  class MicrosoftNumberingContext : public MangleNumberingContext { +  llvm::DenseMap<const Type *, unsigned> ManglingNumbers; +  unsigned LambdaManglingNumber; +  unsigned StaticLocalNumber; +  public: +  MicrosoftNumberingContext() +      : MangleNumberingContext(), LambdaManglingNumber(0), +        StaticLocalNumber(0) {} + +  unsigned getManglingNumber(const CXXMethodDecl *CallOperator) override { +    return ++LambdaManglingNumber; +  } + +  unsigned getManglingNumber(const BlockDecl *BD) override { +    const Type *Ty = nullptr; +    return ++ManglingNumbers[Ty]; +  } + +  unsigned getStaticLocalNumber(const VarDecl *VD) override { +    return ++StaticLocalNumber; +  } +    unsigned getManglingNumber(const VarDecl *VD,                               unsigned MSLocalManglingNumber) override {      return MSLocalManglingNumber; | 
