[flang] Prevent result symbol to be converted into function when they are called.
+ Fix issue 589. + Catch empty subscript list in array reference In name resolution, when skimming through the execution statement of a function, calls to the result symbol should not trigger the conversion of this symbol to a function symbol. The result is a data object and cannot be called unless it was explictly declared to be a procedure pointer. Notably, recursive function calls cannot be made if RESULT was not used. The symbol is prevented from being transformed into a function symbol by transforming it into an object before skimming through the executable statement. This is done after processing all the specifications so that if the result actually is a procedure pointer, the call to `ConvertToObjectEntity` introduced by this commit will not convert it to an object by mistake. This commit also introduce a check when fixing misparsed function reference into array reference to verify the array reference has array subscripts. Currently this went uncaught. It is not possible to complain later in expressions because the subscript list of expression might be empty for unrelated error recovery reasons (e.g. if an entity of the wrong type appeared as susbcript). Add related tests. Original-commit: flang-compiler/f18@2fd8b65f58aadc567dd23d64e4654304a42f6176 Reviewed-on: https://github.com/flang-compiler/f18/pull/631 Tree-same-pre-rewrite: false
Loading
Please sign in to comment