aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaCast.cpp
diff options
context:
space:
mode:
authorZequan Wu <zequanwu@google.com>2020-09-15 13:44:22 -0700
committerZequan Wu <zequanwu@google.com>2020-09-16 10:38:52 -0700
commitebf267b87d4b557dff488f87f66df3628e3da957 (patch)
tree44bda8e4884a83d21704e0012f51950c322e17f5 /clang/lib/Sema/SemaCast.cpp
parentc4e589b7954c4e202474ce4a2101f07014792835 (diff)
downloadllvm-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.cpp12
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;
}