1 | // RUN: %clang_cc1 -triple=i686-pc-win32 -fsyntax-only -verify %s -std=c++11 |
2 | |
3 | namespace 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 | |