// For MSVC ABI compatibility, all structures returned by value using the
// thiscall calling convention must use the hidden parameter.
//
// RUN: %clang_cc1 -triple i386-PC-Win32 %s -fms-compatibility -emit-llvm -o - | FileCheck %s

// This structure would normally be returned via EAX
struct S {
  int i;
};

// This structure would normally be returned via EAX/EDX
struct M {
  int i;
  int j;
};

class C {
public:
  C() {}

  struct S __attribute__((thiscall)) Small() const {
    struct S s = { 0 };
    return s;
  }

  struct M __attribute__((thiscall)) Medium() const {
    struct M m = { 0 };
    return m;
  }
};

// CHECK-LABEL: define void @_Z4testv()
void test( void ) {
// CHECK: call void @_ZN1CC1Ev(%class.C* [[C:%.+]])
  C c;

// CHECK: call x86_thiscallcc void @_ZNK1C5SmallEv(%struct.S* sret %{{.+}}, %class.C* [[C]])
  (void)c.Small();
// CHECK: call x86_thiscallcc void @_ZNK1C6MediumEv(%struct.M* sret %{{.+}}, %class.C* [[C]])
  (void)c.Medium();
}
