diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-06-13 06:43:46 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-06-13 06:43:46 +0000 |
commit | 5ef4fe7d8ee31c83c4ebc118b21402e7ea14c9f2 (patch) | |
tree | 79980d6f431d51e6a67a82a3c2ded0d0069762b2 /clang/lib/AST/MicrosoftCXXABI.cpp | |
parent | 825fb0b0945146d8c413e750cef4754af2bf6631 (diff) |
MS ABI: Fix inheritance model calculation in CRTP
CRTP-like patterns involve a class which inherits from another class
using itself as a template parameter.
However, the base class itself may try to create a pointer-to-member
which involves the derived class. This is problematic because we
may not have finished parsing the most derived classes' base specifiers
yet.
It turns out that MSVC simply uses the unspecified inheritance model
instead of doing anything fancy.
This fixes PR19987.
llvm-svn: 210886
Diffstat (limited to 'clang/lib/AST/MicrosoftCXXABI.cpp')
-rw-r--r-- | clang/lib/AST/MicrosoftCXXABI.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/AST/MicrosoftCXXABI.cpp b/clang/lib/AST/MicrosoftCXXABI.cpp index 359e8648278e..6870315b2160 100644 --- a/clang/lib/AST/MicrosoftCXXABI.cpp +++ b/clang/lib/AST/MicrosoftCXXABI.cpp @@ -93,7 +93,7 @@ static bool usesMultipleInheritanceModel(const CXXRecordDecl *RD) { } MSInheritanceAttr::Spelling CXXRecordDecl::calculateInheritanceModel() const { - if (!hasDefinition()) + if (!hasDefinition() || isParsingBaseSpecifiers()) return MSInheritanceAttr::Keyword_unspecified_inheritance; if (getNumVBases() > 0) return MSInheritanceAttr::Keyword_virtual_inheritance; |