forked from OSchip/llvm-project
Revert "[MSVC] PR27337: allow static_cast from private base to derived for WTL"
This reverts commit r267534. llvm-svn: 267865
This commit is contained in:
parent
dc7b607b09
commit
5b4faeec87
|
@ -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<
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue