Compiler projects using llvm
// RUN: %clang_cc1 -triple x86_64 -S -emit-llvm -disable-llvm-passes -o - %s | FileCheck %s
//
// Verifies that clang-generated *.inline are removed when shadowed by an
// external definition, even when that definition appears at the end of the
// file.

// CHECK-NOT: strlen.inline

extern unsigned long strlen(char const *s);

extern __inline __attribute__((__always_inline__)) __attribute__((__gnu_inline__)) unsigned long strlen(char const *s) {
  return 1;
}

static unsigned long chesterfield(char const *s) {
  return strlen(s);
}
static unsigned long (*_strlen)(char const *ptr);

unsigned long blutch(char const *s) {
  return chesterfield(s);
}

unsigned long strlen(char const *s) {
  return _strlen(s);
}