// RUN: %clang_cc1 < %s -triple i386-mingw32 -fms-extensions -emit-llvm -x c++ | FileCheck %s

// optnone wins over inlinehint.
// Test that both func1 and func2 are marked optnone and noinline.

// Definition with both optnone and inlinehint.
__attribute__((optnone))
inline int func1(int a) {
  return a + a + a + a;
}
// CHECK: @_Z5func1i({{.*}}) [[OPTNONE:#[0-9]+]]

// optnone declaration, inlinehint definition.
__attribute__((optnone))
int func2(int a);

inline int func2(int a) {
  return a + a + a + a;
}
// CHECK: @_Z5func2i({{.*}}) [[OPTNONE]]

// Keep alive the definitions of func1 and func2.
int foo() {
  int val = func1(1);
  return val + func2(2);
}

// optnone wins over minsize.
__attribute__((optnone))
int func3(int a);

__attribute__((minsize))
int func3(int a) {
  return a + a + a + a;
}
// Same attribute set as everything else, therefore no 'minsize'.
// CHECK: @_Z5func3i({{.*}}) [[OPTNONE]]


// Verify that noreturn is compatible with optnone.
__attribute__((noreturn))
extern void exit_from_function();

__attribute__((noreturn)) __attribute((optnone))
extern void noreturn_function(int a) { exit_from_function(); }
// CHECK: @_Z17noreturn_functioni({{.*}}) [[NORETURN:#[0-9]+]]


// Verify that __declspec(noinline) is compatible with optnone.
__declspec(noinline) __attribute__((optnone))
void func4() { return; }
// CHECK: @_Z5func4v() [[OPTNONE]]

__declspec(noinline)
extern void func5();

__attribute__((optnone))
void func5() { return; }
// CHECK: @_Z5func5v() [[OPTNONE]]


// Verify also that optnone can be used on dllexport functions.
// Adding attribute optnone on a dllimport function has no effect.

__attribute__((dllimport))
__attribute__((optnone))
int imported_optnone_func(int a);

__attribute__((dllexport))
__attribute__((optnone))
int exported_optnone_func(int a) {
  return imported_optnone_func(a); // use of imported func
}
// CHECK: @_Z21exported_optnone_funci({{.*}}) [[OPTNONE]]
// CHECK: declare dllimport {{.*}} @_Z21imported_optnone_funci({{.*}}) [[DLLIMPORT:#[0-9]+]]


// CHECK: attributes [[OPTNONE]] = { noinline {{.*}} optnone
// CHECK: attributes [[NORETURN]] = { noinline noreturn {{.*}} optnone

// CHECK: attributes [[DLLIMPORT]] =
// CHECK-NOT: optnone
