brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 1d9d1fb Raw
34 lines · cpp
1// RUN: %clang_cc1 -triple=i686-pc-win32 -fsyntax-only -verify %s -std=c++112 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 correct17  };18 19  class D : public A {20  public:21    void f();  // This override is correct because thiscall is the default calling convention for class members22  };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