[PATCH] D77077: [clang] CodeGen: Make getOrEmitProtocol public for Swift

Arnold Schwaighofer via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 30 15:17:14 PDT 2020


aschwaighofer marked an inline comment as done.
aschwaighofer added inline comments.


================
Comment at: clang/include/clang/CodeGen/CodeGenABITypes.h:148
+                 llvm::function_ref<llvm::Constant *(const ObjCProtocolDecl *)>
+                     createProtocolReference);
 }  // end namespace CodeGen
----------------
rjmccall wrote:
> I would call this `emitObjCProtocolObject` or something, and maybe say in the comment:
> 
> > Get a pointer to a protocol object for the given declaration, emitting it if it hasn't already been emitted in this translation unit.  Note that the ABI for emitting a protocol reference in code (e.g. for a `@protocol` expression) in most runtimes is not as simple as just materializing a pointer to this object.
> 
> Can you explain the need for the callback?   Are you expecting to use this for Swift-declared protocols by synthesizing an ObjC protocol declaration for them?  I can see why you'd need a callback in that case.
> Can you explain the need for the callback? Are you expecting to use this for Swift-declared protocols by synthesizing an ObjC protocol declaration for them? I can see why you'd need a callback in that case.

The objective C protocol references other protocols in its inherited list. Swift has an internal list that keeps track of those protocols references and makes sure to initialized them for the debugger and also makes sure that the underlying protocol structure is emitted. The call back is to keep this list in sync.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77077/new/

https://reviews.llvm.org/D77077





More information about the cfe-commits mailing list