Fixture 10

cpp runtime shapes

C++ · 28 functions · 4 lanes · 20 of 71 function-lanes behave identically

4 of 4 lanes have a function that returns a different result after decompilation: gcc-O0 (5/26), clang-O0 (5/20), gcc-O2 (5/14), clang-O2 (5/11).

C++ runtime-shape fixture (compile with g++). Exercises the compiler-generated runtime shapes a decompiler must recover — virtual dispatch (vtables), constructor/destructor sequencing, RAII cleanup, exception unwinding (throw / try-catch), a capturing lambda, and a move — WITHOUT any STL (<vector>/<string> etc.). The target is the generated runtime machinery, not library functions.

Each shape is wrapped in an extern "C" function that takes/returns plain ints (and, for observable side effects, an int* out-parameter receiving an 8-int buffer), so an execution-differential harness can drive every shape by C symbol name and diff the return value plus any buffer writes.

Differential vs. structural: - The extern "C" wrappers (cpp_virtual_dispatch, cpp_ctor_dtor, cpp_raii_guard, cpp_exception, cpp_lambda_capture, cpp_move): DIFFERENTIAL. Deterministic; return unique ints per path; ctor/dtor/RAII side effects are made observable through the int* out-parameter. - The underlying shapes themselves — the vtable layout / virtual-call dispatch, and the exception-handling (landing pad / unwind) tables — are STRUCTURAL assertions: the harness checks that a virtual call stays an indirect vtable dispatch and that throw/catch keeps its EH structure, which the differential return values corroborate but do not fully pin down.

No floats. No STL. Deterministic throughout.

tests/decompiler_fixtures/src/10_cpp_runtime_shapes.cpp source
/* 10_cpp_runtime_shapes.cpp
 *
 * C++ runtime-shape fixture (compile with g++). Exercises the compiler-generated
 * runtime shapes a decompiler must recover — virtual dispatch (vtables),
 * constructor/destructor sequencing, RAII cleanup, exception unwinding
 * (throw / try-catch), a capturing lambda, and a move — WITHOUT any STL
 * (<vector>/<string> etc.). The target is the generated runtime machinery, not
 * library functions.
 *
 * Each shape is wrapped in an `extern "C"` function that takes/returns plain
 * ints (and, for observable side effects, an int* out-parameter receiving an
 * 8-int buffer), so an execution-differential harness can drive every shape by C
 * symbol name and diff the return value plus any buffer writes.
 *
 * Differential vs. structural:
 *   - The extern "C" wrappers (cpp_virtual_dispatch, cpp_ctor_dtor,
 *     cpp_raii_guard, cpp_exception, cpp_lambda_capture, cpp_move): DIFFERENTIAL.
 *     Deterministic; return unique ints per path; ctor/dtor/RAII side effects are
 *     made observable through the int* out-parameter.
 *   - The underlying shapes themselves — the vtable layout / virtual-call
 *     dispatch, and the exception-handling (landing pad / unwind) tables — are
 *     STRUCTURAL assertions: the harness checks that a virtual call stays an
 *     indirect vtable dispatch and that throw/catch keeps its EH structure, which
 *     the differential return values corroborate but do not fully pin down.
 *
 * No floats. No STL. Deterministic throughout.
 */

/* --- virtual dispatch: base / derived with a virtual method ------------- */

struct Base {
    virtual int op(int x) { return x + 1000; }
    virtual ~Base() {}
};

struct Derived : Base {
    int op(int x) override { return x + 2000; }
};

/* sel picks the dynamic type; the call through the Base* is a virtual dispatch
 * whose result differs by type, so a mis-recovered vtable index diverges. */
extern "C" int cpp_virtual_dispatch(int sel, int x) {
    Base b;
    Derived d;
    Base *p = (sel & 1) ? static_cast<Base *>(&d) : &b;
    return p->op(x);               /* 2000+x for odd sel, 1000+x for even */
}

/* --- constructor / destructor with an observable side effect ------------ */

/* Writes a marker on construction and another on destruction into a caller
 * buffer, so ctor/dtor sequencing becomes observable and differential. */
struct Tracer {
    int *log;
    int idx;
    int tag;
    Tracer(int *l, int i, int t) : log(l), idx(i), tag(t) {
        log[idx] = tag + 1;        /* construction marker */
    }
    ~Tracer() {
        log[idx + 1] = tag + 2;    /* destruction marker */
    }
};

/* out must point to an 8-int buffer. Records ctor then dtor markers and returns
 * a deterministic code. */
extern "C" int cpp_ctor_dtor(int *out, int tag) {
    {
        Tracer t(out, 0, tag);     /* out[0] = tag+1 at ctor */
        out[2] = tag + 10;         /* body marker, before dtor */
    }                              /* out[1] = tag+2 at dtor (scope exit) */
    return out[0] + out[1] + out[2];
}

/* --- RAII cleanup: a guard whose destructor writes to a given int* ------ */

struct Guard {
    int *slot;
    int value;
    Guard(int *s, int v) : slot(s), value(v) {}
    ~Guard() { *slot = value; }    /* cleanup effect on scope exit */
};

/* out is an 8-int buffer. The guard's destructor writes `value` into out[0]
 * when the scope ends; observing that write is the differential signal. */
extern "C" int cpp_raii_guard(int *out, int value) {
    out[0] = 0;                    /* pre-cleanup sentinel */
    {
        Guard g(out, value + 700);
        out[1] = 42;               /* proves body ran before cleanup */
    }                              /* g.~Guard() writes out[0] = value+700 */
    return out[0];
}

/* --- exception: throw and a try/catch returning a distinct code --------- */

static int may_throw(int x) {
    if (x < 0)
        throw x;                   /* triggers unwind */
    return x + 5;
}

/* Distinct return on the caught vs. normal path exercises the EH tables. */
extern "C" int cpp_exception(int x) {
    try {
        return may_throw(x) + 3000;   /* normal path: x+5+3000 */
    } catch (int e) {
        return 9000 - e;              /* caught path: unique, depends on thrown value */
    }
}

/* --- capturing lambda invoked immediately ------------------------------- */

/* The lambda captures `x` by value and a local by reference; invoking it builds
 * and calls the compiler-generated closure type. */
extern "C" int cpp_lambda_capture(int x, int y) {
    int acc = 0;
    auto f = [x, &acc](int z) {
        acc += x * z;              /* uses by-value capture, mutates by-ref capture */
        return x + z;
    };
    int r = f(y);
    return r + acc;                /* (x+y) + (x*y): unique per (x,y) */
}

/* --- move operation ----------------------------------------------------- */

/* A type with distinct copy vs. move behavior: moving zeroes the source and
 * flags the destination, so whether a move (not a copy) occurred is observable. */
struct Movable {
    int v;
    int moved_in;
    Movable(int val) : v(val), moved_in(0) {}
    Movable(const Movable &o) : v(o.v), moved_in(0) {}          /* copy: flag stays 0 */
    Movable(Movable &&o) : v(o.v), moved_in(1) { o.v = 0; }     /* move: flag=1, source zeroed */
};

static int consume(Movable m) {
    return m.v + (m.moved_in ? 50 : 0);
}

/* Constructs a Movable and passes it via std::move-equivalent cast, so the move
 * constructor runs; the moved_in flag makes that observable in the return. */
extern "C" int cpp_move(int val) {
    Movable src(val);
    int r = consume(static_cast<Movable &&>(src));  /* forces move ctor */
    return r + src.v;              /* src.v zeroed by move => r only; r == val+50 */
}

Recovered C

Generated by glaurung decompile --style decbench at b47f6b43. baseline.json records the result after recompiling the C and calling it beside the original with seeded inputs.

gcc -O0

5/26
_ZN4Base2opEi structural 7 lines
// glaurung: _ZN4Base2opEi @ 0x26b2
typedef struct Base Base;
int _ZN4Base2opEi(const Base * arg0, int arg1) {
    // x86-64 prologue: save rbp
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 1000));
}
_ZN4BaseD0Ev structural 13 lines
// glaurung: _ZN4BaseD0Ev @ 0x26ee
typedef struct Base Base;
struct Base;
void _ZN4BaseD0Ev(const Base * arg0) {
    extern void _ZN4BaseD1Ev(const struct Base *);
    extern long _ZdlPvm(char *, int);
    long var2;
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(char *))_ZN4BaseD1Ev)((char *)(arg0));
    var2 = _ZdlPvm((char *)(arg0), 8);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN4BaseD1Ev structural

Glaurung recovered no body in this lane.

_ZN4BaseD2Ev structural 10 lines
// glaurung: _ZN4BaseD2Ev @ 0x26cc
typedef struct Base Base;
static unsigned char glaurung_global_4fd8[16] __attribute__((aligned(16)));
void _ZN4BaseD2Ev(const Base * arg0) {
    extern unsigned char glaurung_global_4fd8[16];
    // x86-64 prologue: save rbp
    *(long *)(((long)arg0)) = (*(long *)(&glaurung_global_4fd8[0]) + 16);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN5GuardC1EPii structural

Glaurung recovered no body in this lane.

_ZN5GuardC2EPii structural 16 lines
// glaurung: _ZN5GuardC2EPii @ 0x27ca
#ifndef GLAURUNG_STRUCT_Guard_DEFINED
#define GLAURUNG_STRUCT_Guard_DEFINED
typedef struct Guard Guard;
struct Guard {
    int * slot;
    int value;
};
#endif
void _ZN5GuardC2EPii(const Guard * arg0, int * arg1, int arg2) {
    // x86-64 prologue: save rbp
    arg0->slot = (long)((long)arg1);
    arg0->value = arg2;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN5GuardD1Ev structural

Glaurung recovered no body in this lane.

_ZN5GuardD2Ev structural 15 lines
// glaurung: _ZN5GuardD2Ev @ 0x27f6
#ifndef GLAURUNG_STRUCT_Guard_DEFINED
#define GLAURUNG_STRUCT_Guard_DEFINED
typedef struct Guard Guard;
struct Guard {
    int * slot;
    int value;
};
#endif
void _ZN5GuardD2Ev(const Guard * arg0) {
    // x86-64 prologue: save rbp
    *(int *)(*(long *)((long)arg0)) = arg0->value;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN6TracerC1EPiii structural

Glaurung recovered no body in this lane.

_ZN6TracerC2EPiii structural 19 lines
// glaurung: _ZN6TracerC2EPiii @ 0x2738
#ifndef GLAURUNG_STRUCT_Tracer_DEFINED
#define GLAURUNG_STRUCT_Tracer_DEFINED
typedef struct Tracer Tracer;
struct Tracer {
    int * log;
    int idx;
    int tag;
};
#endif
void _ZN6TracerC2EPiii(const Tracer * arg0, int * arg1, int arg2, int arg3) {
    // x86-64 prologue: save rbp
    arg0->log = (long)((long)arg1);
    arg0->idx = arg2;
    arg0->tag = arg3;
    *(int *)((((long)((int)(*(int *)(((long)arg0 + 0x8)))) << 2) + *(long *)((long)arg0))) = ((unsigned long)((unsigned int)(arg0->tag)) + 1);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN6TracerD1Ev structural

Glaurung recovered no body in this lane.

_ZN6TracerD2Ev structural 16 lines
// glaurung: _ZN6TracerD2Ev @ 0x2794
#ifndef GLAURUNG_STRUCT_Tracer_DEFINED
#define GLAURUNG_STRUCT_Tracer_DEFINED
typedef struct Tracer Tracer;
struct Tracer {
    int * log;
    int idx;
    int tag;
};
#endif
void _ZN6TracerD2Ev(const Tracer * arg0) {
    // x86-64 prologue: save rbp
    *(int *)(((((long)((int)(*(int *)(((long)arg0 + 0x8)))) + 1) << 2) + *(long *)((long)arg0))) = ((unsigned long)((unsigned int)(arg0->tag)) + 2);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7Derived2opEi structural 7 lines
// glaurung: _ZN7Derived2opEi @ 0x271e
typedef struct Derived Derived;
int _ZN7Derived2opEi(const Derived * arg0, int arg1) {
    // x86-64 prologue: save rbp
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 2000));
}
_ZN7DerivedD0Ev structural 13 lines
// glaurung: _ZN7DerivedD0Ev @ 0x28a2
typedef struct Derived Derived;
struct Derived;
void _ZN7DerivedD0Ev(const Derived * arg0) {
    extern void _ZN7DerivedD1Ev(const struct Derived *);
    extern long _ZdlPvm(char *, int);
    long var2;
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(char *))_ZN7DerivedD1Ev)((char *)(arg0));
    var2 = _ZdlPvm((char *)(arg0), 8);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7DerivedD1Ev structural

Glaurung recovered no body in this lane.

_ZN7DerivedD2Ev structural 13 lines
// glaurung: _ZN7DerivedD2Ev @ 0x2870
typedef struct Derived Derived;
struct Base;
static unsigned char glaurung_global_4fe0[16] __attribute__((aligned(16)));
void _ZN7DerivedD2Ev(const Derived * arg0) {
    extern void _ZN4BaseD2Ev(const struct Base *);
    extern unsigned char glaurung_global_4fe0[16];
    // x86-64 prologue: save rbp, frame 16 bytes
    *(long *)((long)arg0) = (*(long *)(&glaurung_global_4fe0[0]) + 16);
    ((void (*)(char *))_ZN4BaseD2Ev)((char *)(arg0));
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7MovableC1EOS_ structural

Glaurung recovered no body in this lane.

_ZN7MovableC1Ei structural

Glaurung recovered no body in this lane.

_ZN7MovableC2EOS_ structural 9 lines
// glaurung: _ZN7MovableC2EOS_ @ 0x283c
void _ZN7MovableC2EOS_(char * arg0, int * arg1) {
    // x86-64 prologue: save rbp
    *(int *)((long)arg0) = *(int *)((long)arg1);
    *(int *)(((long)arg0 + 0x4)) = 1;
    *(int *)((long)arg1) = 0;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7MovableC2Ei structural 16 lines
// glaurung: _ZN7MovableC2Ei @ 0x2816
#ifndef GLAURUNG_STRUCT_Movable_DEFINED
#define GLAURUNG_STRUCT_Movable_DEFINED
typedef struct Movable Movable;
struct Movable {
    int v;
    int moved_in;
};
#endif
void _ZN7MovableC2Ei(const Movable * arg0, int arg1) {
    // x86-64 prologue: save rbp
    arg0->v = arg1;
    arg0->moved_in = 0;
    // x86-64 epilogue: restore rbp
    return;
}
cpp_ctor_dtor pass 21 lines
// glaurung: cpp_ctor_dtor @ 0x23cd
struct Tracer;
int cpp_ctor_dtor(int * arg0, int arg1) {
    extern void _ZN6TracerC1EPiii(const struct Tracer *, int *, int, int);
    extern void _ZN6TracerD1Ev(const struct Tracer *);
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    unsigned char local_20[16];
    long local_8;
    long ret;
    // x86-64 prologue: save rbp, frame 48 bytes
    local_8 = (long)(0x28);
    ((void (*)(char *, int *, int, int))_ZN6TracerC1EPiii)((char *)(&local_20[0]), arg0, 0, (unsigned long)((unsigned int)(arg1)));
    *(int *)((arg0 + 2)) = ((unsigned long)((unsigned int)(arg1)) + 10);
    ((void (*)(char *))_ZN6TracerD1Ev)((char *)(&local_20[0]));
    ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((arg0 + 2)))) + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((long)arg0))) + (unsigned long)((unsigned int)(*(int *)((arg0 + 1))))))))));
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
cpp_exception pass 38 lines
// glaurung: cpp_exception @ 0x251a
int cpp_exception(int arg0) {
    extern int _ZL9may_throwi(int);
    int e;
    int local_14;
    int local_24;
    long ret;
    long t2;
    long var0;
    long var1;
    long var10;
    int var11;
    int var12;
    long var13;
    long var3;
    try {
        // x86-64 prologue: save rbp, frame 8 bytes
        local_24 = arg0;
        var0 = (unsigned long)((unsigned int)(local_24));
        var1 = ((long (*)(long))_ZL9may_throwi)((unsigned long)((unsigned int)(var0)));
        var3 = (unsigned long)((unsigned int)((var1 + 3000)));
        L_253a: ;
        ret = (unsigned long)((unsigned int)(var3));
        // x86-64 epilogue: restore rbp
        return ret;
    } catch (int exception_0) {
        var10 = (unsigned long)((unsigned int)(exception_0));
        local_14 = var10;
        var11 = 0x2328;
        t2 = local_14;
        var12 = (var11 - t2);
        var13 = (unsigned long)((unsigned int)(var12));
        var3 = (unsigned long)((unsigned int)(var13));
        ret = (unsigned long)((unsigned int)(var3));
        // x86-64 epilogue: restore rbp
        return ret;
    }
}
cpp_lambda_capture pass 25 lines
// glaurung: cpp_lambda_capture @ 0x25ae
struct anon_574;
int cpp_lambda_capture(int arg0, int arg1) {
    extern int _ZZ18cpp_lambda_captureENKUliE_clEi(const struct anon_574 *, int);
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    unsigned char acc[8];
    int r;
    unsigned char local_20[16];
    long local_8;
    long ret;
    int var7;
    // x86-64 prologue: save rbp, frame 64 bytes
    local_8 = (long)(0x28);
    *(int *)(&acc[0]) = 0;
    *(int *)(&local_20[0]) = arg0;
    *(long *)((&local_20[0] + 8)) = (long)((long)(&acc[0]));
    var7 = ((int (*)(char *, int))_ZZ18cpp_lambda_captureENKUliE_clEi)((char *)(&local_20[0]), (unsigned long)((unsigned int)(arg1)));
    r = var7;
    ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(r)) + (unsigned long)((unsigned int)(*(int *)(&acc[0]))))));
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
cpp_move pass 26 lines
// glaurung: cpp_move @ 0x2643
struct Movable;
int cpp_move(int arg0) {
    extern int _ZL7consume7Movable(int *);
    extern void _ZN7MovableC1EOS_(char *, int *);
    extern void _ZN7MovableC1Ei(const struct Movable *, int);
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    int r;
    unsigned char local_10[8];
    unsigned char local_18[8];
    long local_8;
    long ret;
    int var8;
    // x86-64 prologue: save rbp, frame 48 bytes
    local_8 = (long)(0x28);
    ((void (*)(char *, int))_ZN7MovableC1Ei)((char *)(&local_18[0]), (unsigned long)((unsigned int)(arg0)));
    _ZN7MovableC1EOS_((char *)(&local_10[0]), (int *)(&local_18[0]));
    var8 = _ZL7consume7Movable((int *)(&local_10[0]));
    r = var8;
    ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(r)) + (unsigned long)((unsigned int)(*(int *)(&local_18[0]))))));
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
cpp_raii_guard pass 22 lines
// glaurung: cpp_raii_guard @ 0x2459
struct Guard;
int cpp_raii_guard(int * arg0, int arg1) {
    extern void _ZN5GuardC1EPii(const struct Guard *, int *, int);
    extern void _ZN5GuardD1Ev(const struct Guard *);
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    unsigned char local_20[16];
    long local_8;
    long ret;
    // x86-64 prologue: save rbp, frame 48 bytes
    local_8 = (long)(0x28);
    *(int *)((long)arg0) = 0;
    ((void (*)(char *, int *, int))_ZN5GuardC1EPii)((char *)(&local_20[0]), arg0, (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + 700))));
    *(int *)((arg0 + 1)) = 42;
    ((void (*)(char *))_ZN5GuardD1Ev)((char *)(&local_20[0]));
    ret = (unsigned long)((unsigned int)(*(int *)((long)arg0)));
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
cpp_virtual_dispatch structural 45 lines
// glaurung: cpp_virtual_dispatch @ 0x22fa
typedef struct Base Base;
struct Base;
struct Derived;
static unsigned char glaurung_global_4fd8[16] __attribute__((aligned(16)));
static unsigned char glaurung_global_4fe0[16] __attribute__((aligned(16)));
int cpp_virtual_dispatch(int arg0, int arg1) {
    extern __attribute__((noreturn)) long _Unwind_Resume(long);
    extern void _ZN4BaseD1Ev(const struct Base *);
    extern void _ZN7DerivedD1Ev(const struct Derived *);
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern unsigned char glaurung_global_4fd8[16];
    extern unsigned char glaurung_global_4fe0[16];
    Base * p;
    long local_18;
    unsigned char local_28[8];
    unsigned char local_30[8];
    long ret;
    long var16;
    long var17;
    long var18;
    long var24;
    long var28;
    // x86-64 prologue: save rbp, frame 8 bytes
    local_18 = (long)(0x28);
    *(long *)(&local_30[0]) = (*(long *)(&glaurung_global_4fd8[0]) + 16);
    *(long *)(&local_28[0]) = (*(long *)(&glaurung_global_4fe0[0]) + 16);
    p = (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) & 1))) != 0) ? (Base *)&local_28[0] : (Base *)&local_30[0]);
    var16 = ((long (*)(char *, long))(*(long *)(*(long *)((long)p))))((char *)((long)p), (unsigned long)((unsigned int)(arg1)));
    var17 = var16;
    var18 = (unsigned long)((unsigned int)(var16));
    ((void (*)(char *))_ZN7DerivedD1Ev)((char *)(&local_28[0]));
    ((void (*)(char *))_ZN4BaseD1Ev)((char *)(&local_30[0]));
    ret = (unsigned long)((unsigned int)(var18));
    if ((local_18 == 0x28)) {
        // x86-64 epilogue: restore rbp
        return ret;
    }
    __stack_chk_fail();
    // __glaurung_eh_landing_2398
    var24 = var17;
    ((void (*)(char *))_ZN7DerivedD1Ev)((char *)(&local_28[0]));
    ((void (*)(char *))_ZN4BaseD1Ev)((char *)(&local_30[0]));
    var28 = _Unwind_Resume(var24);
}

clang -O0

5/20
_ZN4Base2opEi structural 7 lines
// glaurung: _ZN4Base2opEi @ 0x16a0
typedef struct Base Base;
int _ZN4Base2opEi(Base * arg0, int arg1) {
    // x86-64 prologue: save rbp
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 1000));
}
_ZN4BaseC2Ev structural 10 lines
// glaurung: _ZN4BaseC2Ev @ 0x1500
typedef struct Base Base;
static unsigned char glaurung_global_3fd8[16] __attribute__((aligned(16)));
void _ZN4BaseC2Ev(Base * arg0) {
    extern unsigned char glaurung_global_3fd8[16];
    // x86-64 prologue: save rbp
    *(long *)(((long)arg0)) = (*(long *)(&glaurung_global_3fd8[0]) + 16);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN4BaseD0Ev structural 13 lines
// glaurung: _ZN4BaseD0Ev @ 0x16c0
typedef struct Base Base;
struct Base;
void _ZN4BaseD0Ev(Base * arg0) {
    extern void _ZN4BaseD2Ev(struct Base *);
    extern long _ZdlPv(char *);
    long var1;
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(void))_ZN4BaseD2Ev)();
    var1 = _ZdlPv((char *)(arg0));
    // x86-64 epilogue: restore rbp
    return;
}
_ZN4BaseD2Ev structural 7 lines
// glaurung: _ZN4BaseD2Ev @ 0x1580
typedef struct Base Base;
void _ZN4BaseD2Ev(Base * arg0) {
    // x86-64 prologue: save rbp
    // x86-64 epilogue: restore rbp
    return;
}
_ZN5GuardC2EPii structural 18 lines
// glaurung: _ZN5GuardC2EPii @ 0x1600
#ifndef GLAURUNG_STRUCT_Guard_DEFINED
#define GLAURUNG_STRUCT_Guard_DEFINED
typedef struct Guard Guard;
struct Guard {
    int * slot;
    int value;
};
#endif
void _ZN5GuardC2EPii(Guard * arg0, int * arg1, int arg2) {
    Guard * ret;
    // x86-64 prologue: save rbp
    ret = arg0;
    arg0->slot = (long)((long)arg1);
    arg0->value = arg2;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN5GuardD2Ev structural 15 lines
// glaurung: _ZN5GuardD2Ev @ 0x1630
#ifndef GLAURUNG_STRUCT_Guard_DEFINED
#define GLAURUNG_STRUCT_Guard_DEFINED
typedef struct Guard Guard;
struct Guard {
    int * slot;
    int value;
};
#endif
void _ZN5GuardD2Ev(Guard * arg0) {
    // x86-64 prologue: save rbp
    *(int *)(*(long *)((long)arg0)) = arg0->value;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN6TracerC2EPiii structural 21 lines
// glaurung: _ZN6TracerC2EPiii @ 0x1590
#ifndef GLAURUNG_STRUCT_Tracer_DEFINED
#define GLAURUNG_STRUCT_Tracer_DEFINED
typedef struct Tracer Tracer;
struct Tracer {
    int * log;
    int idx;
    int tag;
};
#endif
void _ZN6TracerC2EPiii(Tracer * arg0, int * arg1, int arg2, int arg3) {
    Tracer * var0;
    // x86-64 prologue: save rbp
    var0 = arg0;
    arg0->log = (long)((long)arg1);
    arg0->idx = arg2;
    arg0->tag = arg3;
    *(int *)((*(long *)(((long)var0)) + ((long)((int)(*(int *)(((long)var0 + 0x8)))) * 4))) = ((unsigned long)((unsigned int)(arg0->tag)) + 1);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN6TracerD2Ev structural 16 lines
// glaurung: _ZN6TracerD2Ev @ 0x15d0
#ifndef GLAURUNG_STRUCT_Tracer_DEFINED
#define GLAURUNG_STRUCT_Tracer_DEFINED
typedef struct Tracer Tracer;
struct Tracer {
    int * log;
    int idx;
    int tag;
};
#endif
void _ZN6TracerD2Ev(Tracer * arg0) {
    // x86-64 prologue: save rbp
    *(int *)((*(long *)((long)arg0) + ((long)((int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8)))) + 1))) * 4))) = ((unsigned long)((unsigned int)(arg0->tag)) + 2);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7Derived2opEi structural 7 lines
// glaurung: _ZN7Derived2opEi @ 0x16f0
typedef struct Derived Derived;
int _ZN7Derived2opEi(Derived * arg0, int arg1) {
    // x86-64 prologue: save rbp
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(arg1)) + 2000));
}
_ZN7DerivedC2Ev structural 13 lines
// glaurung: _ZN7DerivedC2Ev @ 0x1520
typedef struct Derived Derived;
struct Base;
static unsigned char glaurung_global_3fe0[16] __attribute__((aligned(16)));
void _ZN7DerivedC2Ev(Derived * arg0) {
    extern void _ZN4BaseC2Ev(struct Base *);
    extern unsigned char glaurung_global_3fe0[16];
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(void))_ZN4BaseC2Ev)();
    *(long *)(((long)arg0)) = (*(long *)(&glaurung_global_3fe0[0]) + 16);
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7DerivedD0Ev structural 13 lines
// glaurung: _ZN7DerivedD0Ev @ 0x1710
typedef struct Derived Derived;
struct Derived;
void _ZN7DerivedD0Ev(Derived * arg0) {
    extern void _ZN7DerivedD2Ev(struct Derived *);
    extern long _ZdlPv(char *);
    long var1;
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(void))_ZN7DerivedD2Ev)();
    var1 = _ZdlPv((char *)(arg0));
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7DerivedD2Ev structural 10 lines
// glaurung: _ZN7DerivedD2Ev @ 0x1560
typedef struct Derived Derived;
struct Base;
void _ZN7DerivedD2Ev(Derived * arg0) {
    extern void _ZN4BaseD2Ev(struct Base *);
    // x86-64 prologue: save rbp, frame 16 bytes
    ((void (*)(char *))_ZN4BaseD2Ev)((char *)(arg0));
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7MovableC2EOS_ structural 11 lines
// glaurung: _ZN7MovableC2EOS_ @ 0x1670
void _ZN7MovableC2EOS_(char * arg0, int * arg1) {
    long var0;
    // x86-64 prologue: save rbp
    var0 = (long)arg0;
    *(int *)((long)arg0) = *(int *)((long)arg1);
    *(int *)((var0 + 0x4)) = 1;
    *(int *)((long)arg1) = 0;
    // x86-64 epilogue: restore rbp
    return;
}
_ZN7MovableC2Ei structural 18 lines
// glaurung: _ZN7MovableC2Ei @ 0x1650
#ifndef GLAURUNG_STRUCT_Movable_DEFINED
#define GLAURUNG_STRUCT_Movable_DEFINED
typedef struct Movable Movable;
struct Movable {
    int v;
    int moved_in;
};
#endif
void _ZN7MovableC2Ei(Movable * arg0, int arg1) {
    Movable * ret;
    // x86-64 prologue: save rbp
    ret = arg0;
    arg0->v = arg1;
    arg0->moved_in = 0;
    // x86-64 epilogue: restore rbp
    return;
}
cpp_ctor_dtor pass 13 lines
// glaurung: cpp_ctor_dtor @ 0x12b0
struct Tracer;
__attribute__((no_stack_protector)) int cpp_ctor_dtor(int * arg0, int arg1) {
    extern void _ZN6TracerC2EPiii(struct Tracer *, int *, int, int);
    extern void _ZN6TracerD2Ev(struct Tracer *);
    unsigned char local_20[16];
    // x86-64 prologue: save rbp, frame 32 bytes
    ((void (*)(char *, int *, int, int))_ZN6TracerC2EPiii)((char *)(&local_20[0]), arg0, 0, (unsigned long)((unsigned int)(arg1)));
    *(int *)(((long)arg0 + 0x8)) = ((unsigned long)((unsigned int)(arg1)) + 10);
    ((void (*)(char *))_ZN6TracerD2Ev)((char *)(&local_20[0]));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((long)arg0))) + *(int *)(((long)arg0 + 0x4))))) + *(int *)(((long)arg0 + 0x8))));
}
cpp_exception pass 44 lines
// glaurung: cpp_exception @ 0x1360
int cpp_exception(int arg0) {
    extern int _ZL9may_throwi(int);
    int e;
    int local_18;
    int local_1c;
    int local_4;
    int local_8;
    long ret;
    long t2;
    long var0;
    long var12;
    int var13;
    int var14;
    long var15;
    long var2;
    int var3;
    long var4;
    try {
        // x86-64 prologue: save rbp, frame 32 bytes
        local_8 = arg0;
        var0 = ((long (*)(long))_ZL9may_throwi)((unsigned long)((unsigned int)(local_8)));
        local_1c = var0;
        var2 = (unsigned long)((unsigned int)(local_1c));
        var3 = (var2 + 3000);
        var4 = (unsigned long)((unsigned int)(var3));
        local_4 = var4;
        L_13c5: ;
        ret = (unsigned long)((unsigned int)(local_4));
        // x86-64 epilogue: restore rbp
        return ret;
    } catch (int exception_0) {
        var12 = (unsigned long)((unsigned int)(exception_0));
        local_18 = var12;
        var13 = 0x2328;
        t2 = local_18;
        var14 = (var13 - t2);
        var15 = (unsigned long)((unsigned int)(var14));
        local_4 = var15;
        ret = (unsigned long)((unsigned int)(local_4));
        // x86-64 epilogue: restore rbp
        return ret;
    }
}
cpp_lambda_capture pass 17 lines
// glaurung: cpp_lambda_capture @ 0x1430
struct anon_414;
__attribute__((no_stack_protector)) int cpp_lambda_capture(int arg0, int arg1) {
    extern int _ZZ18cpp_lambda_captureENK3__0clEi(const struct anon_414 *, int);
    unsigned char acc[12];
    int r;
    unsigned char local_20[16];
    int var2;
    // x86-64 prologue: save rbp, frame 48 bytes
    *(int *)(&acc[0]) = 0;
    *(int *)(&local_20[0]) = arg0;
    *(long *)((&local_20[0] + 8)) = (long)((long)(&acc[0]));
    var2 = ((int (*)(char *, int))_ZZ18cpp_lambda_captureENK3__0clEi)((char *)(&local_20[0]), (unsigned long)((unsigned int)(arg1)));
    r = var2;
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(r)) + *(int *)(&acc[0])));
}
cpp_move pass 18 lines
// glaurung: cpp_move @ 0x14a0
struct Movable;
__attribute__((no_stack_protector)) int cpp_move(int arg0) {
    extern int _ZL7consume7Movable(int *);
    extern void _ZN7MovableC2EOS_(char *, int *);
    extern void _ZN7MovableC2Ei(struct Movable *, int);
    int r;
    unsigned char local_10[8];
    unsigned char local_20[12];
    int var0;
    // x86-64 prologue: save rbp, frame 32 bytes
    ((void (*)(char *, int))_ZN7MovableC2Ei)((char *)(&local_10[0]), (unsigned long)((unsigned int)(arg0)));
    _ZN7MovableC2EOS_((char *)(&local_20[0]), (int *)(&local_10[0]));
    var0 = _ZL7consume7Movable((int *)(&local_20[0]));
    r = var0;
    // x86-64 epilogue: restore rbp
    return (unsigned int)(((unsigned long)((unsigned int)(r)) + *(int *)(&local_10[0])));
}
cpp_raii_guard pass 14 lines
// glaurung: cpp_raii_guard @ 0x1310
struct Guard;
__attribute__((no_stack_protector)) int cpp_raii_guard(int * arg0, int arg1) {
    extern void _ZN5GuardC2EPii(struct Guard *, int *, int);
    extern void _ZN5GuardD2Ev(struct Guard *);
    unsigned char local_20[16];
    // x86-64 prologue: save rbp, frame 32 bytes
    *(int *)((long)arg0) = 0;
    ((void (*)(char *, int *, int))_ZN5GuardC2EPii)((char *)(&local_20[0]), arg0, (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) + 700))));
    *(int *)(((long)arg0 + 0x4)) = 42;
    ((void (*)(char *))_ZN5GuardD2Ev)((char *)(&local_20[0]));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(*(int *)((long)arg0));
}
cpp_virtual_dispatch structural 27 lines
// glaurung: cpp_virtual_dispatch @ 0x1200
typedef struct Base Base;
struct Base;
struct Derived;
__attribute__((no_stack_protector)) int cpp_virtual_dispatch(int arg0, int arg1) {
    extern void _ZN4BaseC2Ev(struct Base *);
    extern void _ZN4BaseD2Ev(struct Base *);
    extern void _ZN7DerivedC2Ev(struct Derived *);
    extern void _ZN7DerivedD2Ev(struct Derived *);
    unsigned char p[8];
    unsigned char local_10[8];
    unsigned char local_18[8];
    void * local_38;
    int local_3c;
    long var10;
    // x86-64 prologue: save rbp, frame 64 bytes
    ((void (*)(char *))_ZN4BaseC2Ev)((char *)(&local_10[0]));
    ((void (*)(char *))_ZN7DerivedC2Ev)((char *)(&local_18[0]));
    local_38 = (((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) & 1))) != 0) ? &local_18[0] : &local_10[0]);
    *(long *)(&p[0]) = (long)((long)local_38);
    var10 = ((long (*)(void))(*(long *)(*(long *)(*(long *)(&p[0])))))();
    local_3c = var10;
    ((void (*)(char *))_ZN7DerivedD2Ev)((char *)(&local_18[0]));
    ((void (*)(char *))_ZN4BaseD2Ev)((char *)(&local_10[0]));
    // x86-64 epilogue: restore rbp
    return (unsigned int)(local_3c);
}

gcc -O2

5/14
_ZN4Base2opEi structural 5 lines
// glaurung: _ZN4Base2opEi @ 0x1340
typedef struct Base Base;
int _ZN4Base2opEi(const Base * arg0, int arg1) {
    return (unsigned int)((arg1 + 1000));
}
_ZN4BaseD0Ev structural 8 lines
// glaurung: _ZN4BaseD0Ev @ 0x1390
typedef struct Base Base;
void _ZN4BaseD0Ev(const Base * arg0) {
    extern long _ZdlPvm(void);
    long var1;
    var1 = _ZdlPvm();
    return;
}
_ZN4BaseD1Ev structural

Glaurung recovered no body in this lane.

_ZN4BaseD2Ev structural 5 lines
// glaurung: _ZN4BaseD2Ev @ 0x1350
typedef struct Base Base;
void _ZN4BaseD2Ev(const Base * arg0) {
    return;
}
_ZN7Derived2opEi structural 5 lines
// glaurung: _ZN7Derived2opEi @ 0x1360
typedef struct Derived Derived;
int _ZN7Derived2opEi(const Derived * arg0, int arg1) {
    return (unsigned int)((arg1 + 2000));
}
_ZN7DerivedD0Ev structural 8 lines
// glaurung: _ZN7DerivedD0Ev @ 0x1380
typedef struct Derived Derived;
void _ZN7DerivedD0Ev(const Derived * arg0) {
    extern long _ZdlPvm(void);
    long var1;
    var1 = _ZdlPvm();
    return;
}
_ZN7DerivedD1Ev structural

Glaurung recovered no body in this lane.

_ZN7DerivedD2Ev structural 5 lines
// glaurung: _ZN7DerivedD2Ev @ 0x1370
typedef struct Derived Derived;
void _ZN7DerivedD2Ev(const Derived * arg0) {
    return;
}
cpp_ctor_dtor pass 13 lines
// glaurung: cpp_ctor_dtor @ 0x12c0
int cpp_ctor_dtor(int * arg0, int arg1) {
    long var0;
    long var1;
    int var2;
    var0 = (unsigned long)((unsigned int)((arg1 + 1)));
    var1 = (unsigned long)((unsigned int)((arg1 + 10)));
    var2 = (arg1 + 2);
    *(int *)(((long)arg0 + 0x4)) = var2;
    *(int *)(((long)arg0 + 0x8)) = var1;
    *(int *)(((long)arg0)) = var0;
    return (unsigned int)((var1 + (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var2)) + var0)))));
}
cpp_exception pass 33 lines
// glaurung: cpp_exception @ 0x1300
int cpp_exception(int arg0) {
    long ret;
    int stack_0;
    long t0;
    long t1;
    long t2;
    long var0;
    int var13;
    int var14;
    long var15;
    try {
        var0 = (unsigned long)((unsigned int)(arg0));
        t0 = arg0;
        t1 = (long)((int)(t0));
        if ((t1 < 0)) {
            throw (int)(var0);
        }
        ret = (unsigned long)((unsigned int)((arg0 + 3005)));
        L_1319: ;
        // x86-64 epilogue: tear down frame
        return ret;
    } catch (int exception_0) {
        var13 = 0x2328;
        t2 = exception_0;
        var14 = (var13 - t2);
        var15 = (unsigned long)((unsigned int)(var14));
        stack_0 = var15;
        ret = (unsigned long)((unsigned int)(stack_0));
        // x86-64 epilogue: tear down frame
        return ret;
    }
}
cpp_lambda_capture pass 5 lines
// glaurung: cpp_lambda_capture @ 0x1320
int cpp_lambda_capture(int arg0, int arg1) {
    int r;
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg0)) * arg1))) + (unsigned long)((unsigned int)((arg0 + arg1)))));
}
cpp_move pass 5 lines
// glaurung: cpp_move @ 0x1330
int cpp_move(int arg0) {
    int r;
    return (unsigned int)((arg0 + 50));
}
cpp_raii_guard pass 8 lines
// glaurung: cpp_raii_guard @ 0x12e0
int cpp_raii_guard(int * arg0, int arg1) {
    long ret;
    ret = (unsigned long)((unsigned int)((arg1 + 700)));
    *(int *)(((long)arg0 + 0x4)) = 42;
    *(int *)(((long)arg0)) = ret;
    return ret;
}
cpp_virtual_dispatch structural 28 lines
// glaurung: cpp_virtual_dispatch @ 0x1240
typedef struct Base Base;
static unsigned char glaurung_global_3fc8[16] __attribute__((aligned(16)));
static unsigned char glaurung_global_3fd0[16] __attribute__((aligned(16)));
static unsigned char glaurung_global_3fd8[16] __attribute__((aligned(16)));
static unsigned char glaurung_global_3fe0[16] __attribute__((aligned(16)));
int cpp_virtual_dispatch(int arg0, int arg1) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern unsigned char glaurung_global_3fc8[16];
    extern unsigned char glaurung_global_3fd0[16];
    extern unsigned char glaurung_global_3fd8[16];
    extern unsigned char glaurung_global_3fe0[16];
    Base * p;
    long local_10;
    unsigned char local_18[8];
    unsigned char local_20[8];
    long ret;
    long var11;
    local_10 = (long)(0x28);
    *(long *)(&local_20[0]) = (*(long *)(&glaurung_global_3fc8[0]) + 16);
    *(long *)(&local_18[0]) = (*(long *)(&glaurung_global_3fe0[0]) + 16);
    var11 = ((long (*)(void))((((unsigned long)((unsigned int)((arg0 & 1))) != 0) ? *(long *)(&glaurung_global_3fd0[0]) : *(long *)(&glaurung_global_3fd8[0]))))();
    ret = var11;
    if ((local_10 != 0x28)) {
        __stack_chk_fail();
    }
    return ret;
}

clang -O2

5/11
_ZN4Base2opEi structural 5 lines
// glaurung: _ZN4Base2opEi @ 0x1240
typedef struct Base Base;
int _ZN4Base2opEi(Base * arg0, int arg1) {
    return (unsigned int)((arg1 + 1000));
}
_ZN4BaseD0Ev structural 8 lines
// glaurung: _ZN4BaseD0Ev @ 0x1250
typedef struct Base Base;
void _ZN4BaseD0Ev(Base * arg0) {
    extern long _ZdlPv(char *);
    long var0;
    var0 = _ZdlPv((char *)(arg0));
    return;
}
_ZN4BaseD2Ev structural 5 lines
// glaurung: _ZN4BaseD2Ev @ 0x1230
typedef struct Base Base;
void _ZN4BaseD2Ev(Base * arg0) {
    return;
}
_ZN7Derived2opEi structural 5 lines
// glaurung: _ZN7Derived2opEi @ 0x1260
typedef struct Derived Derived;
int _ZN7Derived2opEi(Derived * arg0, int arg1) {
    return (unsigned int)((arg1 + 2000));
}
_ZN7DerivedD0Ev structural 8 lines
// glaurung: _ZN7DerivedD0Ev @ 0x1270
typedef struct Derived Derived;
void _ZN7DerivedD0Ev(Derived * arg0) {
    extern long _ZdlPv(char *);
    long var0;
    var0 = _ZdlPv((char *)(arg0));
    return;
}
cpp_ctor_dtor pass 7 lines
// glaurung: cpp_ctor_dtor @ 0x1190
int cpp_ctor_dtor(int * arg0, int arg1) {
    *(int *)(((long)arg0)) = (arg1 + 1);
    *(int *)(((long)arg0 + 0x8)) = (arg1 + 10);
    *(int *)(((long)arg0 + 0x4)) = (arg1 + 2);
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((arg1 + arg1))) + 3))) + arg1))) + 10));
}
cpp_exception pass 34 lines
// glaurung: cpp_exception @ 0x11c0
int cpp_exception(int arg0) {
    long ret;
    long t0;
    long t1;
    long t2;
    long var0;
    int var10;
    int var11;
    int var6;
    long var7;
    try {
        var0 = (unsigned long)((unsigned int)(arg0));
        t0 = arg0;
        t1 = (long)((int)(t0));
        if ((t1 < 0)) {
            throw (int)(var0);
        }
        var6 = (var0 + 3005);
        var7 = (unsigned long)((unsigned int)(var6));
        L_11cd: ;
        ret = (unsigned long)((unsigned int)(var7));
        // x86-64 epilogue: tear down frame
        return ret;
    } catch (int exception_0) {
        var10 = 0x2328;
        t2 = exception_0;
        var11 = (var10 - t2);
        var7 = (unsigned long)((unsigned int)(var11));
        ret = (unsigned long)((unsigned int)(var7));
        // x86-64 epilogue: tear down frame
        return ret;
    }
}
cpp_lambda_capture pass 5 lines
// glaurung: cpp_lambda_capture @ 0x1210
int cpp_lambda_capture(int arg0, int arg1) {
    int acc;
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(arg1)) * arg0))) + arg1))) + arg0));
}
cpp_move pass 5 lines
// glaurung: cpp_move @ 0x1220
int cpp_move(int arg0) {
    int r;
    return (unsigned int)((arg0 + 50));
}
cpp_raii_guard pass 8 lines
// glaurung: cpp_raii_guard @ 0x11b0
int cpp_raii_guard(int * arg0, int arg1) {
    long ret;
    ret = (unsigned long)((unsigned int)((arg1 + 700)));
    *(int *)(((long)arg0 + 0x4)) = 42;
    *(int *)(((long)arg0)) = ret;
    return ret;
}
cpp_virtual_dispatch structural 18 lines
// glaurung: cpp_virtual_dispatch @ 0x1150
typedef struct Base Base;
static unsigned char glaurung_global_3fd8[16] __attribute__((aligned(16)));
static unsigned char glaurung_global_3fe0[16] __attribute__((aligned(16)));
__attribute__((no_stack_protector)) int cpp_virtual_dispatch(int arg0, int arg1) {
    extern unsigned char glaurung_global_3fd8[16];
    extern unsigned char glaurung_global_3fe0[16];
    Base * p;
    unsigned char local_10[16];
    int ret;
    long rsp;
    rsp = (rsp - 24);
    *(long *)((&local_10[0] + 8)) = (*(long *)(&glaurung_global_3fd8[0]) + 16);
    *(long *)(&local_10[0]) = (*(long *)(&glaurung_global_3fe0[0]) + 16);
    ret = ((int (*)(void))(*(long *)(*(long *)((((unsigned long)((unsigned char)((arg0 & 1))) == 0) ? (rsp + 16) : (long)(&local_10[0]))))))();
    // x86-64 epilogue: tear down frame
    return ret;
}

← 213 fixtures