/* check if this function is defined as calleeSaves
then mark it as such */
- FUNC_CALLEESAVES(sym->type) = inCalleeSaveList (sym->name);
+ FUNC_CALLEESAVES(sym->type) = inCalleeSaveList (sym->name);
/* if interrupt service routine */
/* then it cannot have arguments */
}
}
+ for (argCnt=1, acargs = FUNC_ARGS(sym->type);
+ acargs;
+ acargs=acargs->next, argCnt++) {
+ if (!acargs->sym) {
+ // this can happen for reentrant functions
+ werror(E_PARAM_NAME_OMITTED, sym->name, argCnt);
+ // the show must go on: synthesize a name and symbol
+ sprintf (acargs->name, "_%s_PARM_%d", sym->name, argCnt);
+ acargs->sym = newSymbol (acargs->name, 1);
+ SPEC_OCLS (acargs->etype) = istack;
+ acargs->sym->type = copyLinkChain (acargs->type);
+ acargs->sym->etype = getSpec (acargs->sym->type);
+ acargs->sym->_isparm = 1;
+ strcpy (acargs->sym->rname, acargs->name);
+ } else if (strcmp(acargs->sym->name, acargs->sym->rname)==0) {
+ // synthesized name
+ werror(E_PARAM_NAME_OMITTED, sym->name, argCnt);
+ }
+ }
+
if (!csym && !(csym = findSym (SymbolTab, sym, sym->name)))
return 1; /* not defined nothing more to check */
/* synthesize a variable name */
if (!val->sym)
{
-
sprintf (val->name, "_%s_PARM_%d", func->name, pNum++);
val->sym = newSymbol (val->name, 1);
SPEC_OCLS (val->etype) = port->mem.default_local_map;
{ W_CAST_STRUCT_PTR,ERROR_LEVEL_WARNING,
"cast of struct %s * to struct %s * " },
{ W_IF_ALWAYS_TRUE, ERROR_LEVEL_WARNING,
- "if-statement condition always true, if-statement not generated" },
+ "if-statement condition always true, if-statement not generated" },
+{ E_PARAM_NAME_OMITTED, ERROR_LEVEL_ERROR,
+ "in function %s: name omitted for parameter %d" },
};
/*
#define W_SYMBOL_NAME_TOO_LONG 156
#define W_CAST_STRUCT_PTR 157 /* pointer to different structure types */
#define W_IF_ALWAYS_TRUE 158
+#define E_PARAM_NAME_OMITTED 159
/** Describes the maximum error level that will be logged. Any level
* includes all of the levels listed after it.