Thread safety analysis: Drop special block handling
authorAaron Puchert <aaron.puchert@sap.com>
Mon, 20 Sep 2021 13:20:09 +0000 (15:20 +0200)
committerAaron Puchert <aaron.puchert@sap.com>
Mon, 20 Sep 2021 13:20:15 +0000 (15:20 +0200)
commit6de19ea4b6264e64cea145e00ab66fe1530fc0a0
treed05bf3923e9bd7eceb9d4d61d8b355bf70d698da
parentec50d351ffdd4559ccce6013d3ab4a3f41c42cee
Thread safety analysis: Drop special block handling

Previous changes like D101202 and D104261 have eliminated the special
status that break and continue once had, since now we're making
decisions purely based on the structure of the CFG without regard for
the underlying source code constructs.

This means we don't gain anything from defering handling for these
blocks. Dropping it moves some diagnostics, though arguably into a
better place. We're working around a "quirk" in the CFG that perhaps
wasn't visible before: while loops have an empty "transition block"
where continue statements and the regular loop exit meet, before
continuing to the loop entry. To get a source location for that, we
slightly extend our handling for empty blocks. The source location for
the transition ends up to be the loop entry then, but formally this
isn't a back edge. We pretend it is anyway. (This is safe: we can always
treat edges as back edges, it just means we allow less and don't modify
the lock set. The other way around it wouldn't be safe.)

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D106715
clang/lib/Analysis/ThreadSafety.cpp
clang/test/PCH/thread-safety-attrs.cpp
clang/test/SemaCXX/warn-thread-safety-analysis.cpp