1// RUN: %clang_cc1 -triple=i686-pc-win32 -fsyntax-only -verify %s -std=c++11
2
3namespace PR14339 {
4  class A {
5  public:
6    virtual void __attribute__((thiscall)) f();	// expected-note{{overridden virtual function is here}}
7  };
8
9  class B : public A {
10  public:
11    void __attribute__((cdecl)) f();  // expected-error{{virtual function 'f' has different calling convention attributes ('void () __attribute__((cdecl))') than the function it overrides (which has calling convention 'void () __attribute__((thiscall))'}}
12  };
13
14  class C : public A {
15  public:
16    void __attribute__((thiscall)) f();  // This override is correct
17  };
18
19  class D : public A {
20  public:
21    void f();  // This override is correct because thiscall is the default calling convention for class members
22  };
23
24  class E {
25  public:
26    virtual void __attribute__((stdcall)) g();  // expected-note{{overridden virtual function is here}}
27  };
28
29  class F : public E {
30  public:
31    void g();  // expected-error{{virtual function 'g' has different calling convention attributes ('void () __attribute__((thiscall))') than the function it overrides (which has calling convention 'void () __attribute__((stdcall))'}}
32  };
33}
34