dexonsmith added a comment.

In D73208#1835264 <https://reviews.llvm.org/D73208#1835264>, @MadCoder wrote:

> In D73208#1835051 <https://reviews.llvm.org/D73208#1835051>, @dexonsmith 
> wrote:
>
> > Why isn't a similar dance needed for non-direct methods?
>
>
> because non direct methods do not need an `llvm::Function` to be synthesized 
> at the call-site. direct methods do, and they form one with the type of the 
> declaration they see. Then that same `llvm::Function` is used when you 
> CodeGen the Implementation, so if there's a mismatch, sadness ensues because 
> the LLVM IR verifier will notice the discrepancy between the declared return 
> type of the function and the actual types coming out of the `ret` codepaths.
>
> Regular obj-C methods use the _implementation_ types for the codegen (the 
> declaration(s) aren't even consulted) and I want to stick at what obj-c does 
> as much as I can.
>
> (as a data point: If you use obj-C types with C functions, the type of the 
> first declaration seen is used instead).


Okay, that makes sense to me.

Another solution would be to change IRGen for the implementation: if the 
declaration already exists (`getFunction`), do a bitcast + RAUW dance to fix it 
up (and update the `DirectMethodDefinitions` table).  WDYT?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D73208



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to