It doesn't matter whether or not the function result can be discarded. "Consider" a procedure a function whose result is discarded (which is what C does) and it becomes obvious that the problem has nothing to do with what happens to the result.
Discarded or not, it is necessary to distinguish between a function call and a function reference. That's what the presence of parentheses _should_ do. In a correctly designed language, parentheses present = function/procedure invocation, parentheses NOT present = function/procedure reference (the address of the code.) It's that simple.
Another flaw in Pascal that contributes to the problem is Pascal's mechanism used to assign a result to a function. Specifically, in standard pascal the return value is specified using <function_identifier> := <some_value>, _that_ causes a problem because the function_identifier should NOT be an lvalue (because by definition, the identifier should be the address of the code, which cannot change.)
C is a syntactic atrocity yet, they got it right. That's why in C there is a "return" statement, instead of this bad idea of assigning to a function identifier. It's one of those ideas that looked good at the time that turned out to be a really bad one (which the pseudo-variable "result" mitigates to some extent.)