@@ -106,32 +106,38 @@ private void detectReturnTypes(Program p, TaskMonitor m, MessageLog log, Functio
106
106
return ;
107
107
}
108
108
long numberOfArgs = totalArgReturnVals - numberOfRet ;
109
- if (f .getReturnType ().getLength () != numberOfRet * pointerSize ) {
109
+ if (f .getReturnType ().getLength () != numberOfRet * pointerSize
110
+ || (numberOfRet != 0 && f .getReturn ().getStackOffset () != minWrite )) {
111
+ f .setCustomVariableStorage (true );
110
112
try {
111
113
switch (numberOfRet ) {
112
114
case 0 :
113
115
f .setReturnType (DataType .VOID , SourceType .ANALYSIS );
114
116
break ;
115
117
case 1 :
116
- f .setCustomVariableStorage (true );
117
118
Undefined8DataType t = new Undefined8DataType ();
118
- f .setReturn (t , new VariableStorage (p , minWrite , t .getLength ()), SourceType .ANALYSIS );
119
+ // The type is set to imported because otherwise we cannot overwrite it
120
+ f .setReturn (t , new VariableStorage (p , minWrite , t .getLength ()), SourceType .IMPORTED );
119
121
break ;
120
122
default :
121
- f .setCustomVariableStorage (true );
122
123
StructureDataType s =
123
124
new StructureDataType (String .format ("ret_%d" , f .getSymbol ().getID ()), 0 );
124
125
for (int i = 0 ; i < numberOfRet ; i ++) {
125
126
s .add (new Undefined8DataType ());
126
127
}
127
- f .setReturn (s , new VariableStorage (p , minWrite , s .getLength ()), SourceType .ANALYSIS );
128
+ // The type is set to imported because otherwise we cannot overwrite it
129
+ f .setReturn (s , new VariableStorage (p , minWrite , s .getLength ()), SourceType .IMPORTED );
128
130
break ;
129
131
}
130
132
} catch (InvalidInputException e ) {
131
133
log .appendException (e );
132
134
}
133
135
}
134
- if (f .getParameterCount () != numberOfArgs ) {
136
+ int paramenterLen = 0 ;
137
+ for (Parameter param : f .getParameters ()) {
138
+ paramenterLen += param .getLength ();
139
+ }
140
+ if (paramenterLen != numberOfArgs ) {
135
141
// Set the parameters
136
142
Parameter [] params = f .getParameters ();
137
143
List <Variable > newParams = new Vector <>();
0 commit comments