aboutsummaryrefslogtreecommitdiff
path: root/clang/include
diff options
context:
space:
mode:
authorMital Ashok <mital@mitalashok.co.uk>2024-06-17 18:31:54 +0100
committerGitHub <noreply@github.com>2024-06-17 19:31:54 +0200
commit3ad31e12ccfc7db25f3cbedc4ee966e7099ac78f (patch)
tree21aa54d199756cae3af209cef657ce63ce790129 /clang/include
parent4447e255a908c4e1a2863374eaee4bc98e773c3d (diff)
downloadllvm-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.h4
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.