summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2019-12-11 17:47:43 -0800
committerPhilip Chimento <philip.chimento@gmail.com>2019-12-14 13:28:41 -0800
commit8bfecdf6c7f5e02c698dfab740660660b6d05135 (patch)
treea5f1f88505823dc89379762b3c0f2ecca749a161
parentde5f87a30f9d11f7ec13e16f0cb31ff98dd1f427 (diff)
gsignal: Assume __vectorcall is unsafe for GObject signals
__vectorcall is a callee-cleanup convention, so assume it is unsafe for the same reason that the other callee-cleanup conventions are.
-rw-r--r--clang-plugin/gsignal-checker.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/clang-plugin/gsignal-checker.cpp b/clang-plugin/gsignal-checker.cpp
index 2f8cb50..2a2be1c 100644
--- a/clang-plugin/gsignal-checker.cpp
+++ b/clang-plugin/gsignal-checker.cpp
@@ -578,6 +578,7 @@ _is_gtype_subclass (GIBaseInfo *a, GIBaseInfo *b)
* Note: This is used for C++ non-static member function calls (when using
* MSVC++), so we cannot use C++ methods for callbacks with swapped
* parameters.
+ * • Microsoft vectorcall: Same.
*
* References:
* [1]: http://en.wikipedia.org/wiki/X86_calling_conventions
@@ -623,9 +624,6 @@ calling_convention_is_safe (CallingConv conv)
#ifndef HAVE_LLVM_3_7
case CC_PnaclCall: /* Chromium PNC — equivalent to cdecl */
#endif
-#ifdef HAVE_LLVM_3_7
- case CC_X86VectorCall:
-#endif
#ifdef HAVE_LLVM_3_9
case CC_Swift: /* Swift — lowered to C calling conventions */
case CC_PreserveMost: /* arguments passed identically to cdecl */
@@ -639,6 +637,9 @@ calling_convention_is_safe (CallingConv conv)
case CC_X86FastCall:
case CC_X86ThisCall:
case CC_X86Pascal:
+#ifdef HAVE_LLVM_3_7
+ case CC_X86VectorCall:
+#endif
return false;
case CC_IntelOclBicc:
/* Intel OpenCL Built-Ins. I can’t find any documentation about