+ unsigned cc = get_method_calling_convention(irtype);
+ switch (function_type->calling_convention) {
+ case CC_DEFAULT: /* unspecified calling convention, equal to one of the other, typically cdecl */
+ case CC_CDECL:
+is_cdecl:
+ set_method_calling_convention(irtype, SET_CDECL(cc));
+ break;
+
+ case CC_STDCALL:
+ if (function_type->variadic || function_type->unspecified_parameters)
+ goto is_cdecl;
+
+ /* only non-variadic function can use stdcall, else use cdecl */
+ set_method_calling_convention(irtype, SET_STDCALL(cc));
+ break;
+
+ case CC_FASTCALL:
+ if (function_type->variadic || function_type->unspecified_parameters)
+ goto is_cdecl;
+ /* only non-variadic function can use fastcall, else use cdecl */
+ set_method_calling_convention(irtype, SET_FASTCALL(cc));
+ break;
+
+ case CC_THISCALL:
+ /* Hmm, leave default, not accepted by the parser yet. */
+ warningf(&function_type->base.source_position, "THISCALL calling convention not supported yet");
+ break;
+ }