Lines Matching refs:Cleanup
1 //===-- EHScopeStack.h - Stack for cleanup IR generation --------*- C++ -*-===//
35 /// the innermost cleanup. When a (normal) cleanup is popped, any
36 /// unresolved fixups in that scope are threaded through the cleanup.
79 /// Denotes a cleanup that should run when a scope is exited using exceptional
83 /// Denotes a cleanup that should run when a scope is exited using normal
137 /// Information for lazily generating a cleanup. Subclasses must be
139 /// allocated on the cleanup stack and freely copied and moved
142 /// Cleanup implementations should generally be declared in an
144 class Cleanup {
149 ~Cleanup() = default;
152 Cleanup(const Cleanup &) = default;
153 Cleanup(Cleanup &&) {}
154 Cleanup() = default;
168 /// isForEH - true if the current emission is for an EH cleanup.
176 /// isEHCleanupKind - true if the cleanup was pushed as an EH
177 /// cleanup.
183 /// Emit the cleanup. For normal cleanups, this is run in the
184 /// same EH context as when the cleanup was pushed, i.e. the
185 /// immediately-enclosing context of the cleanup scope. For
188 // \param flags cleanup kind.
193 /// then restores them and performs the cleanup.
195 class ConditionalCleanup final : public Cleanup {
233 /// The innermost normal cleanup on the stack.
241 /// know the EH stack depth. Whenever we pop a cleanup, we have
246 /// When popping out of a cleanup, these uses are threaded through
247 /// the cleanup and adjusted to point to the new cleanup.
269 /// Push a lazily-created cleanup on the stack.
272 "Cleanup's alignment is too large.");
274 Cleanup *Obj = new (Buffer) T(A...);
278 /// Push a lazily-created cleanup on the stack. Tuple version.
282 "Cleanup's alignment is too large.");
284 Cleanup *Obj = new (Buffer) T(std::move(A));
290 /// Push a cleanup with non-constant storage requirements on the
291 /// stack. The cleanup type must provide an additional static method:
297 /// restrictions as normal cleanup member data.
299 /// The pointer returned from this method is valid until the cleanup
304 "Cleanup's alignment is too large.");
309 void pushCopyOfCleanup(CleanupKind Kind, const void *Cleanup, size_t Size) {
311 std::memcpy(Buffer, Cleanup, Size);
314 /// Pops a cleanup scope off the stack. This is private to CGCleanup.cpp.
338 // lifetime markers, i.e. no real cleanup code
353 /// Returns the innermost normal cleanup on the stack, or
394 /// Add a branch fixup to the current cleanup scope.
409 /// cleanup or resolved one or more fixups.