[cfe-commits] r144582 - in /cfe/trunk: lib/Sema/SemaAccess.cpp test/SemaTemplate/crash-10438657.cpp

Douglas Gregor dgregor at apple.com
Mon Nov 14 15:00:44 PST 2011


Author: dgregor
Date: Mon Nov 14 17:00:43 2011
New Revision: 144582

URL: http://llvm.org/viewvc/llvm-project?rev=144582&view=rev
Log:
When we're checking access in a dependent context, don't try to look
at the bases of an undefined class. Fixes <rdar://problem/10438657>.

Added:
    cfe/trunk/test/SemaTemplate/crash-10438657.cpp
Modified:
    cfe/trunk/lib/Sema/SemaAccess.cpp

Modified: cfe/trunk/lib/Sema/SemaAccess.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaAccess.cpp?rev=144582&r1=144581&r2=144582&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaAccess.cpp (original)
+++ cfe/trunk/lib/Sema/SemaAccess.cpp Mon Nov 14 17:00:43 2011
@@ -265,6 +265,9 @@
   SmallVector<const CXXRecordDecl*, 8> Queue; // actually a stack
 
   while (true) {
+    if (Derived->isDependentContext() && !Derived->hasDefinition())
+      return AR_dependent;
+    
     for (CXXRecordDecl::base_class_const_iterator
            I = Derived->bases_begin(), E = Derived->bases_end(); I != E; ++I) {
 

Added: cfe/trunk/test/SemaTemplate/crash-10438657.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/crash-10438657.cpp?rev=144582&view=auto
==============================================================================
--- cfe/trunk/test/SemaTemplate/crash-10438657.cpp (added)
+++ cfe/trunk/test/SemaTemplate/crash-10438657.cpp Mon Nov 14 17:00:43 2011
@@ -0,0 +1,15 @@
+// RUN: not %clang_cc1 -fsyntax-only %s 2> %t
+// RUN: FileCheck %s < %t
+// CHECK: 10 errors
+template<typename _CharT>
+class collate : public locale::facet {
+
+protected:
+virtual ~collate() {}
+  class wxObject;
+  class __attribute__ ((visibility("default"))) wxGDIRefData 
+    : public wxObjectRefData {};
+  class __attribute__ ((visibility("default"))) wxGDIObject : public wxObject { \
+      public:
+      virtual bool IsOk() const {
+        return m_refData && static_cast<wxGDIRefData *>(m_refData)->IsOk(); 





More information about the cfe-commits mailing list