Summary: Many of these were already implemented, and I just annotated the tests and/or the code. C752 was a simple check to verify that CONTIGUOUS components are arrays with C754 proved to be virtually identical to C750 that I implemented previously. This caused me to remove the distinction between specification expressions for type parameters and bounds expressions that I'd previously created. the POINTER attribute. I also changed the error messages to specify that errors in specification expressions could arise from either bad derived type components or type parameters. In cases where we detect a type param that was not declared, I created a symbol marked as erroneous. That avoids subsequent semantic process for expressions containing the symbol. This change caused me to adjust tests resolve33.f90 and resolve34.f90. Also, I avoided putting out error messages for erroneous type param symbols in `OkToAddComponent()` in resolve-names.cpp and in `EvaluateParameters()`, type.cpp. C756 checks that procedure components have the POINTER attribute. Reviewers: tskeith, klausler, DavidTruby Subscribers: llvm-commits Tags: #llvm, #flang Differential Revision: https://reviews.llvm.org/D79798
19 lines
909 B
Fortran
19 lines
909 B
Fortran
! RUN: %S/test_errors.sh %s %t %f18
|
|
! C751 A component shall not have both the ALLOCATABLE and POINTER attributes.
|
|
! C752 If the CONTIGUOUS attribute is specified, the component shall be an
|
|
! array with the POINTER attribute.
|
|
! C753 The * char-length option is permitted only if the component is of type
|
|
! character.
|
|
subroutine s()
|
|
type derivedType
|
|
!ERROR: 'pointerallocatablefield' may not have both the POINTER and ALLOCATABLE attributes
|
|
real, pointer, allocatable :: pointerAllocatableField
|
|
real, dimension(:), contiguous, pointer :: goodContigField
|
|
!ERROR: A CONTIGUOUS component must be an array with the POINTER attribute
|
|
real, dimension(:), contiguous, allocatable :: badContigField
|
|
character :: charField * 3
|
|
!ERROR: A length specifier cannot be used to declare the non-character entity 'realfield'
|
|
real :: realField * 3
|
|
end type derivedType
|
|
end subroutine s
|