================ @@ -7379,6 +7379,14 @@ class RecoveryExpr final : public Expr, friend class ASTStmtWriter; }; +/// Insertion operator for diagnostics. This allows sending +/// Expr into a diagnostic with <<. +inline const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB, + const Expr *E) { + DB.AddTaggedVal(reinterpret_cast<uint64_t>(E), DiagnosticsEngine::ak_expr); ---------------- erichkeane wrote:
As far as correctness: we need to smuggle pointers through a `uintptr_t`. Beyond that, there is no harm then again casting that immediately to the `uint64_t`. So the 'fixit' suggestion is: ```suggestion DB.AddTaggedVal(static_cast<uint64_t>(reinterpret_cast<uintptr_t>(E)), DiagnosticsEngine::ak_expr); ``` The underlying type here is fine, and SHOULD stay `uint64_t`. But the `reinterpret_cast` of pointer-to-int itself is the problematic part. If you'd like, you can put a static-assert that `sizeof(uintptr_t)` is <= `sizeof(uint64_t)`, but I'm not horribly worried about 128 bit pointers https://github.com/llvm/llvm-project/pull/134693 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits