================
@@ -797,6 +797,21 @@ class CFGBuilder {
CFGBlock *createBlock(bool add_successor = true);
CFGBlock *createNoReturnBlock();
+ /// Add a statement to the CFG, returning the block it was added to.
+ ///
+ /// Beware that this does not necessarily leave \c Block current, because the
+ /// statement may itself contain control flow. In particular, a GCC
+ /// statement-expression holding a loop (e.g. \c ({ while (...) {} v; }))
ends
+ /// the block it started in, so afterwards \c Block may be null and the
+ /// returned block may differ from the one on entry. Callers that need the
+ /// block a statement ended up in must therefore use the returned value
rather
+ /// than \c Block, and keep the last non-null result when adding several
+ /// statements in a row. The same caveat applies to \c Visit(), which this
+ /// wraps.
+ ///
+ /// May also return null when no block was created, e.g. for a NullStmt when
+ /// \c Block is not current; callers therefore have to keep the previous
+ /// non-null block rather than overwrite it unconditionally.
----------------
ojhunt wrote:
Did you author this comment? The scale of the comment is unnecessary, in a way
the Claude really likes to do.
https://github.com/llvm/llvm-project/pull/212138
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits