diff options
author | Zequan Wu <zequanwu@google.com> | 2020-09-15 13:44:22 -0700 |
---|---|---|
committer | Zequan Wu <zequanwu@google.com> | 2020-09-16 10:38:52 -0700 |
commit | ebf267b87d4b557dff488f87f66df3628e3da957 (patch) | |
tree | 44bda8e4884a83d21704e0012f51950c322e17f5 /clang/lib/Sema/SemaCast.cpp | |
parent | c4e589b7954c4e202474ce4a2101f07014792835 (diff) | |
download | llvm-ebf267b87d4b557dff488f87f66df3628e3da957.zip llvm-ebf267b87d4b557dff488f87f66df3628e3da957.tar.gz llvm-ebf267b87d4b557dff488f87f66df3628e3da957.tar.bz2 |
[Sema][MSVC] warn at dynamic_cast/typeid when /GR- is given
Differential Revision: https://reviews.llvm.org/D86369
Diffstat (limited to 'clang/lib/Sema/SemaCast.cpp')
-rw-r--r-- | clang/lib/Sema/SemaCast.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp index f718154..d59f188 100644 --- a/clang/lib/Sema/SemaCast.cpp +++ b/clang/lib/Sema/SemaCast.cpp @@ -889,6 +889,18 @@ void CastOperation::CheckDynamicCast() { return; } + // Warns when dynamic_cast is used with RTTI data disabled. + if (!Self.getLangOpts().RTTIData) { + bool MicrosoftABI = + Self.getASTContext().getTargetInfo().getCXXABI().isMicrosoft(); + bool isClangCL = Self.getDiagnostics().getDiagnosticOptions().getFormat() == + DiagnosticOptions::MSVC; + if (MicrosoftABI || !DestPointee->isVoidType()) + Self.Diag(OpRange.getBegin(), + diag::warn_no_dynamic_cast_with_rtti_disabled) + << isClangCL; + } + // Done. Everything else is run-time checks. Kind = CK_Dynamic; } |