[PATCH] D157385: [clang][CFG] Cleanup functions
Aaron Puchert via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 21 17:59:53 PDT 2023
aaronpuchert added inline comments.
================
Comment at: clang/test/Analysis/scopes-cfg-output.cpp:1473-1474
+// CHECK-NEXT: 3: F f __attribute__((cleanup(cleanup_F)));
+// CHECK-NEXT: 4: [B1.3].~F() (Implicit destructor)
+// CHECK-NEXT: 5: CleanupFunction (cleanup_F)
+// CHECK-NEXT: 6: CFGScopeEnd(f)
----------------
Interesting test! But it seems CodeGen has them swapped: compiling this snippet with `clang -c -S -emit-llvm` I get
```lang=LLVM
define dso_local void @_Z4testv() #0 personality ptr @__gxx_personality_v0 {
%1 = alloca %class.F, align 1
%2 = alloca ptr, align 8
%3 = alloca i32, align 4
invoke void @_Z9cleanup_FP1F(ptr noundef %1)
to label %4 unwind label %5
4: ; preds = %0
call void @_ZN1FD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %1) #3
ret void
; ...
}
```
So first cleanup, then destructor. This is with 17.0.0-rc2.
================
Comment at: clang/test/Analysis/scopes-cfg-output.cpp:1480
+public:
+ ~F() {}
+};
----------------
As with the cleanup function, a definition shouldn't be necessary.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157385/new/
https://reviews.llvm.org/D157385
More information about the cfe-commits
mailing list