]> granicus.if.org Git - clang/commitdiff
Revert "[MSVC] PR27337: allow static_cast from private base to derived for WTL"
authorDmitry Polukhin <dmitry.polukhin@gmail.com>
Thu, 28 Apr 2016 09:56:22 +0000 (09:56 +0000)
committerDmitry Polukhin <dmitry.polukhin@gmail.com>
Thu, 28 Apr 2016 09:56:22 +0000 (09:56 +0000)
This reverts commit r267534.

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

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaCast.cpp
test/SemaCXX/ext_ms_downcast.cpp [deleted file]

index afa741077c33b80d829d9d748d6fd9adf70c29cb..b04abc55afbb91e3fcd4cfbac189061c1a3615df 100644 (file)
@@ -5764,9 +5764,6 @@ def err_static_downcast_via_virtual : Error<
   "cannot cast %0 to %1 via virtual base %2">;
 def err_downcast_from_inaccessible_base : Error<
   "cannot cast %select{private|protected}2 base class %1 to %0">;
-def ext_ms_downcast_from_inaccessible_base : ExtWarn<
-  "casting from %select{private|protected}2 base class %1 to derived class %0 is a Microsoft extension">,
-  InGroup<MicrosoftCast>;
 def err_upcast_to_inaccessible_base : Error<
   "cannot cast %0 to its %select{private|protected}2 base class %1">;
 def err_bad_dynamic_cast_not_ref_or_ptr : Error<
index 84a070573f5126e6d5175d64e4fac71fff7a4de1..4a7699b22e22314f0135c2e3d7f8357a51190798 100644 (file)
@@ -1344,11 +1344,10 @@ TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,
   }
 
   if (!CStyle) {
-    unsigned Diag = Self.getLangOpts().MSVCCompat
-                        ? diag::ext_ms_downcast_from_inaccessible_base
-                        : diag::err_downcast_from_inaccessible_base;
-    switch (Self.CheckBaseClassAccess(OpRange.getBegin(), SrcType, DestType,
-                                      Paths.front(), Diag)) {
+    switch (Self.CheckBaseClassAccess(OpRange.getBegin(),
+                                      SrcType, DestType,
+                                      Paths.front(),
+                                diag::err_downcast_from_inaccessible_base)) {
     case Sema::AR_accessible:
     case Sema::AR_delayed:     // be optimistic
     case Sema::AR_dependent:   // be optimistic
diff --git a/test/SemaCXX/ext_ms_downcast.cpp b/test/SemaCXX/ext_ms_downcast.cpp
deleted file mode 100644 (file)
index 42feeb4..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -fms-compatibility -verify %s
-// RUN: %clang_cc1 -fsyntax-only -DNO_MS_COMPATIBILITY -verify %s
-
-// Minimal reproducer.
-class A {};
-class B : A {}; // expected-note 2 {{implicitly declared private here}}
-
-B* foo(A* p) {
-  return static_cast<B*>(p);
-#ifdef NO_MS_COMPATIBILITY
-  // expected-error@-2 {{cannot cast private base class 'A' to 'B'}}
-#else
-  // expected-warning@-4 {{casting from private base class 'A' to derived class 'B' is a Microsoft extension}}
-#endif
-}
-
-A* bar(B* p) {
-  return static_cast<A*>(p); // expected-error {{cannot cast 'B' to its private base class 'A'}}
-}
-
-// from atlframe.h
-template <class T>
-class CUpdateUI {
-public:
-  CUpdateUI() {
-    T* pT = static_cast<T*>(this);
-#ifdef NO_MS_COMPATIBILITY
-    // expected-error@-2 {{cannot cast private base class}}
-#else
-    // expected-warning@-4 {{casting from private base class 'CUpdateUI<CMDIFrame>' to derived class 'CMDIFrame' is a Microsoft extension}}
-#endif
-  }
-};
-
-// from sample WTL/MDIDocVw (mainfrm.h
-class CMDIFrame : CUpdateUI<CMDIFrame> {};
-// expected-note@-1 {{implicitly declared private here}}
-// expected-note@-2 {{in instantiation of member function}}
-
-CMDIFrame wndMain;