[all-commits] [llvm/llvm-project] eafc38: [orc-rt] Add asCCallback utility -- C callbacks fo...

Lang Hames via All-commits all-commits at lists.llvm.org
Thu Jul 16 17:20:08 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: eafc387c1da0620642f469fde70455c554ba3470
      https://github.com/llvm/llvm-project/commit/eafc387c1da0620642f469fde70455c554ba3470
  Author: Lang Hames <lhames at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M orc-rt/include/CMakeLists.txt
    A orc-rt/include/orc-rt/CCallback.h
    A orc-rt/test/unit/CCallbackTest.cpp
    M orc-rt/test/unit/CMakeLists.txt

  Log Message:
  -----------
  [orc-rt] Add asCCallback utility -- C callbacks for methods. (#210048)

Adds orc_rt::asCCallback<&Class::method>, which produces a C-ABI
function pointer that forwards to the given member function. The first
parameter of the generated trampoline is an opaque context pointer (
void * for non-const methods, const void * for const methods) that is
cast back to the class type and used as the receiver:

  struct Counter {
    void inc(int N) { Count += N; }
    int Count = 0;
  };

  Counter C;
  void (*CB)(void *, int) = asCCallback<&Counter::inc>;
  CB(asCCallbackContext<&Counter::inc>(C), 2); // C.Count == 2

asCCallbackContext produces the matching context pointer via
static_cast, so any base-class offset is applied and const-ness is
preserved; pairing it with asCCallback by the same method keeps things
correct under inheritance and const-qualification. (A raw cast of &C
would give the trampoline the wrong `this` when method's class is a base
at a non-zero offset.)

Specializations cover the const x noexcept combinations. The trampoline
is always noexcept -- a C caller cannot unwind a C++ exception, so an
escaping one terminates -- and return/argument types are restricted to
C-compatible (non-reference, trivially copyable) types via
static_assert.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list