[PATCH] D86369: [Sema][MSVC] warn at dynamic_cast when /GR- is given
Zequan Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 27 09:24:06 PDT 2020
zequanwu added inline comments.
================
Comment at: clang/lib/Sema/SemaCast.cpp:895
+ if (!Self.getLangOpts().RTTIData) {
+ bool isMSVC = Self.getDiagnostics().getDiagnosticOptions().getFormat() ==
+ DiagnosticOptions::MSVC;
----------------
hans wrote:
> I'm not sure isMSVC is the best name (it's not clear what aspect is MSVC exactly -- in this case it's the diagnostics format).
>
> It's possible to target MSVC both with clang-cl and with regular clang.
>
> For example, one could use
>
> clang-cl /c /tmp/a.cpp
>
> or
>
> clang -c /tmp/a.cpp -target i686-pc-windows-msvc19.11.0 -fms-extensions
>
>
> My understanding is that the purpose of "isMSVC" here is to try and detect if we're using clang-cl or clang so that the diagnostic can say "/GR-" or "-fno-rtti-data". So maybe it's better to call it "isClangCL" or something like that.
>
> Also, I don't think we should check "isMSVC" in the if-statement below. We want the warning to fire both when using clang and clang-cl: as long as -fno-rtti-data or /GR- is used, the warning makes sense.
>
> So I think the code could be more like:
>
> ```
> if (!Self.getLangOpts().RTTIData && !DestPointee->isVoidType()) {
> bool isClangCL = ...;
> Self.Diag(...) << isClangCL;
> }
> ```
MSVC will warn even if the DestPointee is void type. What I thought is if invoked by clang-cl warn regardless of DeskPointee type. If invoked by clang, warn if it's not void type.
https://godbolt.org/z/475q5v. I noticed MSVC won't warn at typeid if /GR- is given. Probably I should remove the warning in typeid.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D86369/new/
https://reviews.llvm.org/D86369
More information about the cfe-commits
mailing list