From 28f4c5ca2dc5bbcb8403db6699fa2f1bfcbe4220 Mon Sep 17 00:00:00 2001 From: peter klausler Date: Wed, 10 Jul 2019 16:41:18 -0700 Subject: [PATCH] [flang] Update grammar and a test in light of C1516 Original-commit: flang-compiler/f18@df4ddccde7e3f8caf9dc3784396b1ee419df5099 Reviewed-on: https://github.com/flang-compiler/f18/pull/557 --- flang/lib/parser/grammar.h | 9 ++++++--- flang/test/semantics/procinterface01.f90 | 13 ++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/flang/lib/parser/grammar.h b/flang/lib/parser/grammar.h index 3a6bedf..803a7c5 100644 --- a/flang/lib/parser/grammar.h +++ b/flang/lib/parser/grammar.h @@ -3247,9 +3247,12 @@ TYPE_PARSER("PROCEDURE" >> // R1513 proc-interface -> interface-name | declaration-type-spec // R1516 interface-name -> name -// N.B. Simple names of intrinsic types (e.g., "REAL") are ambiguous here. -TYPE_PARSER(construct(name / lookAhead(")"_tok)) || - construct(declarationTypeSpec)) +// N.B. Simple names of intrinsic types (e.g., "REAL") are not +// ambiguous here - they take precedence over derived type names +// thanks to C1516. +TYPE_PARSER( + construct(declarationTypeSpec / lookAhead(")"_tok)) || + construct(name)) // R1514 proc-attr-spec -> // access-spec | proc-language-binding-spec | INTENT ( intent-spec ) | diff --git a/flang/test/semantics/procinterface01.f90 b/flang/test/semantics/procinterface01.f90 index 988f61e..de24b65 100644 --- a/flang/test/semantics/procinterface01.f90 +++ b/flang/test/semantics/procinterface01.f90 @@ -57,9 +57,8 @@ module module1 !DEF: /module1/derived1/p2 NOPASS, POINTER ProcEntity REAL(4) !REF: /module1/nested1 procedure(explicit1), pointer, nopass :: p2 => nested1 - !REF: /module1/logical - !DEF: /module1/derived1/p3 NOPASS, POINTER ProcEntity INTEGER(4) - !DEF: /module1/nested2 PUBLIC Subprogram INTEGER(4) + !DEF: /module1/derived1/p3 NOPASS, POINTER ProcEntity LOGICAL(4) + !DEF: /module1/nested2 PUBLIC Subprogram LOGICAL(4) procedure(logical), pointer, nopass :: p3 => nested2 !DEF: /module1/derived1/p4 NOPASS, POINTER ProcEntity LOGICAL(4) !DEF: /module1/nested3 PUBLIC Subprogram LOGICAL(4) @@ -95,12 +94,12 @@ contains !REF: /module1/nested2 !DEF: /module1/nested2/x INTENT(IN) ObjectEntity REAL(4) - integer function nested2(x) + logical function nested2(x) !REF: /module1/nested2/x real, intent(in) :: x - !DEF: /module1/nested2/nested2 ObjectEntity INTEGER(4) + !DEF: /module1/nested2/nested2 ObjectEntity LOGICAL(4) !REF: /module1/nested2/x - nested2 = x+2. + nested2 = x/=0 end function nested2 !REF: /module1/nested3 @@ -179,7 +178,7 @@ program main if (instance%p2(1.)/=2.) print *, "p2 failed" !REF: /main/instance !REF: /module1/derived1/p3 - if (instance%p3(1.)/=3) print *, "p3 failed" + if (.not.instance%p3(1.)) print *, "p3 failed" !REF: /main/instance !REF: /module1/derived1/p4 if (.not.instance%p4(1.)) print *, "p4 failed" -- 2.7.4