Home | History | Annotate | Download | only in CodeGen

Lines Matching full: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
140 /// Information for lazily generating a cleanup. Subclasses must be
142 /// allocated on the cleanup stack and freely copied and moved
145 /// Cleanup implementations should generally be declared in an
147 class Cleanup {
152 ~Cleanup() = default;
155 Cleanup(const Cleanup &) = default;
156 Cleanup(Cleanup &&) {}
157 Cleanup() = default;
171 /// isForEH - true if the current emission is for an EH cleanup.
179 /// isEHCleanupKind - true if the cleanup was pushed as an EH
180 /// cleanup.
186 /// Emit the cleanup. For normal cleanups, this is run in the
187 /// same EH context as when the cleanup was pushed, i.e. the
188 /// immediately-enclosing context of the cleanup scope. For
191 // \param flags cleanup kind.
196 /// then restores them and performs the cleanup.
198 class ConditionalCleanup final : public Cleanup {
236 /// The innermost normal cleanup on the stack.
244 /// know the EH stack depth. Whenever we pop a cleanup, we have
249 /// When popping out of a cleanup, these uses are threaded through
250 /// the cleanup and adjusted to point to the new cleanup.
272 /// Push a lazily-created cleanup on the stack.
275 "Cleanup's alignment is too large.");
277 Cleanup *Obj = new (Buffer) T(A...);
281 /// Push a lazily-created cleanup on the stack. Tuple version.
285 "Cleanup's alignment is too large.");
287 Cleanup *Obj = new (Buffer) T(std::move(A));
293 /// Push a cleanup with non-constant storage requirements on the
294 /// stack. The cleanup type must provide an additional static method:
300 /// restrictions as normal cleanup member data.
302 /// The pointer returned from this method is valid until the cleanup
307 "Cleanup's alignment is too large.");
312 void pushCopyOfCleanup(CleanupKind Kind, const void *Cleanup, size_t Size) {
314 std::memcpy(Buffer, Cleanup, Size);
317 /// Pops a cleanup scope off the stack. This is private to CGCleanup.cpp.
341 // lifetime markers, i.e. no real cleanup code
354 /// Returns the innermost normal cleanup on the stack, or
395 /// Add a branch fixup to the current cleanup scope.
410 /// cleanup or resolved one or more fixups.