OSDN Git Service

b5f7d7330bef93bf2f90419e908ba5701cdefd50
[pf3gnuchains/gcc-fork.git] / gcc / fortran / ChangeLog
1 2006-03-13  Paul Thomas  <pault@gcc.gnu.org>
2
3         PR fortran/25378
4         * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): Set the initial position to zero and
5         modify the condition for updating it, to implement the F2003 requirement for all(mask)
6         is false.
7
8 2006-03-13  Jakub Jelinek  <jakub@redhat.com>
9
10         * trans-openmp.c (gfc_trans_omp_variable): Handle references
11         to parent result.
12         * trans-expr.c (gfc_conv_variable): Remove useless setting
13         of parent_flag, formatting.
14
15         * trans-decl.c (gfc_get_fake_result_decl): Re-add setting of
16         GFC_DECL_RESULT flag.
17
18 2003-03-11  Roger Sayle  <roger@eyesopen.com>
19
20         * dependency.c (gfc_dep_compare_expr) <EXPR_OP>: Allow unary and
21         binary operators to compare equal if their operands are equal.
22         <EXPR_FUNCTION>: Allow "constant" intrinsic conversion functions
23         to compare equal, if their operands are equal.
24
25 2006-03-11  Erik Edelmann  <eedelman@gcc.gnu.org>
26
27         * symbol.c (check_conflict): Allow allocatable function results,
28         except for elemental functions.
29         * trans-array.c (gfc_trans_allocate_temp_array): Rename to ...
30         (gfc_trans_create_temp_array): ... this, and add new argument
31         callee_alloc.
32         (gfc_trans_array_constructor, gfc_conv_loop_setup): Update call
33         to gfc_trans_allocate_temp_array.
34         * trans-array.h (gfc_trans_allocate_temp_array): Update prototype.
35         * trans-expr.c (gfc_conv_function_call): Use new arg of
36         gfc_trans_create_temp_array avoid pre-allocation of temporary
37         result variables of pointer AND allocatable functions.
38         (gfc_trans_arrayfunc_assign): Return NULL for allocatable
39         functions.
40         * resolve.c (resolve_symbol): Copy value of 'allocatable' attribute
41         from sym->result to sym.
42
43 2006-03-09  Erik Edelmann  <eedelman@gcc.gnu.org>
44
45         * trans-expr.c (gfc_add_interface_mapping): Copy 'allocatable'
46         attribute from sym to new_sym.  Call build_fold_indirect_ref()
47         for allocatable arguments.
48
49 2006-03-09 Paul Thomas <pault@gcc.gnu.org>
50
51         PR fortran/26257
52         * trans-array.c (gfc_conv_expr_descriptor): Exclude calculation of
53         the offset and data when se->data_not_needed is set.
54         * trans.h: Include the data_not_need bit in gfc_se.
55         * trans-intrinsic.c (gfc_conv_intrinsic_size): Set it for SIZE.
56
57 2006-03-06  Paul Thomas  <pault@gcc.gnu.org>
58             Erik Edelmann  <eedelman@gcc.gnu.org>
59
60         * trans-array.c (gfc_trans_dealloc_allocated): New function.
61         (gfc_trans_deferred_array): Use it, instead of inline code.
62         * trans-array.h: Prototype for gfc_trans_dealloc_allocated().
63         * trans-expr.c (gfc_conv_function_call): Deallocate allocated
64         ALLOCATABLE, INTENT(OUT) arguments upon procedure entry.
65
66 2006-03-06  Paul Thomas  <pault@gcc.gnu.org>
67
68         PR fortran/26107
69         * resolve.c (resolve_function): Add name after test for pureness.
70
71         PR fortran/19546
72         * trans-expr.c (gfc_conv_variable): Detect reference to parent result,
73         store current_function_decl, replace with parent, whilst calls are
74         made to gfc_get_fake_result_decl, and restore afterwards. Signal this
75         to gfc_get_fake_result_decl with a new argument, parent_flag.
76         * trans-stmt.c (gfc_trans_return): gfc_get_fake_result_decl 2nd arg
77         is set to zero.
78         * trans.h: Add parent_flag to gfc_get_fake_result_decl prototype.
79         * trans-decl.c (gfc_get_fake_result_decl): On parent_flag, being set,
80         add decl to parent function. Replace refs to current_fake_result_decl
81         with refs to this_result_decl.
82         (gfc_generate_function_code): Null parent_fake_result_decl before the
83         translation of code for contained procedures. Set parent_flag to zero
84         in call to gfc_get_fake_result_decl.
85         * trans-intrinsic.c (gfc_conv_intrinsic_len): The same.
86
87 2006-03-05  Steven G. Kargl  <kargls@comcast.net>
88
89         * simplify.c (gfc_simplify_verify):  Fix return when SET=''.
90
91 2006-03-05  Erik Edelmann  <eedelman@gcc.gnu.org>
92
93         PR fortran/16136
94         * symbol.c (conf_std): New macro.
95         (check_conflict): Use it to allow ALLOCATABLE dummy
96         arguments for F2003.
97         * trans-expr.c (gfc_conv_function_call): Pass the
98         address of the array descriptor when dummy argument is
99         ALLOCATABLE.
100         * interface.c (compare_allocatable): New function.
101         (compare_actual_formal): Use it.
102         * resolve.c (resolve_deallocate_expr,
103         resolve_allocate_expr): Check that INTENT(IN) variables
104         aren't (de)allocated.
105         * gfortran.texi (Fortran 2003 status): List ALLOCATABLE
106         dummy arguments as supported.
107
108 2006-03-03  Roger Sayle  <roger@eyesopen.com>
109
110         * dependency.c (gfc_check_element_vs_element): Revert last change.
111
112 2006-03-03  Roger Sayle  <roger@eyesopen.com>
113
114         * dependency.c (gfc_check_element_vs_element): Consider two
115         unordered scalar subscripts as (potentially) equal.
116
117 2006-03-03  Roger Sayle  <roger@eyesopen.com>
118
119         * dependency.c (gfc_check_dependency): Call gfc_dep_resolver to
120         check whether two array references have a dependency.
121         (gfc_check_element_vs_element): Assume lref and rref must be
122         REF_ARRAYs.  If gfc_dep_compare_expr returns -2, assume these
123         references could potentially overlap.
124         (gfc_dep_resolver): Whitespace and comment tweaks.  Assume a
125         dependency if the references have different depths.  Rewrite
126         final term to clarrify we only have a dependency for overlaps.
127
128 2006-03-03  Thomas Koenig  <Thomas.Koenig@online.de>
129
130         PR fortran/25031
131         * trans-array.h:  Adjust gfc_array_allocate prototype.
132         * trans-array.c (gfc_array_allocate):  Change type of
133         gfc_array_allocatate to bool.  Function returns true if
134         it operates on an array.  Change second argument to gfc_expr.
135         Find last reference in chain.
136         If the function operates on an allocatable array, emit call to
137         allocate_array() or allocate64_array().
138         * trans-stmt.c (gfc_trans_allocate):  Code to follow to last
139         reference has been moved to gfc_array_allocate.
140         * trans.h:  Add declaration for gfor_fndecl_allocate_array and
141         gfor_fndecl_allocate64_array.
142         (gfc_build_builtin_function_decls):  Add gfor_fndecl_allocate_array
143         and gfor_fndecl_allocate64_array.
144
145 2006-03-01  Roger Sayle  <roger@eyesopen.com>
146
147         * trans-stmt.c (generate_loop_for_temp_to_lhs): Add an additional
148         INVERT argument to invert the sense of the WHEREMASK argument.
149         Remove unneeded code to AND together a list of masks.
150         (generate_loop_for_rhs_to_temp): Likewise.
151         (gfc_trans_assign_need_temp): Likewise.
152         (gfc_trans_forall_1): Likewise.
153         (gfc_evaluate_where_mask): Likewise, add a new INVERT argument
154         to specify the sense of the MASK argument.
155         (gfc_trans_where_assign): Likewise.
156         (gfc_trans_where_2): Likewise.  Restructure code that decides
157         whether we need to allocate zero, one or two temporary masks.
158         If this is a top-level WHERE (i.e. the incoming MASK is NULL),
159         we only need to allocate at most one temporary mask, and can
160         invert it's sense to provide the complementary pending execution
161         mask.  Only calculate the size of the required temporary arrays
162         if we need any.
163         (gfc_trans_where): Update call to gfc_trans_where_2.
164
165 2006-03-01  Paul Thomas  <pault@gcc.gnu.org>
166
167         * iresolve.c (gfc_resolve_dot_product):  Remove any difference in
168         treatment of logical types.
169         * trans-intrinsic.c (gfc_conv_intrinsic_dot_product):  New function. 
170
171         PR fortran/26393
172         * trans-decl.c (gfc_get_symbol_decl): Extend condition that symbols
173         must be referenced to include unreferenced symbols in an interface
174         body. 
175
176         PR fortran/20938
177         * trans-array.c (gfc_conv_resolve_dependencies): Add call to
178         gfc_are_equivalenced_arrays.
179         * symbol.c (gfc_free_equiv_infos, gfc_free_equiv_lists): New
180         functions. (gfc_free_namespace): Call them.
181         * trans-common.c (copy_equiv_list_to_ns): New function.
182         (add_equivalences): Call it.
183         * gfortran.h: Add equiv_lists to gfc_namespace and define
184         gfc_equiv_list and gfc_equiv_info.
185         * dependency.c (gfc_are_equivalenced_arrays): New function.
186         (gfc_check_dependency): Call it.
187         * dependency.h: Prototype for gfc_are_equivalenced_arrays.
188
189 2006-03-01  Roger Sayle  <roger@eyesopen.com>
190
191         * dependency.c (gfc_is_same_range): Compare the stride, lower and
192         upper bounds when testing array reference ranges for equality.
193         (gfc_check_dependency): Fix indentation whitespace.
194         (gfc_check_element_vs_element): Likewise.
195         (gfc_dep_resolver): Likewise.
196
197 2006-02-28  Thomas Koenig  <Thomas.Koenig@online.de>
198
199         * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc):
200         If the mask expression exists and has rank 0, enclose the
201         generated loop in an "if (mask)".  Put the default
202         initialization into the else branch.
203
204 2006-02-25  Thomas Koenig  <Thomas.Koenig@online.de>
205
206         PR fortran/23092
207         * trans-intrinsic.c (gfc_conv_intrinsic_arith):  If the
208         mask expression exists and has rank 0, enclose the generated
209         loop in an "if (mask)".
210         * (gfc_conv_intrinsic_minmaxloc):  Likewise.
211
212 2006-02-24  Paul Thomas  <pault@gcc.gnu.org>
213
214         PR fortran/26409
215         * resolve.c (resolve_contained_functions, resolve_types,
216         gfc_resolve): Revert patch of 2006-02-19.
217
218 2006-02-24  Paul Thomas  <pault@gcc.gnu.org>
219
220         PR fortran/24519
221         * dependency.c (gfc_is_same_range): Correct typo.
222         (gfc_check_section_vs_section): Call gfc_is_same_range.
223
224         PR fortran/25395
225         * trans-common.c (add_equivalences): Add a new flag that is set when
226         an equivalence is seen that prevents more from being reset until the
227         start of a new traversal of the list, thus ensuring completion of
228         all the equivalences.
229
230 2006-02-23  Erik Edelmann  <eedelman@gcc.gnu.org>
231
232         * module.c (read_module): Remove redundant code lines.
233
234 2006-02-20 Rafael \81Ávila de Esp\81índola <rafael.espindola@gmail.com>
235         * Make-lang.in (FORTRAN): Remove
236         (.PHONY): Remove F95 and f95. Add fortran
237
238 2006-02-20  Roger Sayle  <roger@eyesopen.com>
239
240         * trans-stmt.c (gfc_trans_where_2): Avoid updating unused current
241         execution mask for empty WHERE/ELSEWHERE clauses.  Don't allocate
242         temporary mask arrays if they won't be used.
243
244 2006-02-20  Roger Sayle  <roger@eyesopen.com>
245
246         * trans-stmt.c (gfc_trans_where_assign): Remove code to handle
247         traversing a linked list of MASKs.  The MASK is now always a
248         single element requiring no ANDing during the assignment.
249
250 2006-02-19  Thomas Koenig  <Thomas.Koenig@online.de>
251
252         * gfortran.texi:  Document environment variables which
253         influence runtime behavior.
254
255 2006-02-19  H.J. Lu  <hongjiu.lu@intel.com>
256
257         * resolve.c (resolve_contained_functions): Call resolve_entries
258         first.
259         (resolve_types): Remove calls to resolve_entries and
260         resolve_contained_functions.
261         (gfc_resolve): Call resolve_contained_functions.
262
263 2006-02-19  Erik Edelmann  <eedelman@gcc.gnu.org>
264
265         PR fortran/26201
266         * intrinsic.c (gfc_convert_type_warn): Call
267         gfc_intrinsic_symbol() on the newly created symbol.
268
269 2006-02-19  Paul Thomas  <pault@gcc.gnu.org>
270
271         PR fortran/25054
272         * resolve.c (is_non_constant_shape_array): New function.
273         (resolve_fl_variable): Remove code for the new function and call it.
274         (resolve_fl_namelist): New function.  Add test for namelist array
275         with non-constant shape, using is_non_constant_shape_array.
276         (resolve_symbol): Remove code for resolve_fl_namelist and call it.
277
278         PR fortran/25089
279         * match.c (match_namelist): Increment the refs field of an accepted
280         namelist object symbol.
281         * resolve.c (resolve_fl_namelist): Test namelist objects for a conflict
282         with contained or module procedures.
283
284 2006-02-18  Roger Sayle  <roger@eyesopen.com>
285
286         * trans-stmt.c (struct temporary_list): Delete.
287         (gfc_trans_where_2): Major reorganization.  Remove no longer needed
288         TEMP argument.  Allocate and deallocate the control mask and
289         pending control mask locally.
290         (gfc_trans_forall_1): Delete TEMP local variable, and update
291         call to gfc_trans_where_2.  No need to deallocate arrays after.
292         (gfc_evaluate_where_mask): Major reorganization.  Change return
293         type to void.  Pass in parent execution mask, MASK, and two
294         already allocated mask arrays CMASK and PMASK.  On return
295         CMASK := MASK & COND, PMASK := MASK & !COND.  MASK, CMASK and
296         CMASK may all be NULL, or refer to the same temporary arrays.
297         (gfc_trans_where): Update call to gfc_trans_where_2.  We no
298         longer need a TEMP variable or to deallocate temporary arrays
299         allocated by gfc_trans_where_2.
300
301 2006-02-18   Danny Smith  <dannysmith@users.sourceforeg.net>
302
303         * gfortran.h (gfc_add_attribute): Change uint to unsigned int.
304         * symbol.c (gfc_add_attribute): Likewise for definition.
305         * resolve.c (resolve_global_procedure): Likewise for variable 'type'.
306
307 2006-02-17  Richard Sandiford  <richard@codesourcery.com>
308
309         * trans-common.c: Include rtl.h earlier.
310         * trans-decl.c: Likewise.
311
312 2006-02-16  Jakub Jelinek  <jakub@redhat.com>
313
314         PR fortran/26224
315         * parse.c (parse_omp_do, parse_omp_structured_block): Call
316         gfc_commit_symbols and gfc_warning_check.
317
318         * openmp.c (resolve_omp_clauses): Add a dummy case label to workaround
319         PR middle-end/26316.
320
321 2006-02-16  Paul Thomas  <pault@gcc.gnu.org>
322
323         PR fortran/24557
324         * trans-expr.c (gfc_add_interface_mapping): Use the actual argument
325         for character(*) arrays, rather than casting to the type and kind
326         parameters of the formal argument.
327
328 2006-02-15  Toon Moene  <toon@moene.indiv.nluug.nl>
329
330         PR fortran/26054
331         * options.c: Do not warn for Fortran 2003 features by default.
332
333 2006-02-15  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
334
335         * check.c: Update copyright years.
336         
337         * check.c (gfc_check_minloc_maxloc, check_reduction): Don't call
338         dim_range_check on not-present optional dim argument.
339
340 2006-02-15  Jakub Jelinek  <jakub@redhat.com>
341
342         PR libgomp/25938
343         PR libgomp/25984
344         * Make-lang.in (install-finclude-dir): New goal.
345         (fortran.install-common): Depend on install-finclude-dir.
346         * lang-specs.h: If not -nostdinc, add -I finclude.
347
348 2006-02-14  Thomas Koenig  <Thomas.Koenig@online.de>
349
350         PR fortran/25045
351         * check.c (dim_check):  Perform all checks if dim is optional.
352         (gfc_check_minloc_maxloc):  Use dim_check and dim_rank_check
353         to check dim argument.
354         (check_reduction):  Likewise.
355
356 2006-02-14  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
357
358         PR fortran/26277
359         * io.c (match_ltag): Mark label as referenced.
360
361 2006-02-14  Jakub Jelinek  <jakub@redhat.com>
362             Richard Henderson  <rth@redhat.com>
363             Diego Novillo  <dnovillo@redhat.com>
364
365         * invoke.texi: Document -fopenmp.
366         * gfortran.texi (Extensions): Document OpenMP.
367
368         Backport from gomp-20050608-branch
369         * trans-openmp.c: Call build_omp_clause instead of
370         make_node when creating OMP_CLAUSE_* trees.
371         (gfc_trans_omp_reduction_list): Remove argument 'code'.
372         Adjust all callers.
373
374         * trans.h (build4_v): Define.
375         * trans-openmp.c: Call build4_v to create OMP_PARALLEL nodes.
376         Call build3_v to create OMP_SECTIONS nodes.
377
378         PR fortran/25162
379         * openmp.c (gfc_match_omp_variable_list): Call gfc_set_sym_referenced
380         on all symbols added to the variable list.
381
382         * openmp.c (gfc_match_omp_clauses): Fix check for non-INTRINSIC
383         procedure symbol in REDUCTION.
384
385         * trans-openmp.c (gfc_trans_omp_array_reduction): Use gfc_add
386         for MINUS_EXPR OMP_CLAUSE_REDUCTION_CODE.
387
388         * trans-openmp.c (gfc_trans_omp_do): Add PBLOCK argument.  If PBLOCK
389         is non-NULL, evaluate INIT/COND/INCR and chunk size expressions in
390         that statement block.
391         (gfc_trans_omp_parallel_do): Pass non-NULL PBLOCK to gfc_trans_omp_do
392         for non-ordered non-static combined loops.
393         (gfc_trans_omp_directive): Pass NULL PBLOCK to gfc_trans_omp_do.
394
395         * openmp.c: Include target.h and toplev.h.
396         (gfc_match_omp_threadprivate): Emit diagnostic if target does
397         not support TLS.
398         * Make-lang.in (fortran/openmp.o): Add dependencies on
399         target.h and toplev.h.
400
401         * trans-decl.c (gfc_get_fake_result_decl): Set GFC_DECL_RESULT.
402         * trans-openmp.c (gfc_omp_privatize_by_reference): Make
403         DECL_ARTIFICIAL vars predetermined shared except GFC_DECL_RESULT.
404         (gfc_omp_disregard_value_expr): Handle GFC_DECL_RESULT.
405         (gfc_trans_omp_variable): New function.
406         (gfc_trans_omp_variable_list, gfc_trans_omp_reduction_list): Use it.
407         * trans.h (GFC_DECL_RESULT): Define.
408
409         * trans-openmp.c (gfc_omp_firstprivatize_type_sizes): New function.
410         * f95-lang.c (LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES): Define.
411         * trans.h (gfc_omp_firstprivatize_type_sizes): New prototype.
412
413         * trans-openmp.c (gfc_omp_privatize_by_reference): Return
414         true if a pointer has GFC_DECL_SAVED_DESCRIPTOR set.
415         (gfc_trans_omp_array_reduction, gfc_trans_omp_reduction_list): New
416         functions.
417         (gfc_trans_omp_clauses): Add WHERE argument.  Call
418         gfc_trans_omp_reduction_list rather than gfc_trans_omp_variable_list
419         for reductions.
420         (gfc_trans_omp_do, gfc_trans_omp_parallel, gfc_trans_omp_parallel_do,
421         gfc_trans_omp_parallel_sections, gfc_trans_omp_parallel_workshare,
422         gfc_trans_omp_sections, gfc_trans_omp_single): Adjust
423         gfc_trans_omp_clauses callers.
424
425         * openmp.c (omp_current_do_code): New var.
426         (gfc_resolve_omp_do_blocks): New function.
427         (gfc_resolve_omp_parallel_blocks): Call it.
428         (gfc_resolve_do_iterator): Add CODE argument.  Don't propagate
429         predetermination if argument is !$omp do or !$omp parallel do
430         iteration variable.
431         * resolve.c (resolve_code): Call gfc_resolve_omp_do_blocks
432         for EXEC_OMP_DO.  Adjust gfc_resolve_do_iterator caller.
433         * fortran.h (gfc_resolve_omp_do_blocks): New prototype.
434         (gfc_resolve_do_iterator): Add CODE argument.
435
436         * trans.h (gfc_omp_predetermined_sharing,
437         gfc_omp_disregard_value_expr, gfc_omp_private_debug_clause): New
438         prototypes.
439         (GFC_DECL_COMMON_OR_EQUIV, GFC_DECL_CRAY_POINTEE): Define.
440         * trans-openmp.c (gfc_omp_predetermined_sharing,
441         gfc_omp_disregard_value_expr, gfc_omp_private_debug_clause): New
442         functions.
443         * trans-common.c (build_equiv_decl, build_common_decl,
444         create_common): Set GFC_DECL_COMMON_OR_EQUIV flag on the decls.
445         * trans-decl.c (gfc_finish_cray_pointee): Set GFC_DECL_CRAY_POINTEE
446         on the decl.
447         * f95-lang.c (LANG_HOOKS_OMP_PREDETERMINED_SHARING,
448         LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR,
449         LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE): Define.
450
451         * openmp.c (resolve_omp_clauses): Remove extraneous comma.
452
453         * symbol.c (check_conflict): Add conflict between cray_pointee and
454         threadprivate.
455         * openmp.c (gfc_match_omp_threadprivate): Fail if
456         gfc_add_threadprivate returned FAILURE.
457         (resolve_omp_clauses): Diagnose Cray pointees in SHARED,
458         {,FIRST,LAST}PRIVATE and REDUCTION clauses and Cray pointers in
459         {FIRST,LAST}PRIVATE and REDUCTION clauses.
460
461         * resolve.c (omp_workshare_flag): New variable.
462         (resolve_function): Diagnose use of non-ELEMENTAL user defined
463         function in WORKSHARE construct.
464         (resolve_code): Cleanup forall_save use.  Make sure omp_workshare_flag
465         is set to correct value in different contexts.
466
467         * openmp.c (resolve_omp_clauses): Replace %s with '%s' when printing
468         variable name.
469         (resolve_omp_atomic): Likewise.
470
471         PR fortran/24493
472         * scanner.c (skip_free_comments): Set at_bol at the beginning of the
473         loop, not before it.
474         (skip_fixed_comments): Handle ! comments in the middle of line here
475         as well.
476         (gfc_skip_comments): Use skip_fixed_comments for FIXED_FORM even if
477         not at BOL.
478         (gfc_next_char_literal): Fix expected canonicalized *$omp string.
479
480         * trans-openmp.c (gfc_trans_omp_do): Use make_node and explicit
481         initialization to build OMP_FOR instead of build.
482
483         * trans-decl.c (gfc_gimplify_function): Invoke
484         diagnose_omp_structured_block_errors.
485
486         * trans-openmp.c (gfc_trans_omp_master): Use OMP_MASTER.
487         (gfc_trans_omp_ordered): Use OMP_ORDERED.
488
489         * gfortran.h (gfc_resolve_do_iterator, gfc_resolve_blocks,
490         gfc_resolve_omp_parallel_blocks): New prototypes.
491         * resolve.c (resolve_blocks): Renamed to...
492         (gfc_resolve_blocks): ... this.  Remove static.
493         (gfc_resolve_forall): Adjust caller.
494         (resolve_code): Only call gfc_resolve_blocks if code->block != 0
495         and not for EXEC_OMP_PARALLEL* directives.  Call
496         gfc_resolve_omp_parallel_blocks for EXEC_OMP_PARALLEL* directives.
497         Call gfc_resolve_do_iterator if resolved successfully EXEC_DO
498         iterator.
499         * openmp.c: Include pointer-set.h.
500         (omp_current_ctx): New variable.
501         (gfc_resolve_omp_parallel_blocks, gfc_resolve_do_iterator): New
502         functions.
503         * Make-lang.in (fortran/openmp.o): Depend on pointer-set.h.
504
505         * openmp.c (gfc_match_omp_clauses): For max/min/iand/ior/ieor,
506         look up symbol if it exists, use its name instead and, if it is not
507         INTRINSIC, issue diagnostics.
508
509         * parse.c (parse_omp_do): Handle implied end do properly.
510         (parse_executable): If parse_omp_do returned ST_IMPLIED_ENDDO,
511         return it instead of continuing.
512
513         * trans-openmp.c (gfc_trans_omp_critical): Update for changed
514         operand numbering.
515         (gfc_trans_omp_do, gfc_trans_omp_parallel, gfc_trans_omp_parallel_do,
516         gfc_trans_omp_parallel_sections, gfc_trans_omp_parallel_workshare,
517         gfc_trans_omp_sections, gfc_trans_omp_single): Likewise.
518
519         * trans.h (gfc_omp_privatize_by_reference): New prototype.
520         * f95-lang.c (LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE): Redefine
521         to gfc_omp_privatize_by_reference.
522         * trans-openmp.c (gfc_omp_privatize_by_reference): New function.
523
524         * trans-stmt.h (gfc_trans_omp_directive): Add comment.
525
526         * openmp.c (gfc_match_omp_variable_list): Add ALLOW_COMMON argument.
527         Disallow COMMON matching if it is set.
528         (gfc_match_omp_clauses, gfc_match_omp_flush): Adjust all callers.
529         (resolve_omp_clauses): Show locus in error messages.  Check that
530         variable types in reduction clauses are appropriate for reduction
531         operators.
532
533         * resolve.c (resolve_symbol): Don't error if a threadprivate module
534         variable isn't SAVEd.
535
536         * trans-openmp.c (gfc_trans_omp_do): Put count into BLOCK, not BODY.
537         Fix typo in condition.  Fix DOVAR initialization.
538
539         * openmp.c (gfc_match_omp_clauses): Match min/iand/ior/ieor
540         rather than .min. etc.
541
542         * trans-openmpc.c (omp_not_yet): Remove.
543         (gfc_trans_omp_parallel_do): Keep listprivate clause on parallel.
544         Force creation of BIND_EXPR around the workshare construct.
545         (gfc_trans_omp_parallel_sections): Likewise.
546         (gfc_trans_omp_parallel_workshare): Likewise.
547
548         * types.def (BT_I16, BT_FN_I16_VPTR_I16,
549         BT_FN_BOOL_VPTR_I16_I16, BT_FN_I16_VPTR_I16_I16): Add.
550
551         * trans-openmp.c (gfc_trans_omp_clauses): Create OMP_CLAUSE_DEFAULT.
552         (gfc_trans_omp_code): New function.
553         (gfc_trans_omp_do): Use it, remove omp_not_yet uses.
554         (gfc_trans_omp_parallel, gfc_trans_omp_single): Likewise.
555         (gfc_trans_omp_sections): Likewise.  Only treat empty last section
556         specially if lastprivate clause is present.
557         * f95-lang.c (gfc_init_builtin_functions): Create BUILT_IN_TRAP
558         builtin.
559
560         * trans-openmp.c (gfc_trans_omp_variable_list): Update for
561         OMP_CLAUSE_DECL name change.
562         (gfc_trans_omp_do): Likewise.
563
564         * trans-openmp.c (gfc_trans_omp_clauses): Create OMP_CLAUSE_REDUCTION
565         clauses.
566         (gfc_trans_omp_atomic): Build OMP_ATOMIC instead of expanding
567         sync builtins directly.
568         (gfc_trans_omp_single): Build OMP_SINGLE statement.
569
570         * trans-openmp.c (gfc_trans_add_clause): New.
571         (gfc_trans_omp_variable_list): Take a tree code and build the clause
572         node here.  Link it to the head of a list.
573         (gfc_trans_omp_clauses): Update to match.
574         (gfc_trans_omp_do): Use gfc_trans_add_clause.
575
576         * trans-openmp.c (gfc_trans_omp_clauses): Change second argument to
577         gfc_omp_clauses *.  Use gfc_evaluate_now instead of creating
578         temporaries by hand.
579         (gfc_trans_omp_atomic, gfc_trans_omp_critical): Use buildN_v macros.
580         (gfc_trans_omp_do): New function.
581         (gfc_trans_omp_master): Dont' check for gfc_trans_code returning NULL.
582         (gfc_trans_omp_parallel): Adjust gfc_trans_omp_clauses caller.
583         Use buildN_v macros.
584         (gfc_trans_omp_parallel_do, gfc_trans_omp_parallel_sections,
585         gfc_trans_omp_parallel_workshare, gfc_trans_omp_sections,
586         gfc_trans_omp_single, gfc_trans_omp_workshare): New functions.
587         (gfc_trans_omp_directive): Use them.
588         * parse.c (parse_omp_do): Allow new_st.op == EXEC_NOP.
589         * openmp.c (resolve_omp_clauses): Check for list items present
590         in multiple clauses.
591         (resolve_omp_do): Check that iteration variable is not THREADPRIVATE
592         and is not present in any clause variable lists other than PRIVATE
593         or LASTPRIVATE.
594
595         * gfortran.h (symbol_attribute): Add threadprivate bit.
596         (gfc_common_head): Add threadprivate member, change use_assoc
597         and saved into char to save space.
598         (gfc_add_threadprivate): New prototype.
599         * symbol.c (check_conflict): Handle threadprivate.
600         (gfc_add_threadprivate): New function.
601         (gfc_copy_attr): Copy threadprivate.
602         * trans-openmp.c (gfc_trans_omp_clauses): Avoid creating a temporary
603         if IF or NUM_THREADS is constant.  Create OMP_CLAUSE_SCHEDULE and
604         OMP_CLAUSE_ORDERED.
605         * resolve.c (resolve_symbol): Complain if a THREADPRIVATE symbol
606         outside a module and not in COMMON has is not SAVEd.
607         (resolve_equivalence): Ensure THREADPRIVATE objects don't get
608         EQUIVALENCEd.
609         * trans-common.c: Include target.h and rtl.h.
610         (build_common_decl): Set DECL_TLS_MODEL if THREADPRIVATE.
611         * trans-decl.c: Include rtl.h.
612         (gfc_finish_var_decl): Set DECL_TLS_MODEL if THREADPRIVATE.
613         * dump-parse-tree.c (gfc_show_attr): Handle THREADPRIVATE.
614         * Make-lang.in (fortran/trans-decl.o): Depend on $(RTL_H).
615         (fortran/trans-common.o): Depend on $(RTL_H) and $(TARGET_H).
616         * openmp.c (gfc_match_omp_variable_list): Ensure COMMON block
617         is from current namespace.
618         (gfc_match_omp_threadprivate): Rewrite.
619         (resolve_omp_clauses): Check some clause restrictions.
620         * module.c (ab_attribute): Add AB_THREADPRIVATE.
621         (attr_bits): Add THREADPRIVATE.
622         (mio_symbol_attribute, mio_symbol_attribute): Handle threadprivate.
623         (load_commons, write_common, write_blank_common): Adjust for type
624         change of saved, store/load threadprivate bit from the integer
625         as well.
626
627         * types.def (BT_FN_UINT_UINT): New.
628         (BT_FN_VOID_UINT_UINT): Remove.
629
630         * trans-openmp.c (gfc_trans_omp_clauses, gfc_trans_omp_barrier,
631         gfc_trans_omp_critical, gfc_trans_omp_flush, gfc_trans_omp_master,
632         gfc_trans_omp_ordered, gfc_trans_omp_parallel): New functions.
633         (gfc_trans_omp_directive): Use them.
634
635         * openmp.c (expr_references_sym): Add SE argument, don't look
636         into SE tree.
637         (is_conversion): New function.
638         (resolve_omp_atomic): Adjust expr_references_sym callers.  Handle
639         promoted expressions.
640         * trans-openmp.c (gfc_trans_omp_atomic): New function.
641         (gfc_trans_omp_directive): Call it.
642
643         * f95-lang.c (builtin_type_for_size): New function.
644         (gfc_init_builtin_functions): Initialize synchronization and
645         OpenMP builtins.
646         * types.def: New file.
647         * Make-lang.in (f95-lang.o): Depend on $(BUILTINS_DEF) and
648         fortran/types.def.
649
650         * trans-openmp.c: Rename GOMP_* tree codes into OMP_*.
651
652         * dump-parse-tree.c (show_symtree): Don't crash if ns->proc_name
653         is NULL.
654
655         * dump-parse-tree.c (gfc_show_namelist, gfc_show_omp_node): New
656         functions.
657         (gfc_show_code_node): Call gfc_show_omp_node for EXEC_OMP_* nodes.
658
659         * parse.c (parse_omp_do): Call pop_state before next_statement.
660         * openmp.c (expr_references_sym, resolve_omp_atomic, resolve_omp_do):
661         New functions.
662         (gfc_resolve_omp_directive): Call them.
663         * match.c (match_exit_cycle): Issue error if EXIT or CYCLE statement
664         leaves an OpenMP structured block or if EXIT terminates !$omp do
665         loop.
666
667         * Make-lang.in (F95_PARSER_OBJS): Add fortran/openmp.o.
668         (F95_OBJS): Add fortran/trans-openmp.o.
669         (fortran/trans-openmp.o): Depend on $(GFORTRAN_TRANS_DEPS).
670         * lang.opt: Add -fopenmp option.
671         * options.c (gfc_init_options): Initialize it.
672         (gfc_handle_option): Handle it.
673         * gfortran.h (ST_OMP_ATOMIC, ST_OMP_BARRIER, ST_OMP_CRITICAL,
674         ST_OMP_END_CRITICAL, ST_OMP_END_DO, ST_OMP_END_MASTER,
675         ST_OMP_END_ORDERED, ST_OMP_END_PARALLEL, ST_OMP_END_PARALLEL_DO,
676         ST_OMP_END_PARALLEL_SECTIONS, ST_OMP_END_PARALLEL_WORKSHARE,
677         ST_OMP_END_SECTIONS, ST_OMP_END_SINGLE, ST_OMP_END_WORKSHARE,
678         ST_OMP_DO, ST_OMP_FLUSH, ST_OMP_MASTER, ST_OMP_ORDERED,
679         ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS,
680         ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION,
681         ST_OMP_SINGLE, ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE): New
682         statement codes.
683         (OMP_LIST_PRIVATE, OMP_LIST_FIRSTPRIVATE, OMP_LIST_LASTPRIVATE,
684         OMP_LIST_COPYPRIVATE, OMP_LIST_SHARED, OMP_LIST_COPYIN,
685         OMP_LIST_PLUS, OMP_LIST_REDUCTION_FIRST, OMP_LIST_MULT,
686         OMP_LIST_SUB, OMP_LIST_AND, OMP_LIST_OR, OMP_LIST_EQV,
687         OMP_LIST_NEQV, OMP_LIST_MAX, OMP_LIST_MIN, OMP_LIST_IAND,
688         OMP_LIST_IOR, OMP_LIST_IEOR, OMP_LIST_REDUCTION_LAST, OMP_LIST_NUM):
689         New OpenMP variable list types.
690         (gfc_omp_clauses): New typedef.
691         (gfc_get_omp_clauses): Define.
692         (EXEC_OMP_CRITICAL, EXEC_OMP_DO, EXEC_OMP_FLUSH, EXEC_OMP_MASTER,
693         EXEC_OMP_ORDERED, EXEC_OMP_PARALLEL, EXEC_OMP_PARALLEL_DO,
694         EXEC_OMP_PARALLEL_SECTIONS, EXEC_OMP_PARALLEL_WORKSHARE,
695         EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE,
696         EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT,
697         EXEC_OMP_END_SINGLE): New OpenMP gfc_exec_op codes.
698         (struct gfc_code): Add omp_clauses, omp_name, omp_namelist
699         and omp_bool fields to ext union.
700         (flag_openmp): Declare.
701         (gfc_free_omp_clauses, gfc_resolve_omp_directive): New prototypes.
702         * scanner.c (openmp_flag, openmp_locus): New variables.
703         (skip_free_comments, skip_fixed_comments, gfc_next_char_literal):
704         Handle OpenMP directive lines and conditional compilation magic
705         comments.
706         * parse.h (COMP_OMP_STRUCTURED_BLOCK): New compile state.
707         * parse.c (decode_omp_directive, parse_omp_do, parse_omp_atomic,
708         parse_omp_structured_block): New functions.
709         (next_free, next_fixed): Parse OpenMP directives.
710         (case_executable, case_exec_markers, case_decl): Add ST_OMP_*
711         codes.
712         (gfc_ascii_statement): Handle ST_OMP_* codes.
713         (parse_executable): Rearrange the loop slightly, so that
714         parse_omp_do can return next_statement.
715         * match.h (gfc_match_omp_eos, gfc_match_omp_atomic,
716         gfc_match_omp_barrier, gfc_match_omp_critical, gfc_match_omp_do,
717         gfc_match_omp_flush, gfc_match_omp_master, gfc_match_omp_ordered,
718         gfc_match_omp_parallel, gfc_match_omp_parallel_do,
719         gfc_match_omp_parallel_sections, gfc_match_omp_parallel_workshare,
720         gfc_match_omp_sections, gfc_match_omp_single,
721         gfc_match_omp_threadprivate, gfc_match_omp_workshare,
722         gfc_match_omp_end_nowait, gfc_match_omp_end_single): New prototypes.
723         * resolve.c (resolve_blocks): Ignore EXEC_OMP_* block directives.
724         (resolve_code): Call gfc_resolve_omp_directive on EXEC_OMP_*
725         directives.
726         * trans.c (gfc_trans_code): Call gfc_trans_omp_directive for
727         EXEC_OMP_* directives.
728         * st.c (gfc_free_statement): Handle EXEC_OMP_* statement freeing.
729         * trans-stmt.h (gfc_trans_omp_directive): New prototype.
730         * openmp.c: New file.
731         * trans-openmp.c: New file.
732
733 2006-02-13  Andrew Pinski  <pinskia@physics.uc.edu>
734             Jakub Jelinek  <jakub@redhat.com>
735
736         PR fortran/26246
737         * trans-decl.c (gfc_get_symbol_decl, gfc_get_fake_result_decl): Use
738         gfc_add_decl_to_function rather than gfc_finish_var_decl on length.
739
740 2006-02-13  Paul Thomas  <pault@gcc.gnu.org>
741
742         PR fortran/26074
743         PR fortran/25103
744         * resolve.c (resolve_symbol): Extend the requirement that module
745         arrays have constant bounds to those in the main program.  At the
746         same time simplify the array bounds, to avoiding trapping parameter
747         array references, and exclude automatic character length from main
748         and modules. Rearrange resolve_symbol and resolve_derived to put as
749         each flavor together, as much as is possible and move all specific
750         code for flavors FL_VARIABLE, FL_PROCEDURE and FL_PARAMETER into new
751         functions.
752         (resolve_fl_var_and_proc, resolve_fl_variable, resolve_fl_procedure):
753         New functions to do work of resolve_symbol.
754         (resolve_index_expr): New function that is called from resolved_symbol
755         and is extracted from resolve_charlen.
756         (resolve_charlen): Call this new function.
757         (resolve_fl_derived): Renamed resolve_derived to be consistent with
758         the naming of the new functions for the other flavours.  Change the
759         charlen checking so that the style is consistent with other similar
760         checks. Add the generation of the gfc_dt_list, removed from resolve_
761         symbol.
762
763         PR fortran/20861
764         * resolve.c (resolve_actual_arglist): Prevent internal procedures
765         from being dummy arguments.
766
767         PR fortran/20871
768         * resolve.c (resolve_actual_arglist): Prevent pure but non-intrinsic
769         procedures from being dummy arguments.
770
771         PR fortran/25083
772         * resolve.c (check_data_variable): Add test that data variable is in
773         COMMON.
774
775         PR fortran/25088
776         * resolve.c (resolve_call): Add test that the subroutine does not
777         have a type.
778
779 2006-02-12  Erik Edelmann  <eedelman@gcc.gnu.org>
780
781         PR fortran/25806
782         * trans-array.c (gfc_trans_allocate_array_storage): New argument
783         dealloc; free the temporary only if dealloc is true.
784         (gfc_trans_allocate_temp_array): New argument bool dealloc, to be
785         passed onwards to gfc_trans_allocate_array_storage.
786         (gfc_trans_array_constructor, gfc_conv_loop_setup): Update call to
787         gfc_trans_allocate_temp_array.
788         * trans-array.h (gfc_trans_allocate_temp_array): Update function
789         prototype.
790         * trans-expr.c (gfc_conv_function_call): Set new argument 'dealloc'
791         to gfc_trans_allocate_temp_array to false in case of functions
792         returning pointers.
793         (gfc_trans_arrayfunc_assign): Return NULL for functions returning
794         pointers.
795
796 2006-02-10  Steven G. Kargl  <kargls@comcast.net>
797
798         PR fortran/20858
799         *decl.c (variable_decl): Improve error message.  Remove initialization
800         typespec.  Wrap long line.
801         *expr.c (gfc_check_pointer_assign): Permit checking of type, kind type,
802         and rank.
803         *simplify.c (gfc_simplify_null): Ensure type, kind type, and rank
804         are set.
805
806
807 2006-02-10  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
808
809         PR fortran/14771
810         * arith.c (eval_intrinsic): Accept INTRINSIC_PARENTHESES.
811         * expr.c (check_intrinsic_op): Likewise.
812         * module.c (mio_expr): Likewise.
813
814 2006-02-09  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
815
816         * dump-parse-tree.c: Update copyright years.
817         * matchexp.c: Likewise.
818         * module.c: Likewise.
819
820         PR fortran/14771
821         * gfortran.h (gfc_intrinsic_op): Add INTRINSIC_PARENTHESES.
822         * dump-parse-tree (gfc_show_expr): Handle INTRINSIC_PARENTHESES.
823         * expr.c (simplify_intrinsic_op): Treat INTRINSIC_PARENTHESES as
824         if it were INTRINSIC_UPLUS.
825         * resolve.c (resolve_operator): Handle INTRINSIC_PARENTHESES.
826         * match.c (intrinsic_operators): Add INTRINSIC_PARENTHESES.
827         * matchexp.c (match_primary): Record parentheses surrounding
828         numeric expressions.
829         * module.c (intrinsics): Add INTRINSIC_PARENTHESES for module
830         dumping.
831         * trans-expr.c (gfc_conv_expr_op): Handle INTRINSIC_PARENTHESES.
832
833 2006-02-09  Paul Thomas  <pault@gcc.gnu.org>
834
835         PR fortran/26038
836         * trans-stmt.c (gfc_trans_allocate): Provide assumed character length
837         scalar with missing backend_decl for the hidden dummy charlen.
838
839         PR fortran/25059
840         * interface.c (gfc_extend_assign): Remove detection of non-PURE
841         subroutine in assignment interface, with gfc_error, and put it in
842         * resolve.c (resolve_code).
843
844         PR fortran/25070
845         * interface.c (gfc_procedure_use): Flag rank checking for non-
846         elemental, contained or interface procedures in call to
847         (compare_actual_formal), where ranks are checked for assumed
848         shape arrays..
849
850 2006-02-08  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
851
852         PR libfortran/25425
853         * trans-decl.c (gfc_generate_function_code): Add new argument,
854         pedantic, to set_std call.
855
856 2006-02-06  Thomas Koenig  <Thomas.Koenig@online.de>
857
858         PR libfortran/23815
859         * gfortran.texi: Document the GFORTRAN_CONVERT_UNIT environment
860         variable.
861         * invoke.texi:  Mention the "Runtime" chapter.
862         Document the -fconvert= option.
863         * gfortran.h:  Add options_convert.
864         * lang.opt:  Add fconvert=little-endian, fconvert=big-endian,
865         fconvert=native and fconvert=swap.
866         * trans-decl.c (top level):  Add gfor_fndecl_set_convert.
867         (gfc_build_builtin_function_decls):  Set gfor_fndecl_set_convert.
868         (gfc_generate_function_code):  If -fconvert was specified,
869         and this is the main program, add a call to set_convert().
870         * options.c:  Handle the -fconvert options.
871
872 2006-02-06  Roger Sayle  <roger@eyesopen.com>
873
874         * trans-stmt.c (gfc_evaluate_where_mask): Allow the NMASK argument
875         to be NULL to indicate that the not mask isn't required.
876         (gfc_trans_where_2): Remove PMASK argument.  Avoid calculating the
877         pending mask for the last clause of a WHERE chain.  Update recursive
878         call.
879         (gfc_trans_forall_1): Update call to gfc_trans_where_2.
880         (gfc_trans_where): Likewise.
881
882 2006-02-06  Jakub Jelinek  <jakub@redhat.com>
883
884         Backport from gomp-20050608-branch
885         * trans-decl.c (create_function_arglist): Handle dummy functions.
886
887         * trans-decl.c (gfc_get_symbol_decl): Revert explicit setting of
888         TYPE_SIZE_UNIT.
889         (gfc_trans_vla_type_sizes): Also "gimplify"
890         GFC_TYPE_ARRAY_DATAPTR_TYPE for GFC_DESCRIPTOR_TYPE_P types.
891         * trans-array.c (gfc_trans_deferred_array): Call
892         gfc_trans_vla_type_sizes.
893
894         * trans-decl.c (saved_function_decls, saved_parent_function_decls):
895         Remove unnecessary initialization.
896         (create_function_arglist): Make sure __result has complete type.
897         (gfc_get_fake_result_decl): Change current_fake_result_decl into
898         a tree chain.  For entry master, create a separate variable
899         for each result name.  For BT_CHARACTER results, call
900         gfc_finish_var_decl on length even if it has been already created,
901         but not pushdecl'ed.
902         (gfc_trans_vla_type_sizes): For function/entry result, adjust
903         result value type, not the FUNCTION_TYPE.
904         (gfc_generate_function_code): Adjust for current_fake_result_decl
905         changes.
906         (gfc_trans_deferred_vars): Likewise.  Call gfc_trans_vla_type_sizes
907         even on result if it is assumed-length character.
908
909         * trans-decl.c (gfc_trans_dummy_character): Add SYM argument.
910         Call gfc_trans_vla_type_sizes.
911         (gfc_trans_auto_character_variable): Call gfc_trans_vla_type_sizes.
912         (gfc_trans_vla_one_sizepos, gfc_trans_vla_type_sizes_1,
913         gfc_trans_vla_type_sizes): New functions.
914         (gfc_trans_deferred_vars): Adjust gfc_trans_dummy_character
915         callers.  Call gfc_trans_vla_type_sizes on assumed-length
916         character parameters.
917         * trans-array.c (gfc_trans_array_bounds,
918         gfc_trans_auto_array_allocation, gfc_trans_dummy_array_bias): Call
919         gfc_trans_vla_type_sizes.
920         * trans.h (gfc_trans_vla_type_sizes): New prototype.
921
922         * trans-decl.c (gfc_build_qualified_array): For non-assumed-size
923         arrays without constant size, create also an index var for
924         GFC_TYPE_ARRAY_SIZE (type).  If the type is incomplete, complete
925         it as 0..size-1.
926         (gfc_create_string_length): Don't call gfc_defer_symbol_init
927         if just creating DECL_ARGUMENTS.
928         (gfc_get_symbol_decl): Call gfc_finish_var_decl and
929         gfc_defer_symbol_init even if ts.cl->backend_decl is already
930         set to a VAR_DECL that doesn't have DECL_CONTEXT yet.
931         (create_function_arglist): Rework, so that hidden length
932         arguments for CHARACTER parameters are created together with
933         the parameters.  Resolve ts.cl->backend_decl for CHARACTER
934         parameters.  If the argument is a non-constant length array
935         or CHARACTER, ensure PARM_DECL has different type than
936         its DECL_ARG_TYPE.
937         (generate_local_decl): Call gfc_get_symbol_decl even
938         for non-referenced non-constant length CHARACTER parameters
939         after optionally issuing warnings.
940         * trans-array.c (gfc_trans_array_bounds): Set last stride
941         to GFC_TYPE_ARRAY_SIZE (type) to initialize it as well.
942         (gfc_trans_dummy_array_bias): Initialize GFC_TYPE_ARRAY_SIZE (type)
943         variable as well.
944
945         * trans-expr.c (gfc_conv_expr_val): Fix comment typo.
946
947         * trans-stmt.c (gfc_trans_simple_do): Fix comment.
948
949 2006-02-04  Roger Sayle  <roger@eyesopen.com>
950
951         * dependency.c (gfc_check_dependency): Remove unused vars and nvars
952         arguments.  Replace with an "identical" argument.  A full array
953         reference to the same symbol is a dependency if identical is true.
954         * dependency.h (gfc_check_dependency): Update prototype.
955         * trans-array.h (gfc_check_dependency): Delete duplicate prototype.
956         * trans-stmt.c: #include dependency.h for gfc_check_dependency.
957         (gfc_trans_forall_1): Update calls to gfc_check_dependency.
958         (gfc_trans_where_2): Likewise.  Remove unneeded variables.
959         (gfc_trans_where_3): New function for simple non-dependent WHEREs.
960         (gfc_trans_where): Call gfc_trans_where_3 to translate simple
961         F90-style WHERE statements without internal dependencies.
962         * Make-lang.in (trans-stmt.o): Depend upon dependency.h.
963
964 2006-02-05  H.J. Lu  <hongjiu.lu@intel.com>
965
966         PR fortran/26041
967         PR fortran/26064
968         * resolve.c (resolve_types): New function.
969         (resolve_codes): Likewise.
970         (gfc_resolve): Use them.
971
972 2006-02-05  Roger Sayle  <roger@eyesopen.com>
973
974         * trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE
975         masks instead of LOGICAL*4.
976
977 2006-02-05  Jakub Jelinek  <jakub@redhat.com>
978
979         * resolve.c (resolve_symbol): Initialize constructor_expr to NULL.
980
981 2006-02-04  Thomas Koenig  <Thomas.Koenig@online.de>
982
983         PR fortran/25075
984         check.c (identical_dimen_shape):  New function.
985         (check_dot_product):  Use identical_dimen_shape() to check sizes
986         for dot_product.
987         (gfc_check_matmul):  Likewise.
988         (gfc_check_merge):  Check conformance between tsource and fsource
989         and between tsource and mask.
990         (gfc_check_pack):  Check conformance between array and mask.
991
992 2006-02-03  Steven G. Kargl  <kargls@comcast>
993             Paul Thomas  <pault@gcc.gnu.org>
994
995         PR fortran/20845
996         * resolve.c (resolve_symbol): Default initialization of derived type
997         component reguires the SAVE attribute.
998
999 2006-02-02  Steven G. Kargl  <kargls@comcast>
1000
1001         PR fortran/24958
1002         match.c (gfc_match_nullify):  Free the list from head not tail.
1003
1004         PR fortran/25072
1005         * match.c (match_forall_header): Fix internal error caused by bogus
1006         gfc_epxr pointers.
1007
1008
1009 2006-01-31  Thomas Koenig  <Thomas.Koenig@online.de>
1010
1011         PR fortran/26039
1012         expr.c (gfc_check_conformance):  Reorder error message
1013         to avoid plural.
1014         check.c(gfc_check_minloc_maxloc):  Call gfc_check_conformance
1015         for checking arguments array and mask.
1016         (check_reduction):  Likewise.
1017
1018 2006-01-30  Erik Edelmann  <eedelman@gcc.gnu.org>
1019
1020         PR fortran/24266
1021         * trans-io.c (set_internal_unit): Check the rank of the
1022         expression node itself instead of its symbol.
1023
1024 2006-01-29  Paul Thomas  <pault@gcc.gnu.org>
1025
1026         PR fortran/18578
1027         PR fortran/18579
1028         PR fortran/20857
1029         PR fortran/20885
1030         * interface.c (compare_actual_formal): Error for INTENT(OUT or INOUT)
1031         if actual argument is not a variable.
1032
1033 2006-01-28  Paul Thomas  <pault@gcc.gnu.org>
1034
1035         PR fortran/17911
1036         * expr.c (gfc_check_assign, gfc_check_pointer_assign): Emit error if
1037         the lvalue is a use associated procedure.
1038
1039         PR fortran/20895
1040         PR fortran/25030
1041         * expr.c (gfc_check_pointer_assign): Emit error if lvalue and rvalue
1042         character lengths are not the same.  Use gfc_dep_compare_expr for the
1043         comparison.
1044         * gfortran.h: Add prototype for gfc_dep_compare_expr.
1045         * dependency.h: Remove prototype for gfc_dep_compare_expr.
1046
1047 2006-01-27  Paul Thomas  <pault@gcc.gnu.org>
1048
1049         PR fortran/25964
1050         * resolve.c (resolve_function): Add GFC_ISYM_LOC to the list of
1051         generic_ids exempted from assumed size checking.
1052
1053 2006-01-27  Jakub Jelinek  <jakub@redhat.com>
1054
1055         PR fortran/25324
1056         * Make-lang.in (fortran/scanner.o): Depend on toplev.h.
1057         * lang.opt (fpreprocessed): New option.
1058         * scanner.c: Include toplev.h.
1059         (gfc_src_file, gfc_src_preprocessor_lines): New variables.
1060         (preprocessor_line): Unescape filename if there were any
1061         backslashes.
1062         (load_file): If initial and gfc_src_file is not NULL,
1063         use it rather than opening the file.  If gfc_src_preprocessor_lines
1064         has non-NULL elements, pass it to preprocessor_line.
1065         (unescape_filename, gfc_read_orig_filename): New functions.
1066         * gfortran.h (gfc_option_t): Add flag_preprocessed.
1067         (gfc_read_orig_filename): New prototype.
1068         * options.c (gfc_init_options): Clear flag_preprocessed.
1069         (gfc_post_options): If flag_preprocessed, call
1070         gfc_read_orig_filename.
1071         (gfc_handle_option): Handle OPT_fpreprocessed.
1072         * lang-specs.h: Pass -fpreprocessed to f951 if preprocessing
1073         sources.
1074
1075 2006-01-27  Erik Edelmann  <eedelman@gcc.gnu.org>
1076
1077         * symbol.c (free_old_symbol): Fix confusing comment, and add code
1078           to free old_symbol->formal.
1079
1080 2006-01-26  Paul Thomas  <pault@gcc.gnu.org>
1081
1082         PR fortran/25964
1083         * resolve.c (resolve_function): Exclude statement functions from
1084         global reference checking.
1085
1086         PR fortran/25084
1087         PR fortran/20852
1088         PR fortran/25085
1089         PR fortran/25086
1090         * resolve.c (resolve_function): Declare a gfc_symbol to replace the
1091         references through the symtree to the symbol associated with the
1092         function expresion. Give error on reference to an assumed character
1093         length function is defined in an interface or an external function
1094         that is not a dummy argument.
1095         (resolve_symbol): Give error if an assumed character length function
1096         is array-valued, pointer-valued, pure or recursive. Emit warning
1097         that character(*) value functions are obsolescent in F95.
1098
1099         PR fortran/25416
1100         * trans-expr.c (gfc_conv_function_call): The above patch to resolve.c
1101         prevents any assumed character length function call from getting here
1102         except intrinsics such as SPREAD. In this case, ensure that no
1103         segfault occurs from referencing non-existent charlen->length->
1104         expr_type and provide a backend_decl for the charlen from the charlen
1105         of the first actual argument.
1106
1107         Cure temp name confusion.
1108         * trans-expr.c (gfc_get_interface_mapping_array): Change name of
1109         temporary from "parm" to "ifm" to avoid clash with temp coming from
1110         trans-array.c.
1111
1112 2006-01-25  Erik Edelmann  <eedelman@gcc.gnu.org>
1113
1114         PR fortran/25716
1115         * symbol.c (free_old_symbol): New function.
1116         (gfc_commit_symbols): Use it.
1117         (gfc_commit_symbol): New function.
1118         (gfc_use_derived): Use it.
1119         * gfortran.h: Add prototype for gfc_commit_symbol.
1120         * intrinsic.c (gfc_find_function): Search in 'conversion'
1121         if not found in 'functions'.
1122         (gfc_convert_type_warn): Add a symtree to the new
1123         expression node, and commit the new symtree->n.sym.
1124         * resolve.c (gfc_resolve_index): Make sure typespec is
1125         properly initialized.
1126
1127 2006-01-23  Paul Thomas  <pault@gcc.gnu.org>
1128
1129         PR fortran/25901
1130         * decl.c (get_proc_name): Replace subroutine and function attributes
1131         in "already defined" test by the formal arglist pointer being non-NULL.
1132
1133         Fix regression in testing of admissability of attributes.
1134         * symbol.c (gfc_add_attribute): If the current_attr has non-zero
1135         intent, do not do the check for a dummy being used.
1136         * decl.c (attr_decl1): Add current_attr.intent as the third argument
1137         in the call to gfc_add_attribute.
1138         * gfortran.h: Add the third argument to the prototype for
1139         gfc_add_attribute.
1140
1141 2006-01-21  Joseph S. Myers  <joseph@codesourcery.com>
1142
1143         * gfortranspec.c (lang_specific_driver): Update copyright notice
1144         date.
1145
1146 2006-01-21  Paul Thomas  <pault@gcc.gnu.org>
1147
1148         PR fortran/25124
1149         PR fortran/25625
1150         * decl.c (get_proc_name): If there is an existing
1151         symbol in the encompassing namespace, call errors
1152         if it is a procedure of the same name or the kind
1153         field is set, indicating a type declaration.
1154
1155         PR fortran/20881
1156         PR fortran/23308
1157         PR fortran/25538
1158         PR fortran/25710
1159         * decl.c (add_global_entry): New function to check
1160         for existing global symbol with this name and to
1161         create new one if none exists.
1162         (gfc_match_entry): Call add_global_entry before
1163         matching argument lists for subroutine and function
1164         entries.
1165         * gfortran.h: Prototype for existing function,
1166         global_used.
1167         * resolve.c (resolve_global_procedure): New function
1168         to check global symbols for procedures.
1169         (resolve_call, resolve_function): Calls to this
1170         new function for non-contained and non-module
1171         procedures.
1172         * match.c (match_common): Add check for existing
1173         global symbol, creat one if none exists and emit
1174         error if there is a clash.
1175         * parse.c (global_used): Remove static and use the
1176         gsymbol name rather than the new_block name, so that
1177         the function can be called from resolve.c.
1178         (parse_block_data, parse_module, add_global_procedure):
1179         Improve checks for existing gsymbols.  Emit error if
1180         already defined or if references were to another type.
1181         Set defined flag.
1182
1183         PR fortran/PR24276
1184         * trans-expr.c (gfc_conv_aliased_arg): New function called by 
1185         gfc_conv_function_call that coverts an expression for an aliased
1186         component reference to a derived type array into a temporary array
1187         of the same type as the component.  The temporary is passed as an
1188         actual argument for the procedure call and is copied back to the
1189         derived type after the call.
1190         (is_aliased_array): New function that detects an array reference
1191         that is followed by a component reference.
1192         (gfc_conv_function_call): Detect an aliased actual argument with
1193         is_aliased_array and convert it to a temporary and back again
1194         using gfc_conv_aliased_arg.
1195
1196 2006-01-19  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
1197
1198         * gfortranspec.c: Update copyright years.
1199         * trans.c: Likewise.
1200         * trans-array.c: Likewise.
1201         * trans-array.h: Likewise.
1202         * trans-decl.c: Likewise.
1203         * trans-stmt.c: Likewise.
1204         * trans-stmt.h: Likewise.
1205         * trans-types.c: Likewise.
1206
1207 2006-01-18  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
1208
1209         PR fortran/18540
1210         PR fortran/18937
1211         * gfortran.h (BBT_HEADER): Move definition up.
1212         (gfc_st_label): Add BBT_HEADER, remove 'prev' and 'next'.
1213         * io.c (format_asterisk): Adapt initializer.
1214         * resolve.c (resolve_branch): Allow FORTRAN 66 cross-block GOTOs
1215         as extension.
1216         (warn_unused_label): Take gfc_st_label label as argument, adapt to
1217         new data structure.
1218         (gfc_resolve): Adapt call to warn_unused_label.
1219         * symbol.c (compare_st_labels): New function.
1220         (gfc_free_st_label, free_st_labels, gfc_get_st_label): Convert to
1221         using balanced binary tree.
1222         * decl.c (match_char_length, gfc_match_old_kind_spec): Do away
1223         with 'cnt'.
1224         (warn_unused_label): Adapt to binary tree.
1225         * match.c (gfc_match_small_literal_int): Only set cnt if non-NULL.
1226         * primary.c (match_kind_param): Do away with cnt.
1227
1228 2006-01-18  Paul Thomas  <pault@gcc.gnu.org>
1229
1230         PR fortran/20869
1231         PR fortran/20875
1232         PR fortran/25024
1233         * symbol.c (check_conflict): Add pointer valued elemental
1234         functions and internal procedures with the external attribute
1235         to the list of conflicts.
1236         (gfc_add_attribute): New catch-all function to perform the
1237         checking of symbol attributes for attribute declaration
1238         statements.
1239         * decl.c (attr_decl1): Call gfc_add_attribute for each of -
1240         (gfc_match_external, gfc_match_intent, gfc_match_intrinsic,
1241         gfc_match_pointer, gfc_match_dimension, gfc_match_target):
1242         Remove spurious calls to checks in symbol.c.  Set the
1243         attribute directly and use the call to attr_decl() for
1244         checking.
1245         * gfortran.h:  Add prototype for gfc_add_attribute.
1246
1247         PR fortran/25785
1248         * resolve.c (resolve_function): Exclude PRESENT from assumed size
1249         argument checking. Replace strcmp's with comparisons with generic
1250         codes.
1251
1252 2006-01-16  Rafael \81Ávila de Esp\81índola  <rafael.espindola@gmail.com>
1253
1254         * gfortranspec.c (lang_specific_spec_functions): Remove.
1255
1256 2006-01-16  Richard Guenther  <rguenther@suse.de>
1257
1258         * trans-stmt.c (gfc_trans_if_1): Use fold_buildN and build_int_cst.
1259         (gfc_trans_arithmetic_if): Likewise.
1260         (gfc_trans_simple_do): Likewise.
1261         (gfc_trans_do): Likewise.
1262         (gfc_trans_do_while): Likewise.
1263         (gfc_trans_logical_select): Likewise.
1264         (gfc_trans_forall_loop): Likewise.
1265         (generate_loop_for_temp_to_lhs): Likewise.
1266         (generate_loop_for_rhs_to_temp): Likewise.
1267         (gfc_trans_allocate): Likewise.
1268         * trans.c (gfc_add_expr_to_block): Do not fold expr again.
1269
1270 2006-01-16  Richard Guenther  <rguenther@suse.de>
1271
1272         * trans-expr.c (gfc_conv_function_call): Use fold_build2.
1273         * trans-stmt.c (gfc_trans_goto): Likewise.  Use build_int_cst.
1274         * trans.c (gfc_trans_runtime_check): Don't fold the condition
1275         again.
1276
1277 2006-01-13  Steven G. Kargl  <kargls@comcast.net>
1278
1279         PR fortran/25756
1280         * symbol.c (gfc_free_st_label): Give variable meaningful name. Remove
1281         unneeded parenthesis. Fix-up the head of the list (2 lines gleaned
1282         from g95).
1283
1284 2006-01-13  Diego Novillo  <dnovillo@redhat.com>
1285
1286         * trans.c (gfc_add_expr_to_block): Do not fold tcc_statement
1287         nodes.
1288
1289 2006-01-11  Tobias Schl\81üter  <tobias.schlueter@physik.uni-muenchen.de>
1290
1291         * parse.c (next_fixed): Remove superfluous string concatenation.
1292
1293 2006-01-11  Bernhard Fischer  <rep.nop@aon.at>
1294
1295         PR fortran/25486
1296         * scanner.c (load_line): use maxlen to determine the line-length used
1297         for padding lines in fixed form.
1298
1299 2006-01-11  Paul Thomas  <pault@gcc.gnu.org>
1300
1301         PR fortran/25730
1302         * trans-types.c (copy_dt_decls_ifequal): Copy backend decl for
1303         character lengths.
1304
1305 2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
1306
1307         fortran/24936
1308         * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert
1309         to avoid type mismatch.
1310
1311 2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
1312
1313         PR fortran/21977
1314         * trans-decl.c (gfc_generate_function_code): Move the NULLing of
1315         current_fake_result_decl down to below generate_local_vars.
1316
1317 2006-01-09  Feng Wang  <fengwang@nudt.edu.cn>
1318
1319         PR fortran/12456
1320         * trans-expr.c (gfc_to_single_character): New function that converts
1321         string to single character if its length is 1.
1322         (gfc_build_compare_string):New function that compare string and handle
1323         single character specially.
1324         (gfc_conv_expr_op): Use gfc_build_compare_string.
1325         (gfc_trans_string_copy): Use gfc_to_single_character.
1326         * trans-intrinsic.c (gfc_conv_intrinsic_strcmp): Use
1327         gfc_build_compare_string.
1328         * trans.h (gfc_build_compare_string): Add prototype.
1329
1330 2006-01-09  Feng Wang  <fengwang@nudt.edu.cn>
1331
1332         * simplify.c (gfc_simplify_char): Use UCHAR_MAX instead of literal
1333         constant.
1334         (gfc_simplify_ichar): Get the result from unsinged char and in the
1335         range 0 to UCHAR_MAX instead of CHAR_MIN to CHAR_MAX.
1336
1337 2006-01-08  Erik Edelmann  <eedelman@gcc.gnu.org>
1338
1339         PR fortran/25093
1340         * resolve.c (resolve_fntype): Check that PUBLIC functions
1341         aren't of PRIVATE type.
1342
1343 2006-01-07  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
1344
1345         * decl.c (gfc_match_function_decl): Correctly error out in case of
1346         omitted function argument list.
1347
1348 2006-01-07  Paul Thomas  <pault@gcc.gnu.org>
1349
1350         PR fortran/22146
1351         * trans-array.c (gfc_reverse_ss): Remove static attribute.
1352         (gfc_walk_elemental_function_args): Replace gfc_expr * argument for
1353         the function call with the corresponding gfc_actual_arglist*.  Change
1354         code accordingly.
1355         (gfc_walk_function_expr): Call to gfc_walk_elemental_function_args
1356         now requires the actual argument list instead of the expression for
1357         the function call.
1358         * trans-array.h: Modify the prototype for gfc_walk_elemental_function_args
1359         and provide a prototype for gfc_reverse_ss.
1360         * trans-stmt.h (gfc_trans_call): Add the scalarization code for the case
1361         where an elemental subroutine has array valued actual arguments.
1362
1363         PR fortran/25029
1364         PR fortran/21256
1365         PR fortran/20868
1366         PR fortran/20870
1367         * resolve.c (check_assumed_size_reference): New function to check for upper
1368         bound in assumed size array references.
1369         (resolve_assumed_size_actual): New function to do a very restricted scan
1370         of actual argument expressions of those procedures for which incomplete
1371         assumed size array references are not allowed.
1372         (resolve_function, resolve_call): Switch off assumed size checking of
1373         actual arguments, except for elemental procedures and intrinsic
1374         inquiry functions, in some circumstances.
1375         (resolve_variable): Call check_assumed_size_reference.
1376
1377 2006-01-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
1378
1379         PR fortran/24268
1380         * io.c (next_char_not_space): New function that returns the next
1381         character that is not white space.
1382         (format_lex): Use the new function to skip whitespace within
1383         a format string.
1384
1385 2006-01-05  Erik Edelmann  <eedelman@gcc.gnu.org>
1386
1387         PR fortran/23675
1388         * expr.c (gfc_expr_set_symbols_referenced): New function.
1389         * gfortran.h: Add a function prototype for it.
1390         * resolve.c (resolve_function): Use it for
1391         use associated character functions lengths.
1392         * expr.c, gfortran.h, resolve.c: Updated copyright years.
1393
1394 2006-01-03  Steven G. Kargl  <kargls@comcast.net>
1395
1396         PR fortran/25101
1397         * resolve.c (resolve_forall_iterators):  Check for scalar variables;
1398         Check stride is nonzero.
1399
1400 2006-01-02  Steven G. Kargl  <kargls@comcast.net>
1401
1402         PR fortran/24640
1403         * parse.c (next_free): Check for whitespace after the label.
1404         * match.c (gfc_match_small_literal_int): Initialize cnt variable.
1405
1406 2006-01-01  Steven G. Kargl  <kargls@comcast.net>
1407
1408         * ChangeLog: Split previous years into ...
1409         * ChangeLog-2002: here.
1410         * ChangeLog-2003: here.
1411         * ChangeLog-2004: here.
1412         * ChangeLog-2005: here.