aboutsummaryrefslogtreecommitdiff
path: root/test/SemaCXX/virtual-override-x64.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaCXX/virtual-override-x64.cpp')
-rw-r--r--test/SemaCXX/virtual-override-x64.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/SemaCXX/virtual-override-x64.cpp b/test/SemaCXX/virtual-override-x64.cpp
new file mode 100644
index 000000000000..8d5aad8889df
--- /dev/null
+++ b/test/SemaCXX/virtual-override-x64.cpp
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -triple=x86_64-pc-unknown -fsyntax-only -verify %s
+
+// Non-x86 targets ignore the calling conventions by default (but will warn
+// when one is encountered), so we want to make sure the virtual overrides
+// continue to work.
+namespace PR14339 {
+ class A {
+ public:
+ virtual void __attribute__((thiscall)) f(); // expected-warning {{calling convention 'thiscall' ignored for this target}}
+ };
+
+ class B : public A {
+ public:
+ void __attribute__((cdecl)) f();
+ };
+
+ class C : public A {
+ public:
+ void __attribute__((thiscall)) f(); // expected-warning {{calling convention 'thiscall' ignored for this target}}
+ };
+
+ class D : public A {
+ public:
+ void f();
+ };
+
+ class E {
+ public:
+ virtual void __attribute__((stdcall)) g(); // expected-warning {{calling convention 'stdcall' ignored for this target}}
+ };
+
+ class F : public E {
+ public:
+ void g();
+ };
+}