|
Компилятор
Fortran DVM |
Документация |
- дата последнего обновления 17.11.09 -
Оглавление
5 Компиляция программы в режиме отладки
Данное руководство содержит инструкции по использованию компилятора Fortran DVM(FDVM) и является частью общего руководства пользователя DVM‑системы.
В руководстве приняты следующие условные обозначения для описания синтаксических конструкций.
::= по определению
| альтернатива
[x] необязательный элемент
y-list список элементов y [ , y ] ...
Язык Fortran DVM (FDVM) является расширением языка Фортран 95 для параллельного программирования в модели DVM. Расширение оформлено в виде специальных комментариев (директив), которые аннотируют последовательную программу на языке Фортран 95.
Компилятор транслирует исходную программу на языке FDVM в следующие выходные программы.
Параллельная программа на языке Фортран 95 с вызовами функций системы поддержки параллельного выполнения (Lib-DVM). Эта программа может выполняться в псевдопараллельном режиме на одном процессоре (рабочей станции) и в параллельном режиме на многопроцессорной ЭВМ.
Последовательная программа на языке Фортран 95 с вызовами функций сбора информации для отладки и оценки производительности. Программа выполняется на одном процессоре в последовательном режиме.
Вызов компилятора осуществляется следующей командной строкой:
dvm fdv [ <опции> ] <имя-файла>
где:
|
<опции> |
- |
указания о режимах компиляции. Если какое-либо указание отсутствует, то для него действует значение по умолчанию. Если две опции противоречат друг другу, то преимущество получает последняя из указанных в командной строке опций; |
|
<имя-файла> |
- |
имя файла (без расширения), который содержит текст исходной программы на языке FDVM. Файл должен иметь расширение .fdv. Поиск входного файла производится только в текущей директории. |
Ниже перечислены опции компилятора, жирным шрифтом выделены ключевые символы, а курсивом – параметры опций.
|
-o file |
Поместить выходную программу в файл file; |
|
-s |
Генерировать последовательную выходную программу; |
|
-p |
Генерировать параллельную выходную программу; |
|
-v |
Выдать сообщения о вызовах фаз компилятора, а также номер версии компилятора; |
|
-w |
Выдать все предупреждающие сообщения; |
|
-Idir |
Добавить директорию dir в список директорий, где осуществляется поиск include файлов. |
|
-ffo |
Использовать свободную форму записи для выходной фортран-программы. |
|
-f90 |
Используется свободная форма записи фортран-программы во входном файле. |
|
-r8 |
При генерации выходного кода, считать размер вещественного по умолчанию равным 8 байтам. |
|
-i8 |
При генерации выходного кода, считать размер целого по умолчанию равным 8 байтам. |
|
-bindk |
Задает соответствие типов данных в компиляторах с языков Фортран и Си; |
|
-ubufn |
Увеличить размер буфера для генератора выходного кода до n Мбайт. Рекомендуется использовать для больших по объему программ. |
|
-uf |
Устанавливается режим, при котором генератор выходного кода вызывается поочередно для каждой программной единицы. Рекомендуется использовать для больших по объему программ. |
|
-bufiosize |
Установить размер буфера, используемого при выводе распределенного массива, равным size; |
|
-dleveld[:fr-list] |
Генерировать дополнительный код для отладки программы; |
|
-elevele[:fr-list] |
Генерировать дополнительный код для анализа производительности программы. |
|
-dbifl |
Задает уровень оптимизации кода для отладки программы; l равно 1 или 2; отладка производится только в «крайних» витках циклов. |
Выходной файл. Имя выходного файла, в котором компилятор размещает сгенерированную программу, указывается с помощью опции
-o file
где file представляет собой имя файла. Если опция не указана, то по умолчанию, выходной файл получает имя <имя-файла>.f. Выходной файл записывается в текущую директорию.
Тип генерируемой программы. Тип генерируемой программы задается следующими опциями:
| -s | - | последовательная программа |
|
–p |
- |
параллельная программа |
По умолчанию генерируется параллельная программа.
Форма записи фортран-программы. Если во входном файле используется свободная форма записи фортран-программы, требуется задание опции -f90. Для задания свободной формы записи выходной фортран-программы следует указать опцию –ffo, по умолчанию генерируется фортран-программа в фиксированной форме записи.
Директории для include-файлов. Если в исходной программе имеются операторы INCLUDE и не все include-файлы размещены в текущей директории, то необходимо указать опцию
-Idir
где dir - это имя директории. Поиск include-файла начинается с директорий, указанных в командной строке в том порядке, как они там перечислены. Затем поиск производится в текущей директории.
Дополнительная информация. Для идентификации версии компилятора и выполнения фаз компиляции необходимо указать опцию
-v
а для получения всех предупреждающих сообщений задать опцию
-w
Соответствие типов данных. Соответствие типов данных в компиляторах с языков Си и Фортран для ЭВМ, на которой будет выполняться сгенерированная программа, указывается с помощью опции
-bindk
где k - это целое число, которое указывает номер таблицы соответствия.
|
|
k = 0: |
|
|||
|
|
Фортран |
Си |
Размер (в байтах) |
||
|
|
integer |
long |
4 |
||
|
|
real |
float |
4 |
||
|
|
double precision |
double |
8 |
||
|
|
character |
char |
1 |
||
|
|
logical |
long |
4 |
||
|
|
k = 1: |
|
|||
|
|
Фортран |
Си |
Размер (в байтах) |
||
|
|
integer |
int |
4 |
||
|
|
real |
float |
4 |
||
|
|
double precision |
double |
8 |
||
|
|
character |
char |
1 |
||
|
|
logical |
int |
4 |
||
|
|
integer*8 |
long |
8 |
||
Соответствие типов определяется стандартными компиляторами с языков Си и Фортран для объектной ЭВМ. По умолчанию, считается k = 0.
Для программ на языке FDVM предусмотрены два способа отладки:
функциональная отладка, целью которой является достижение правильности функционального выполнения программы;
отладка эффективности, целью которой является достижение требуемого уровня эффективности параллельного выполнения программы.
Для каждого способа определено несколько уровней отладки.
Уровни функциональной отладки. Уровень функциональной отладки – это целое число от 0 до 4, оно определяет события в программе, о которых сообщается отладчику:
0 - нет событий,
1 - модификация распределенных массивов,
2 - модификация и использование распределенных массивов,
3 - модификация всех переменных,
4 - модификация и использование всех переменных.
Уровни отладки эффективности. Уровень отладки эффективности - это целое число от 0 до 4, которое определяет, какие участки программы рассматриваются в качестве интервалов выполнения программы. Для каждого такого интервала можно получить характеристики эффективности.
| 0 |
- |
нет интервалов, |
| 1 |
- |
параллельные циклы и охватывающие их последовательные циклы, |
| 2 |
- |
последовательности операторов, указанные в программе посредством директив INTERVAL и END INTERVAL, |
| 3 |
- |
объединение подмножеств 1 и 2, |
| 4 |
- |
все циклы и интервалы, заданные с помощью директив INTERVAL и END INTERVAL. |
Последовательность операторов можно объявить интервалом с помощью директив:
CDVM$ INTERVAL [<целочисленное-выражение>]
<последовательность-операторов>
CDVM$ END INTERVAL
Каждый интервал операторов должен удовлетворять условиям блока операторов:
выполнение интервала всегда начинается с первого оператора,
выполнение интервала всегда заканчивается последним оператором.
Другими словами запрещены передачи управления извне внутрь интервала, и изнутри интервала - на оператор вне интервала.
Фрагменты программы. Программу можно разделить на отдельные отлаживаемые фрагменты. Каждый фрагмент определяется директивами
CDVM$ DEBUG <номер-фрагмента> [( <параметр> )]
<фрагмент-операторов>
CDVM$ END DEBUG <номер-фрагмента>
|
<номер-фрагмента> |
::= |
<целое-положительное-число> |
|
<параметр> |
::= |
D = levele |
|
|
| |
E = leveld |
|
|
| |
D = leveld , E = levele |
где:
параметр D указывает максимально возможный уровень функциональной отладки,
параметр E указывает максимально возможный уровень отладки эффективности,
leveld – целое число от 0 до 4,
levele – целое число от 0 до 4.
Фрагмент операторов должен удовлетворять условиям блока операторов.
Допускается вложенность фрагментов. Пусть f1 обозначает множество операторов охватывающего фрагмента, l1 – заданный в директиве DEBUG уровень отладки для данного фрагмента, а f2 и l2 - множество операторов и уровень отладки вложенного фрагмента. Тогда для множества операторов f1 – f2 максимально допустимым является уровень l1, а для множества f2 максимально допустимым является уровень l2.
Вся программа считается по умолчанию фрагментом с номером 0 и максимально допустимыми уровнями отладки D = 4 , E = 4.
Пусть задана следующая структура фрагментов программной единицы:
SUBROUTINE SUB(…)
S1
CDVM$ DEBUG 1 (D = 4 , E = 1)
S2
CDVM$ DEBUG 2 (D = 1 , E = 3)
S3
CDVM$ END DEBUG 2
S4
CDVM$ END DEBUG 1
S5
END
Эта структура определяет следующие максимально допустимые уровни отладки:
|
|
Множество операторов |
Уровень отладки |
|
|
{ S1, S5 } |
D = 4 , E = 4 |
|
|
{ S2, S4 } |
D = 3 , E = 1 |
|
|
{ S3 } |
D = 1 , E = 3 |
Уровни отладки в опциях компилятора.
Уровень отладки для всей программы определяется опциями
-dleveld - для функциональной отладки,
-elevele - для отладки эффективности.
По умолчанию действуют опции –d0 и –e0.
Уровень отладки для отдельных фрагментов определяется опциями:
-dleveld [:fr-list]
-elevele [:fr-list]
где
fr ::= Lfr [ - Hfr ]
Lfr ::= <номер-фрагмента>
Hfr ::= <номер-фрагмента>
Требуется, чтобы Lfr£Hfr.
fr-list – это список, где каждый элемент списка представляет собой либо номер отдельного фрагмента, либо непрерывный диапазон номеров фрагментов. Пусть в директиве DEBUG определен для некоторого фрагмента уровень отладки равный m. Если для этого фрагмента в опциях компилятора задан уровень l, то фрагмент будет включен в отладку с уровнем min( m , l ).
Пусть при компиляции программы указаны следующие опции отладки
-d2:1-2 -e2
Для подпрограммы SUB будут установлены следующие уровни отладки:
|
|
Множество операторов |
Уровень функциональной отладки |
Уровень отладки эффективности |
|
|
{ S1, S5 } |
0 |
2 |
|
|
{ S2, S4 } |
2 |
1 |
|
|
{ S3 } |
1 |
2 |
Подробнее об отладке программы см. «Отладка DVM–программ. Руководство по использованию» и «Отладка эффективности DVM-программ. Руководство по использованию».
Трассировка выполнения функций Lib-DVM. «Включить» и «отключить» сбор трассы обращений к Lib-DVM можно с помощью директив отладки
CDVM$ TRACE ON
CDVM$ TRACE OFF
Оптимизация отладки. Опция -dbifl задает уровень оптимизации кода для отладки программы; l равно 1 или 2. Отладка будет производиться только в «крайних» витках циклов, кроме того, при l=2 с целью ускорения отладки генерируются два тела для параллельных циклов. Рекомендуется использовать опцию при отладке больших программ.
Если компилятор обнаруживает в исходной программе ошибку, то он выдает сообщение следующего вида
<тип-сообщения> <номер-сообщения> on line <номер-строки> of <имя-файла> : <текст‑сообщения>
где:
|
<тип-сообщения> |
- Warning |
предупреждающее сообщение, не препятствующее генерации выходной программы. |
|
|
- Error |
ошибка, при которой невозможна генерация программы. |
|
<номер-строки> |
- целое число, которое указывает номер строки в файле <имя-файла>, при анализе которой обнаружена ошибка. |
|
|
<текст-сообщения> |
-текст сообщения на английском языке. |
|
Ниже приведены номера ошибок, тексты сообщений и пояснения к ним.
|
000 |
Compiler
bug |
|
001 |
Unknown option
option
is ignored |
|
002 |
Invalid option
argument arg
is
ignored |
|
003 |
No source file specified |
|
004 |
Illegal
command line format |
|
005 |
Can't
open file filename |
|
006 |
Can't
open file filename
for write |
|
007 |
Null
program |
|
008 |
Missing final end statement or
unclosed construct |
|
009 |
Illegal
continuation card ignored |
|
010 |
Unclassifiable statement |
|
011 |
Non digit
in statement number field |
|
012 |
Unbalanced quotes;
closing quote supplied |
|
013 |
Unbalanced parentheses, statement skipped |
|
014 |
Syntax
error |
|
015 |
Comment too long.
Truncated to 160 characters |
|
016 |
Inconsistent declaration of identifier identifier |
|
017 |
Inconsistent constant declaration identifier |
|
018 |
Inconsistent array
declaration of identifier identifier |
|
019 |
Inconsistent function identifier |
|
020 |
Inconsistent procedure identifier |
|
021 |
Inconsistent subroutine identifier |
|
022 |
Inconsistent program
declaration identifier |
|
023 |
Inconsistent common
declaration identifier |
|
024 |
Function has the
same name as a common block identifier |
|
025 |
Common block has the
same name as a function identifier |
|
026 |
Inconsistent operands to boolean operation |
|
027 |
Inconsistent operands to arithmetic operation |
|
028 |
Non-logical
expression in IF statement |
|
029 |
Statement order
error: declaration after DATA or function statement |
|
030 |
Declaration among executables |
|
031 |
ELSEIF
out of place |
|
032 |
ELSE out
of place |
|
033 |
Misplaced
PROGRAM statement |
|
034 |
Misplaced
SUBROUTINE statement |
|
035 |
Misplaced
ENTRY statement |
|
036 |
Statement cannot be
reached |
|
037 |
IMPLICIT
item must be single letter |
|
038 |
Label out of range |
|
039 |
Label
already that of a format |
|
040 |
Label
label already
defined |
|
041 |
Non
character entity identifier
has length specification |
|
042 |
No
dimensions in DIMENSION statement |
|
043 |
Too many
dimensions |
|
044 |
can't
subscript identifier |
|
045 |
can't
take substring of identifier |
|
046 |
No
backward DO loops |
|
047 |
Symbolic
constant not allowed as DO variable |
|
048 |
Must go
to assigned variable |
|
049 |
Missing
DVM directive prefix |
|
050 |
Explicit shape
specification is required |
|
051 |
Distribution format list is omitted Нет списка форматов распределения в директиве DISTRIBUTE. |
|
052 |
Unexpected END statement read Нарушена структура фортран-программы. |
|
053 |
Illegal use of
PROCESSORS name identifier |
|
054 |
A distributee may
not have the ALIGN attribute: identifier |
|
055 |
Distribution format
BLOCK(n) is not permitted in FDVM |
|
056 |
Illegal
shadow width specification |
|
057 |
An alignee may not
have the DISTRIBUTE attribute: identifier |
|
058 |
The
alignee identifier
isn't an array |
|
059 |
'identifier'
hasn't the DYNAMIC
attribute |
|
060 |
'identifier'
hasn't the ALIGN
attribute |
|
061 |
The
align-target identifier
isn't declared as array |
|
062 |
The align-dummy
identifier isn't a scalar
integer variable |
|
063 |
Illegal combination
of attributes |
|
064 |
'identifier'
has the DISTRIBUTE
and ALIGN attribute |
|
065 |
No shape
specification |
|
066 |
'identifier'
isn't array |
|
067 |
'identifier'
is not processor array |
|
068 |
'identifier'
is not remote group
name |
|
069 |
'identifier'
is not declared as
reduction group |
|
070 |
Illegal reduction
operation name |
|
071 |
Illegal use of task
array name identifier |
|
072 |
'identifier'
isn't
distributed array |
|
073 |
Multiple declaration
of identifier 'identifier'
|
|
074 |
'identifier'
isn't
declared as group |
|
075 |
No
dimensions in TASK directive |
|
076 |
Illegal
rank of 'identifier' |
|
077 |
'identifier'
is not task array |
|
078 |
Illegal interval number |
|
079 |
Template
'identifier'
is in COMMON |
|
080 |
Template may not be
a dummy argument: identifier |
|
081 |
ENTRY among
specification statements |
|
082 |
Duplicate
aligning of the array 'identifier' |
|
083 |
POINTER
'identifier'
is not integer
variable |
|
084 |
POINTER may not have
SAVE attribute: identifier |
|
085 |
POINTER
'identifier'
is not distributed
object |
|
086 |
Object
'identifier'
has neither TEMPLATE
nor PROCESSORS attribute |
|
087 |
Illegal shape
specification in DIMENSION attribute |
|
088 |
Length of
shadow-edge-list is not equal to the rank of array
'identifier' |
|
089 |
attribute
attribute
appears more than once in the combined-directive |
|
090 |
The number of BLOCK/GENBLOCK
elements of dist-format-list is greater than the rank of PROCESSORS
'identifier' |
|
091 |
Missing HEAP
declaration |
|
092 |
Alignment tree root
'identifier'
is not distributed |
|
093 |
PAUSE statement is
not permitted in FDVM |
|
094 |
Illegal statement in
the range of parallel loop |
|
095 |
Only a value of
ALLOCATE function or other POINTER may be assigned to a POINTER |
|
096 |
Nested PARALLEL
directives are not permitted |
|
097 |
PARALLEL directive
must be followed by DO statement |
|
098 |
The directive is
inside the range of PARALLEL loop |
|
099 |
Misplaced
REMOTE_ACCESS directive |
|
100 |
Nested TASK_REGION
are not permitted |
|
101 |
Statement is outside
of on-block |
|
102 |
No matching
TASK_REGION |
|
103 |
Misplaced directive |
|
104 |
Nested ON-blocks are
not permitted |
|
105 |
ON directive is
outside of the task region |
|
106 |
No matching ON
directive |
|
107 |
Parallel-task-loop
directive is outside of the task region |
|
108 |
Missing END
TASK_REGION directive |
|
109 |
Missing END ON
directive |
|
110 |
Rank of array
identifier
is not equal to the
length of the dist‑format-list |
|
111 |
Saved object may not
have the DYNAMIC attribute: identifier |
|
112 |
Object in COMMON
may not have the DYNAMIC attribute:
identifier |
|
113 |
'identifier'
hasn't the DYNAMIC
attribute |
|
114 |
'identifier'
does not appear in
DISTRIBUTE/INHERIT directive |
|
116 |
Template
'identifier'
appears as an
alignee |
|
117 |
Dummy argument
'identifier'
is aligned with
local array |
|
118 |
Aligned array
'identifier'
is in COMMON but
align-target is not |
|
119 |
Aligned array
'identifier'
has SAVE attribute
but align-target has not |
|
120 |
'identifier'
does not appear in
ALIGN and INHERIT directive |
|
121 |
'identifier'
is a duplicate dummy
argument |
|
122 |
Descriptor array
error |
|
123 |
Rank of pointer
identifier
is not equal to the
length of the dist‑format-list |
|
124 |
Array
'identifier' may not be
allocated |
|
125 |
Array
'identifier' may not be
aligned |
|
126 |
Illegal
aligning of 'identifier' |
|
127 |
Distributed object
'identifier'
is not array |
|
128 |
Rank of aligned
array identifier
isn't equal to the
length of align-source-list |
|
129 |
GEN_BLOCK and
WGT_BLOCK in format-list |
|
130 |
Wrong
align-subscript expression |
|
132 |
Rank of align-target
'identifier'
isn't
equal to the length of align-subscript-list |
|
133 |
More one occurenсe
of do-variable
'identifier'
in iteration-align-subscript-list |
|
134 |
More one occurence
of align-dummy
'identifier'
in align subscript
list |
|
135 |
More one
occurence of a do-variable in do-variable-use expression |
|
136 |
More one
occurence of an align-dummy in align-subscript expression |
|
137 |
Illegal
group name use: 'identifier' |
|
138 |
Illegal
POINTER reference: 'identifier' |
|
139 |
Owner-computes rule |
|
140 |
Wrong
number of subscripts specified for identifier |
|
141 |
Illegal
type of 'identifier' |
|
142 |
Low shadow width of
'identifier'
is greater than the corresponding one specified in SHADOW directive |
|
143 |
High shadow width of
'identifier'
is greater than the corresponding one specified in SHADOW directive |
|
144 |
Low shadow width of
'identifier'
is greater than
1 |
|
145 |
High shadow width of
'identifier'
is greater than 1 |
|
146 |
NEW_VALUE directive
must be followed by REDISTRIBUTE or REALIGN directive |
|
147 |
Illegal operand list
of MAXLOC/MINLOC |
|
148 |
'identifier'
is distributed array |
|
149 |
Wrong
operand of MAXLOC/MINLOC:
identifier |
|
150 |
Ilegal clause |
|
151 |
Wrong
reduction variable 'identifier' |
|
152 |
Wrong type of
reduction variable 'identifier' |
|
153 |
Double NEW clause |
|
154 |
Double REDUCTION
clause |
|
155 |
Double SHADOW_RENEW
clause |
|
156 |
Double REMOTE_ACCESS
clause |
|
157 |
Double ACROSS clause |
|
158 |
Length of
do-variable list in PARALLEL directive is greater than the number of
nested DO statements |
|
159 |
Illegal
do-variable-list in PARALLEL directive |
|
160 |
Wrong
iteration-align-subscript in PARALLEL |
|
161 |
Rank of array
'identifier'
isn't
equal to the length of iteration-align-subscript-list |
|
162 |
Assumed-size array:
identifier |
|
163 |
Reverse is not supported |
|
164 |
Wrong
regular subscript expression |
|
165 |
Length of
remote-subscript-list is not equal to the rank of remote variable |
|
166 |
HEAP
limit is exceeded |
|
167 |
Illegal
template reference: 'identifier' |
|
168 |
Illegal
variable in new-clause: identifier |
|
169 |
ENTRY of program
unit distributed arrays are in |
|
170 |
Name
'identifier'
too long, truncated to 29 |
|
171 |
No subscripts:
identifier |
|
172 |
POINTER
'identifier' in
left part of assign statement has DISTRIBUTE or ALIGN attribute |
|
173 |
Pointers are of different rank |
|
174 |
Pointers are of different type |
|
175 |
Wrong number of subscripts
specified for 'identifier' |
|
176 |
'identifier'
hasn't PROCESSORS/TASK attribute |
|
177 |
Associated actual
arguments must be aligned |
|
178 |
Illegal type of
do-variable 'identifier' |
|
179 |
Wrong
dependence length of distributed array 'identifier' |
|
180 |
Wrong
dependence length list of distributed array 'identifier' |
|
181 |
Illegal fragment number |
|
182 |
Unmatched directive |
|
183 |
Buffer
limit is exceeded |
|
184 |
Illegal I/O
statement in the range of parallel loop |
|
185 |
Illegal
elements in control list |
|
186 |
END= and ERR=
specifiers are illegal in FDVM |
|
187 |
IOSTAT= specifier is
illegal in I/O of distributed array |
|
189 |
Invalid
format specification |
|
190 |
Illegal I/O list |
|
191 |
I/O of distributed
array controlled by format specification or NAMELIST is not supported in
FDVM |
|
192 |
Illegal I/O
list item: identifier |
|
193 |
Array
shape declaration error:
identifier |
|
194 |
Can't calculate
array length:
identifier |
|
195 |
Can’t
find the corresponding MAP directive |
|
196 |
Incorrect call of
ALLOCATE function |
|
197 |
Can’t
use pointers in HPF1 |
|
222 |
Can’t
find a descriptor for POINTER |
|
250 |
Illegal nesting
INDEPENDENT directive |
|
251 |
More one occurrеnce
of do-variable
'identifier'
in subscript
list |
|
252 |
More one occurrеnce
of a do-variable
in subscript expression |
|
254 |
No target for
independent loop |
|
255 |
Reduction statement
inside the range of INDEPENDENT loop, 'identifier'
is reduction variable |
|
262 |
Wrong argument list
of ALLOCATE function call |
|
263 |
Shape specification
is not permitted |
|
264 |
Illegal array in
SHADOW_COMPUTE
clause:
identifier |
|
288 |
Non-logical
expression in FORALL statement |
|
292 |
Rank of array 'identifier'
is not equal the length of Число индексов массива в операторе ALLOCATE не равно рангу массива по описанию. |
|
293 |
No allocaton
specifications for
identifier |
|
294 |
Can't
calulate structure size:
identifier |
|
295 |
Assumed-shape or
deffered-shape array: identifier |
|
296 |
Double CONSISTENT
clause |
|
297 |
Both arrays are not
distributed |
|
298 |
Double STAGE clause |
|
299 |
PARALLEL loop is not
one-dimensional
loop |
|
300 |
Invalid source file
identifier |
|
301 |
Double
INDIRECT_ACCESS clause |
|
302 |
Length of
indirect-subscript-list is not equal to the rank of
|
|
303 |
Illegal debug
parameter |
|
304 |
Internal procedures
cannot contain procedures |
|
308 |
Unknown module
identifier |
|
309 |
Unknown identifier
identifier |
|
311 |
Can't
take component of identifier |
|
312 |
Illegal distributee:
identifier |
|
318 |
Inconsistent struct
declaration of identifier %s |
|
319 |
Undefined type
identifier |
|
330 |
No blank after label
|
|
331 |
Inconsistent module
declaration identifier |
|
334 |
Output file has the
same name as source file |
|
335 |
Illegal distributed
array reference:
identifier |
|
336 |
DISTRIBUTE or ALIGN attribute of component name dictates POINTER attribute Если компонент производного типа не является указателем на массив, он не может иметь ни атрибут DISTRIBUTE, ни атрибут ALIGN. |
|
337 |
Only a distribute-directive of kind DISTRIBUTE:: is permitted in a derived type definition Для описания компонентов производного типа можно использовать только директиву DISTRIBUTE вида: DISTRIBUTE:: список-идентификаторов |
|
338 |
Only a ALIGN-directive of kind ALIGN:: is permitted in a derived type definition Для описания компонентов производного типа можно использовать только директиву ALIGN вида: ALIGN:: список-идентификаторов |