diff options
author | John McCall <rjmccall@apple.com> | 2015-09-08 08:21:11 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2015-09-08 08:21:11 +0000 |
commit | bd96e98af72b80c3d3b81849e45de92c8612475d (patch) | |
tree | 0514460cc0d07352312b101ae2e3aa47e1c9dfdd /clang/lib/CodeGen/CodeGenModule.h | |
parent | 7f416cc426384ad1f891addb61d93e7ca1ffa0f2 (diff) | |
download | llvm-bd96e98af72b80c3d3b81849e45de92c8612475d.zip llvm-bd96e98af72b80c3d3b81849e45de92c8612475d.tar.gz llvm-bd96e98af72b80c3d3b81849e45de92c8612475d.tar.bz2 |
Move BlockByrefHelpers back to CodeGenModule.h to placate MSVC.
llvm-svn: 246986
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index fcc4993..4bb50a3 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -79,7 +79,6 @@ class CoverageSourceInfo; namespace CodeGen { -class BlockByrefHelpers; class CallArgList; class CodeGenFunction; class CodeGenTBAA; @@ -210,6 +209,36 @@ public: void reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile); }; +/// A pair of helper functions for a __block variable. +class BlockByrefHelpers : public llvm::FoldingSetNode { + // MSVC requires this type to be complete in order to process this + // header. +public: + llvm::Constant *CopyHelper; + llvm::Constant *DisposeHelper; + + /// The alignment of the field. This is important because + /// different offsets to the field within the byref struct need to + /// have different helper functions. + CharUnits Alignment; + + BlockByrefHelpers(CharUnits alignment) : Alignment(alignment) {} + BlockByrefHelpers(const BlockByrefHelpers &) = default; + virtual ~BlockByrefHelpers(); + + void Profile(llvm::FoldingSetNodeID &id) const { + id.AddInteger(Alignment.getQuantity()); + profileImpl(id); + } + virtual void profileImpl(llvm::FoldingSetNodeID &id) const = 0; + + virtual bool needsCopy() const { return true; } + virtual void emitCopy(CodeGenFunction &CGF, Address dest, Address src) = 0; + + virtual bool needsDispose() const { return true; } + virtual void emitDispose(CodeGenFunction &CGF, Address field) = 0; +}; + /// This class organizes the cross-function state that is used while generating /// LLVM code. class CodeGenModule : public CodeGenTypeCache { |