// Tests that callback function whose address is taken is attached Type ID metadata
// as it is a potential indirect call target.

// RUN: %clang_cc1 -triple x86_64-unknown-linux -fexperimental-call-graph-section \
// RUN: -emit-llvm -o %t %s
// RUN: FileCheck %s < %t

////////////////////////////////////////////////////////////////////////////////
typedef void (*CallbackFn)(int);

// Callback function with "internal" linkage.
// CHECK-LABEL: define internal void @_ZL10myCallbacki(
// CHECK-SAME: {{.*}} !callgraph [[F_CALLBACK:![0-9]+]]
static void myCallback(int value) 
{
    volatile int sink = value;
    (void)sink;
}

int takeCallbackAddress() {
    // Take the address of the callback explicitly (address-taken function)
    CallbackFn cb = &myCallback;
    // Store the address in a volatile pointer to keep it observable
    volatile void* addr = (void*)cb;
    (void)addr;

    return 0;
}

// CHECK: [[F_CALLBACK]]   = !{!"_ZTSFviE"}
