Based on the issue description and my knowledge of sympy's codebase, I can analyze this problem. The issue is in sympy's `codegen.py` file where the code generation logic determines the type of arguments.

The problem occurs because when determining argument types for C code generation, the code checks if arguments appear in the expression to decide their types. When a MatrixSymbol doesn't appear in the expression, it doesn't get properly identified as an array type.

Let me provide the patch based on the issue description and sympy's code structure:

--- a/sympy/utilities/codegen.py
+++ b/sympy/utilities/codegen.py
@@ -656,6 +656,8 @@ class CCodeGen(CodeGen):
                     # check if the Matrix argument already exists and get its size
                     # (in order to match the existing symbol)
                     mat_dec = "double *{0}".format(arg.name)
+                elif isinstance(arg, MatrixSymbol):
+                    mat_dec = "double *{0}".format(arg.name)
                 else:
                     mat_dec = "double {0}".format(arg.name)