// REQUIRES: not-darwin
// RUN: %clang %s -Wall -emit-llvm -g %O0opt -c -o %t.bc
// RUN: rm -rf %t.klee-out
// RUN: %klee --output-dir=%t.klee-out -exit-on-error -search=nurs:covnew %t.bc DUMMY_ARG >%t1.log 2>&1
// RUN: FileCheck -input-file=%t1.log %s

// This test case is designed to cover code in `klee::getDirectCallTarget(CallBase)`.
// In particular, it's designed to test the case where a bitcasted function call calls
// a weak alias.
struct v1 {
  int c;
  int d;
};

int __real_function(struct v1 *unused, struct v1 *unused2, int unused3) {
  return 0;
}

struct v2 {
  int e;
  int f;
};

int alias_function(struct v1 *, struct v1 *, int)
    __attribute__((weak, alias("__real_function")));

int main(int argc, char** argv) {
  struct v2 local = { .e= 0, .f=0 };
  int number = 0;

  // Call via a bitcasted alias.
  number = ((int (*)(struct v2 *, struct v2 *, int))alias_function)(&local,
                                                                    &local, 0);
  return number % 255;
}

// CHECK: KLEE: done: completed paths = 1
