[PATCH] D84290: [Flang] Fix for the scenario when type guard has intrinsic type specification and Selector is NOT unlimited Polymorphic.
Inderjeet via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 22 05:36:58 PDT 2020
inderjeet-hcl marked 4 inline comments as done.
inderjeet-hcl added a comment.
@sameeranjoshi, Kindly find reply inline and let me know if it seems fine.
================
Comment at: flang/lib/Semantics/check-select-type.cpp:84
+ !selectorType_.IsUnlimitedPolymorphic()) { // C1162
+ context_.Say(stmt.source,
+ "If selector is not Unlimited Polymorphic, "
----------------
sameeranjoshi wrote:
> I tried to minimize the use of passing `stmt` as a parameter by using `parser::FindSourceLocation(typeSpec)` it was strange that I couldn't see the source location information printed.
>
> Does `parser::FindSourceLocation` fail in some scenarios @PeteSteinfeld ?
> If that's the case using `stmt` is completely fine here.
Kindly refer following case when line number information is not output in error message.
In case of intrinsic types 'integer','character' etc. parser::FindSourceLocation(typespec) is returning empty:
[root at localhost Github_compiler]# f18 selecttype.f90
error: The type specification statement must have LEN type parameter as assumed
f18: semantic errors in selecttype.f90
[root at localhost Github_compiler]# cat -n selecttype.f90
1 class(*),allocatable :: cptr
2
3 select type(cptr)
4 !ERROR: The type specification statement must have LEN type parameter as assumed
5 type is(character) !<-- assumed length-type
6 end select
7 end
================
Comment at: flang/lib/Semantics/check-select-type.cpp:85
+ context_.Say(stmt.source,
+ "If selector is not Unlimited Polymorphic, "
+ "intrinsic type specification must not be specified "
----------------
sameeranjoshi wrote:
> Why are `u` and `p` capitalized?
> Read more on error message to user guideline:
> https://github.com/llvm/llvm-project/blob/master/flang/documentation/C%2B%2Bstyle.md#error-messages
Thanks for sharing document reference. I will update it as follows:
context_.Say(stmt.source,
"If selector is not unlimited polymorphic, "
"intrinsic type specification must not be specified "
"in type guard statement"_err_en_US);
================
Comment at: flang/lib/Semantics/check-select-type.cpp:100
*derived, parser::FindSourceLocation(typeSpec));
}
return false;
----------------
sameeranjoshi wrote:
> How about adding an `else if ` statement here?
> ```
> if (){
> ...
> } else if (!selectorType_.IsUnlimitedPolymorphic() && spec->AsIntrinsic()) { // C1162
> ...
> }
> ```
I think either way is fine. I added 'if' condition at the beginning considering if type specification is of intrinsic type then that should be the first check to be performed.
================
Comment at: flang/test/Semantics/selecttype04.f90:1
+type base
+ integer :: ii
----------------
sameeranjoshi wrote:
> There's already a [[ https://github.com/llvm/llvm-project/blob/5bb742b10dafd595223172ae985687765934ebe9/flang/test/Semantics/selecttype01.f90#L153 | file ]] with a test for C1162, can you add these tests in it?
I agree, I will update test program selecttype01.f90 to add tests.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D84290/new/
https://reviews.llvm.org/D84290
More information about the llvm-commits
mailing list