diff options
author | Mital Ashok <mital@mitalashok.co.uk> | 2024-06-17 18:31:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-17 19:31:54 +0200 |
commit | 3ad31e12ccfc7db25f3cbedc4ee966e7099ac78f (patch) | |
tree | 21aa54d199756cae3af209cef657ce63ce790129 /clang/include | |
parent | 4447e255a908c4e1a2863374eaee4bc98e773c3d (diff) | |
download | llvm-3ad31e12ccfc7db25f3cbedc4ee966e7099ac78f.zip llvm-3ad31e12ccfc7db25f3cbedc4ee966e7099ac78f.tar.gz llvm-3ad31e12ccfc7db25f3cbedc4ee966e7099ac78f.tar.bz2 |
[Clang] Introduce `CXXTypeidExpr::hasNullCheck` (#95718)
Used to implement CWG2191 where `typeid` for a polymorphic glvalue only
becomes potentially-throwing if the `typeid` operand was already
potentially throwing or a `nullptr` check was inserted:
https://cplusplus.github.io/CWG/issues/2191.html
Also change `Expr::hasSideEffects` for `CXXTypeidExpr` to check the
operand for side-effects instead of always reporting that there are
side-effects
Remove `IsDeref` parameter of `CGCXXABI::shouldTypeidBeNullChecked`
because it should never return `true` if `!IsDeref` (we shouldn't add a
null check that wasn't there in the first place)
Diffstat (limited to 'clang/include')
-rw-r--r-- | clang/include/clang/AST/ExprCXX.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/include/clang/AST/ExprCXX.h b/clang/include/clang/AST/ExprCXX.h index d2e8d93..c2feac5 100644 --- a/clang/include/clang/AST/ExprCXX.h +++ b/clang/include/clang/AST/ExprCXX.h @@ -919,6 +919,10 @@ public: reinterpret_cast<Stmt **>(&const_cast<CXXTypeidExpr *>(this)->Operand); return const_child_range(begin, begin + 1); } + + /// Whether this is of a form like "typeid(*ptr)" that can throw a + /// std::bad_typeid if a pointer is a null pointer ([expr.typeid]p2) + bool hasNullCheck() const; }; /// A member reference to an MSPropertyDecl. |