.... snip ...
Nonsense. The compiler does not imply how to fix anything. It
has issued a diagnostic about having encountered an unusual
condition.
The text of the diagnostic is a quality-of-implementation issue.
"Assignment makes pointer from integer without cast" is an
example of poor quality-of-implementation, slightly worse, in my
opinion, than, say, "E#42".
A good warning message for this condition would be, say,
"Implicitly declared function returns integer where user seems
to expect a pointer for assignment to (lvalue expression)" or a
separate diagnostic about the implicit declaration.
Even lint's "illegal combination of pointer and integer, op =
[123]" is a step above the gcc message, since it doesn't appear
(to an uninformed reader) to suggest a cast as the solution.
It is up to the programmer to determine whether the condition
is an error and what to do about it.