steakhal added a comment. When I added `-analyzer-config cfg-lifetime=true` to `clang/test/Analysis/scopes-cfg-output.cpp`, suddenly duplicated lifetime ends entries appeared where we have `CleanupFunctions`. My output is:
void test_cleanup_functions() [B2 (ENTRY)] Succs (1): B1 [B1] 1: CFGScopeBegin(i) 2: int i __attribute__((cleanup(cleanup_int))); 3: CleanupFunction (cleanup_int) 4: [B1.2] (Lifetime ends) 5: [B1.2] (Lifetime ends) 6: CFGScopeEnd(i) Preds (1): B2 Succs (1): B0 [B0 (EXIT)] Preds (1): B1 void test_cleanup_functions2(int m) [B4 (ENTRY)] Succs (1): B3 [B1] 1: 10 2: i 3: [B1.2] = [B1.1] 4: return; 5: CleanupFunction (cleanup_int) 6: [B3.2] (Lifetime ends) 7: [B3.2] (Lifetime ends) 8: CFGScopeEnd(i) Preds (1): B3 Succs (1): B0 [B2] 1: return; 2: CleanupFunction (cleanup_int) 3: [B3.2] (Lifetime ends) 4: [B3.2] (Lifetime ends) 5: CFGScopeEnd(i) Preds (1): B3 Succs (1): B0 [B3] 1: CFGScopeBegin(i) 2: int i __attribute__((cleanup(cleanup_int))); 3: m 4: [B3.3] (ImplicitCastExpr, LValueToRValue, int) 5: 1 6: [B3.4] == [B3.5] T: if [B3.6] Preds (1): B4 Succs (2): B2 B1 [B0 (EXIT)] Preds (2): B1 B2 void test() [B2 (ENTRY)] Succs (1): B1 [B1] 1: CFGScopeBegin(f) 2: (CXXConstructExpr, [B1.3], F) 3: F f __attribute__((cleanup(cleanup_F))); 4: CleanupFunction (cleanup_F) 5: [B1.3].~F() (Implicit destructor) 6: [B1.3] (Lifetime ends) 7: CFGScopeEnd(f) Preds (1): B2 Succs (1): B0 [B0 (EXIT)] Preds (1): B1 Notice the `[B3.2] (Lifetime ends)` lines for example. The order in which the Lifetime, Scope and Cleanup elements appear looks correct; my only concern is the duplicate Lifetime ends marker. About the `noreturn` cleanup function, well, GCC says: `It is undefined what happens if cleanup_function does not return normally.` here <https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-cleanup-variable-attribute>, thus I'm not sure what to do in that case. GCC seems to optimize accordingly, but clang does not. See https://godbolt.org/z/z8s6bPPjv. FYI Unfortunately, I don't have much experience with CFG either. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D157385/new/ https://reviews.llvm.org/D157385 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits