[flang] Catch function result that is non-pointer procedure (#164664)
A function result that is a procedure must be a procedure pointer.
This commit is contained in:
parent
1df7f2baa9
commit
1e237b1785
2 changed files with 22 additions and 0 deletions
|
|
@ -472,6 +472,10 @@ void CheckHelper::Check(const Symbol &symbol) {
|
|||
messages_.Say(
|
||||
"A function result may not also be a named constant"_err_en_US);
|
||||
}
|
||||
if (!IsProcedurePointer(symbol) && IsProcedure(symbol)) {
|
||||
messages_.Say(
|
||||
"A function result may not be a procedure unless it is a procedure pointer"_err_en_US);
|
||||
}
|
||||
}
|
||||
if (IsAutomatic(symbol)) {
|
||||
if (const Symbol * common{FindCommonBlockContaining(symbol)}) {
|
||||
|
|
|
|||
18
flang/test/Semantics/func-proc-result.f90
Normal file
18
flang/test/Semantics/func-proc-result.f90
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
!RUN: %python %S/test_errors.py %s %flang_fc1
|
||||
|
||||
function good() result(pptr)
|
||||
procedure(), pointer :: pptr
|
||||
external whatever
|
||||
pptr => whatever
|
||||
end
|
||||
|
||||
function bad1() result(res1)
|
||||
!ERROR: A function result may not be a procedure unless it is a procedure pointer
|
||||
procedure() res1
|
||||
end
|
||||
|
||||
!ERROR: Procedure 'res2' is referenced before being sufficiently defined in a context where it must be so
|
||||
function bad2() result(res2)
|
||||
!ERROR: EXTERNAL attribute not allowed on 'res2'
|
||||
external res2
|
||||
end
|
||||
Loading…
Reference in a new issue