]> granicus.if.org Git - clang/commitdiff
Loosen the precondition of isCXXInstanceMember() to simply return
authorDouglas Gregor <dgregor@apple.com>
Thu, 8 Mar 2012 02:08:05 +0000 (02:08 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 8 Mar 2012 02:08:05 +0000 (02:08 +0000)
"false" for declarations that aren't members of classes. Fixes PR12106.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152284 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Decl.h
lib/AST/Decl.cpp
test/SemaCXX/enum-scoped.cpp

index ecb879417438c2bb9bb96c8f2c83571746c81221..aafb27e8ab449329677162922b0f6db7894b24e7 100644 (file)
@@ -205,8 +205,8 @@ public:
     return DC->isRecord();
   }
 
-  /// \brief Given that this declaration is a C++ class member,
-  /// determine whether it's an instance member of its class.
+  /// \brief Determine whether the given declaration is an instance member of
+  /// a C++ class.
   bool isCXXInstanceMember() const;
 
   class LinkageInfo {
index d5e048a7c4ad9c8ab7edfbf450595a43b2506248..63f1f16ea65c26e8f7f2a8ccc05cfe4a49e4058b 100644 (file)
@@ -997,9 +997,9 @@ NamedDecl *NamedDecl::getUnderlyingDecl() {
 }
 
 bool NamedDecl::isCXXInstanceMember() const {
-  assert(isCXXClassMember() &&
-         "checking whether non-member is instance member");
-
+  if (!isCXXClassMember())
+    return false;
+  
   const NamedDecl *D = this;
   if (isa<UsingShadowDecl>(D))
     D = cast<UsingShadowDecl>(D)->getTargetDecl();
index 8938c8229c23193906ad2ce9593175d9f5f3c1f4..94cccb28fddf72450611ff6f13f5fc4e79db90cb 100644 (file)
@@ -174,3 +174,13 @@ namespace N2764 {
 }
 
 enum class N2764::B {};
+
+namespace PR12106 {
+  template<typename E> struct Enum {
+    Enum() : m_e(E::Last) {}
+    E m_e;
+  };
+
+  enum eCOLORS { Last };
+  Enum<eCOLORS> e;
+}