Skip to content

Commit b732cb0

Browse files
committed
Fix CI issue
1 parent e5f8906 commit b732cb0

3 files changed

Lines changed: 33 additions & 7 deletions

File tree

lib/cmock_generator_plugin_cexception.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def mock_function_declarations(function)
2929
"void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, CEXCEPTION_T cmock_to_throw);\n"
3030
else
3131
"#define #{function[:name]}_ExpectAndThrow(#{function[:args_call]}, cmock_to_throw) #{function[:name]}_CMockExpectAndThrow(__LINE__, #{function[:args_call]}, cmock_to_throw)\n" \
32-
"void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, CEXCEPTION_T cmock_to_throw);\n"
32+
"void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, #{helper_args_string(function)}, CEXCEPTION_T cmock_to_throw);\n"
3333
end
3434
end
3535

@@ -40,11 +40,20 @@ def mock_implementation(_function)
4040
end
4141

4242
def mock_interfaces(function)
43-
arg_insert = function[:args_string] == 'void' ? '' : "#{function[:args_string]}, "
43+
arg_insert = function[:args_string] == 'void' ? '' : "#{helper_args_string(function)}, "
4444
["void #{function[:name]}_CMockExpectAndThrow(UNITY_LINE_TYPE cmock_line, #{arg_insert}CEXCEPTION_T cmock_to_throw)\n{\n",
4545
@utils.code_add_base_expectation(function[:name]),
4646
@utils.code_call_argument_loader(function),
4747
" cmock_call_instance->ExceptionToThrow = cmock_to_throw;\n",
4848
"}\n\n"].join
4949
end
50+
51+
private
52+
53+
def helper_args_string(function)
54+
return function[:args_string] if function[:args_string] == 'void'
55+
return function[:args_string] unless function[:args]&.any? { |m| m.is_a?(Hash) && m[:array_dims] }
56+
57+
function[:args].map { |m| CMockGeneratorUtils.arg_declaration(m) }.join(', ')
58+
end
5059
end

lib/cmock_generator_plugin_expect.rb

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ def mock_function_declarations(function)
5151
elsif function[:return][:void?]
5252
lines << "#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Expect (not AndReturn)\");\n" if @error_stubs
5353
lines << "#define #{function[:name]}_Expect(#{function[:args_call]}) #{function[:name]}_CMockExpect(__LINE__, #{function[:args_call]})\n"
54-
lines << "void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{function[:args_string]});\n"
54+
lines << "void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{helper_args_string(function)});\n"
5555
else
5656
lines << "#define #{function[:name]}_Expect(#{function[:args_call]}) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAndReturn\");\n" if @error_stubs
5757
lines << "#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) #{function[:name]}_CMockExpectAndReturn(__LINE__, #{function[:args_call]}, cmock_retval)\n"
58-
lines << "void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, #{function[:return][:str]});\n"
58+
lines << "void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{helper_args_string(function)}, #{function[:return][:str]});\n"
5959
end
6060
lines
6161
end
@@ -86,12 +86,12 @@ def mock_interfaces(function)
8686
if function[:args_string] == 'void'
8787
"void #{func_name}_CMockExpect(UNITY_LINE_TYPE cmock_line)\n{\n"
8888
else
89-
"void #{func_name}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{function[:args_string]})\n{\n"
89+
"void #{func_name}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{helper_args_string(function)})\n{\n"
9090
end
9191
elsif function[:args_string] == 'void'
9292
"void #{func_name}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]})\n{\n"
9393
else
94-
"void #{func_name}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, #{function[:return][:str]})\n{\n"
94+
"void #{func_name}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{helper_args_string(function)}, #{function[:return][:str]})\n{\n"
9595
end
9696
lines << " TEST_MESSAGE(\"CMock: #{func_name}_#{function[:return][:void?] ? 'Expect' : 'ExpectAndReturn'} called\");\n" if @debug_output
9797
lines << @utils.code_add_base_expectation(func_name)
@@ -107,4 +107,17 @@ def mock_verify(function)
107107
" UNITY_TEST_FAIL(cmock_line, CMockStringCalledLess);\n" \
108108
" }\n"
109109
end
110+
111+
private
112+
113+
# Build args string for generated _CMockExpect/_CMockExpectAndReturn helper signatures.
114+
# Converts flat array parameters (e.g. POINT_T a[N]) to pointer notation (POINT_T* a)
115+
# to avoid GCC -Wstringop-overflow, which treats static array sizes in function
116+
# parameters as bounds hints and errors when callers pass smaller objects.
117+
def helper_args_string(function)
118+
return function[:args_string] if function[:args_string] == 'void'
119+
return function[:args_string] unless function[:args]&.any? { |m| m.is_a?(Hash) && m[:array_dims] }
120+
121+
function[:args].map { |m| CMockGeneratorUtils.arg_declaration(m) }.join(', ')
122+
end
110123
end

lib/cmock_generator_utils.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,15 @@ def self.arg_declaration(arg)
4343
base_type = arg_type_with_const(arg).sub(/\*$/, '').strip
4444
dims_str = arg[:array_dims].map { |d| "[#{d}]" }.join
4545
"#{base_type} (*#{arg[:name]})#{dims_str}"
46-
elsif arg[:array_dims]
46+
elsif arg[:array_dims] && arg[:array_dims].length > 1
47+
# Multi-dimensional array (e.g. int matrix[13][4]): must preserve trailing
48+
# dimensions so the parameter type decays correctly (int (*)[4], not int*).
4749
base_type = arg_type_with_const(arg).sub(/\*$/, '').strip
4850
dims_str = arg[:array_dims].map { |d| "[#{d}]" }.join
4951
"#{base_type} #{arg[:name]}#{dims_str}"
5052
else
53+
# Plain param or 1D array param: arg[:type] is already the pointer type
54+
# (parser converts T name[N] -> T*), so arg_type_with_const gives T*.
5155
"#{arg_type_with_const(arg)} #{arg[:name]}"
5256
end
5357
end

0 commit comments

Comments
 (0)