# Source (tiny.cc): # void a() {} # void b() {} # int main(int argc, char** argv) { # void(*ptr)(); # if (argc == 1) # ptr = &a; # else # ptr = &b; # ptr(); # } # Compile with: # clang++ tiny.cc -S -o tiny.s .text .file "tiny.cc" .globl _Z1av # -- Begin function _Z1av .p2align 4, 0x90 .type _Z1av,@function _Z1av: # @_Z1av .cfi_startproc # %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp popq %rbp retq .Lfunc_end0: .size _Z1av, .Lfunc_end0-_Z1av .cfi_endproc # -- End function .globl _Z1bv # -- Begin function _Z1bv .p2align 4, 0x90 .type _Z1bv,@function _Z1bv: # @_Z1bv .cfi_startproc # %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp popq %rbp retq .Lfunc_end1: .size _Z1bv, .Lfunc_end1-_Z1bv .cfi_endproc # -- End function .globl main # -- Begin function main .p2align 4, 0x90 .type main,@function main: # @main .cfi_startproc # %bb.0: pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset %rbp, -16 movq %rsp, %rbp .cfi_def_cfa_register %rbp subq $32, %rsp movl $0, -4(%rbp) movl %edi, -8(%rbp) movq %rsi, -16(%rbp) cmpl $1, -8(%rbp) jne .LBB2_2 # %bb.1: movabsq $_Z1av, %rax movq %rax, -24(%rbp) jmp .LBB2_3 .LBB2_2: movabsq $_Z1bv, %rax movq %rax, -24(%rbp) .LBB2_3: callq *-24(%rbp) movl -4(%rbp), %eax addq $32, %rsp popq %rbp retq .Lfunc_end2: .size main, .Lfunc_end2-main .cfi_endproc # -- End function .ident "clang version 6.0.0 (trunk 316774)" .section ".note.GNU-stack","",@progbits