I did not add tests yet because first I wanted to be sure whether this approach is OK.
Details
Diff Detail
Event Timeline
Can you say something about why you want to track this?
Perhaps we should just use a null pointer for the not-instantiated arm of an if constexpr instead, rather than tracking a flag on an empty statement that is meaningless for real empty statements.
The original motivation was to fix this false positive in clang tidy: https://reviews.llvm.org/D46027
Perhaps we should just use a null pointer for the not-instantiated arm of an if constexpr instead, rather than tracking a flag on an empty statement that is meaningless for real empty statements.
I will look into that, thanks. I wonder if any of the code assumes that the than branch always present.
I expect some code does. But this is fundamentally a special property of an if constexpr statement, not of an empty statement, so I think it makes most sense that whatever special handling we choose to use for this should live in the IfStmt.
Further note: the right approach here would likely be to add a DiscardedStmt class deriving from Stmt that represents a discarded arm of an if constexpr, rather than modeling this as a NullStmt.