(root)/
gcc-13.2.0/
gcc/
fortran/
match.h
       1  /* All matcher functions.
       2     Copyright (C) 2003-2023 Free Software Foundation, Inc.
       3     Contributed by Steven Bosscher
       4  
       5  This file is part of GCC.
       6  
       7  GCC is free software; you can redistribute it and/or modify it under
       8  the terms of the GNU General Public License as published by the Free
       9  Software Foundation; either version 3, or (at your option) any later
      10  version.
      11  
      12  GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13  WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15  for more details.
      16  
      17  You should have received a copy of the GNU General Public License
      18  along with GCC; see the file COPYING3.  If not see
      19  <http://www.gnu.org/licenses/>.  */
      20  
      21  
      22  #ifndef GFC_MATCH_H
      23  #define GFC_MATCH_H
      24  
      25  /* gfc_new_block points to the symbol of a newly matched block.  */
      26  extern gfc_symbol *gfc_new_block;
      27  
      28  /* Current statement label.  Zero means no statement label.  Because
      29     new_st can get wiped during statement matching, we have to keep it
      30     separate.  */
      31  extern gfc_st_label *gfc_statement_label;
      32  
      33  extern int gfc_matching_ptr_assignment;
      34  extern int gfc_matching_procptr_assignment;
      35  extern bool gfc_matching_prefix;
      36  
      37  /* Default access specifier while matching procedure bindings.  */
      38  extern gfc_access gfc_typebound_default_access;
      39  
      40  /****************** All gfc_match* routines *****************/
      41  
      42  /* match.cc.  */
      43  
      44  /* Generic match subroutines.  */
      45  match gfc_match_special_char (gfc_char_t *);
      46  match gfc_match_space (void);
      47  match gfc_match_eos (void);
      48  match gfc_match_small_literal_int (int *, int *, bool = true);
      49  match gfc_match_st_label (gfc_st_label **);
      50  match gfc_match_small_int (int *);
      51  match gfc_match_name (char *, bool = true);
      52  match gfc_match_symbol (gfc_symbol **, int);
      53  match gfc_match_sym_tree (gfc_symtree **, int);
      54  match gfc_match_intrinsic_op (gfc_intrinsic_op *);
      55  match gfc_match_char (char, bool = true);
      56  match gfc_match (const char *, ...);
      57  match gfc_match_iterator (gfc_iterator *, int);
      58  match gfc_match_parens (void);
      59  match gfc_match_type_spec (gfc_typespec *);
      60  match gfc_match_member_sep(gfc_symbol *);
      61  
      62  
      63  /* Statement matchers.  */
      64  match gfc_match_program (void);
      65  match gfc_match_pointer_assignment (void);
      66  match gfc_match_assignment (void);
      67  match gfc_match_if (gfc_statement *);
      68  match gfc_match_else (void);
      69  match gfc_match_elseif (void);
      70  match gfc_match_event_post (void);
      71  match gfc_match_event_wait (void);
      72  match gfc_match_critical (void);
      73  match gfc_match_fail_image (void);
      74  match gfc_match_change_team (void);
      75  match gfc_match_end_team (void);
      76  match gfc_match_form_team (void);
      77  match gfc_match_sync_team (void);
      78  match gfc_match_block (void);
      79  match gfc_match_associate (void);
      80  match gfc_match_do (void);
      81  match gfc_match_cycle (void);
      82  match gfc_match_exit (void);
      83  match gfc_match_lock (void);
      84  match gfc_match_pause (void);
      85  match gfc_match_stop (void);
      86  match gfc_match_error_stop (void);
      87  match gfc_match_continue (void);
      88  match gfc_match_assign (void);
      89  match gfc_match_goto (void);
      90  match gfc_match_sync_all (void);
      91  match gfc_match_sync_images (void);
      92  match gfc_match_sync_memory (void);
      93  match gfc_match_unlock (void);
      94  
      95  match gfc_match_allocate (void);
      96  match gfc_match_nullify (void);
      97  match gfc_match_deallocate (void);
      98  match gfc_match_return (void);
      99  match gfc_match_call (void);
     100  
     101  /* We want to use this function to check for a common-block-name
     102     that can exist in a bind statement, so removed the "static"
     103     declaration of the function in match.cc. */
     104   
     105  match gfc_match_common_name (char *name);
     106  
     107  match gfc_match_common (void);
     108  match gfc_match_block_data (void);
     109  match gfc_match_namelist (void);
     110  match gfc_match_module (void);
     111  match gfc_match_equivalence (void);
     112  match gfc_match_st_function (void);
     113  match gfc_match_ptr_fcn_assign (void);
     114  match gfc_match_case (void);
     115  match gfc_match_select (void);
     116  match gfc_match_select_type (void);
     117  match gfc_match_type_is (void);
     118  match gfc_match_class_is (void);
     119  match gfc_match_select_rank (void);
     120  match gfc_match_rank_is (void);
     121  match gfc_match_where (gfc_statement *);
     122  match gfc_match_elsewhere (void);
     123  match gfc_match_forall (gfc_statement *);
     124  
     125  /* Other functions.  */
     126  
     127  gfc_common_head *gfc_get_common (const char *, int);
     128  
     129  /* openmp.cc.  */
     130  
     131  /* OpenACC directive matchers.  */
     132  match gfc_match_oacc_atomic (void);
     133  match gfc_match_oacc_cache (void);
     134  match gfc_match_oacc_wait (void);
     135  match gfc_match_oacc_update (void);
     136  match gfc_match_oacc_declare (void);
     137  match gfc_match_oacc_loop (void);
     138  match gfc_match_oacc_host_data (void);
     139  match gfc_match_oacc_data (void);
     140  match gfc_match_oacc_kernels (void);
     141  match gfc_match_oacc_kernels_loop (void);
     142  match gfc_match_oacc_parallel (void);
     143  match gfc_match_oacc_parallel_loop (void);
     144  match gfc_match_oacc_serial (void);
     145  match gfc_match_oacc_serial_loop (void);
     146  match gfc_match_oacc_enter_data (void);
     147  match gfc_match_oacc_exit_data (void);
     148  match gfc_match_oacc_routine (void);
     149  
     150  /* OpenMP directive matchers.  */
     151  match gfc_match_omp_eos_error (void);
     152  match gfc_match_omp_assume (void);
     153  match gfc_match_omp_assumes (void);
     154  match gfc_match_omp_atomic (void);
     155  match gfc_match_omp_barrier (void);
     156  match gfc_match_omp_cancel (void);
     157  match gfc_match_omp_cancellation_point (void);
     158  match gfc_match_omp_critical (void);
     159  match gfc_match_omp_declare_reduction (void);
     160  match gfc_match_omp_declare_simd (void);
     161  match gfc_match_omp_declare_target (void);
     162  match gfc_match_omp_declare_variant (void);
     163  match gfc_match_omp_depobj (void);
     164  match gfc_match_omp_distribute (void);
     165  match gfc_match_omp_distribute_parallel_do (void);
     166  match gfc_match_omp_distribute_parallel_do_simd (void);
     167  match gfc_match_omp_distribute_simd (void);
     168  match gfc_match_omp_do (void);
     169  match gfc_match_omp_do_simd (void);
     170  match gfc_match_omp_loop (void);
     171  match gfc_match_omp_error (void);
     172  match gfc_match_omp_flush (void);
     173  match gfc_match_omp_masked (void);
     174  match gfc_match_omp_masked_taskloop (void);
     175  match gfc_match_omp_masked_taskloop_simd (void);
     176  match gfc_match_omp_master (void);
     177  match gfc_match_omp_master_taskloop (void);
     178  match gfc_match_omp_master_taskloop_simd (void);
     179  match gfc_match_omp_nothing (void);
     180  match gfc_match_omp_ordered (void);
     181  match gfc_match_omp_ordered_depend (void);
     182  match gfc_match_omp_parallel (void);
     183  match gfc_match_omp_parallel_do (void);
     184  match gfc_match_omp_parallel_do_simd (void);
     185  match gfc_match_omp_parallel_loop (void);
     186  match gfc_match_omp_parallel_masked (void);
     187  match gfc_match_omp_parallel_masked_taskloop (void);
     188  match gfc_match_omp_parallel_masked_taskloop_simd (void);
     189  match gfc_match_omp_parallel_master (void);
     190  match gfc_match_omp_parallel_master_taskloop (void);
     191  match gfc_match_omp_parallel_master_taskloop_simd (void);
     192  match gfc_match_omp_parallel_sections (void);
     193  match gfc_match_omp_parallel_workshare (void);
     194  match gfc_match_omp_requires (void);
     195  match gfc_match_omp_scope (void);
     196  match gfc_match_omp_scan (void);
     197  match gfc_match_omp_sections (void);
     198  match gfc_match_omp_simd (void);
     199  match gfc_match_omp_single (void);
     200  match gfc_match_omp_target (void);
     201  match gfc_match_omp_target_data (void);
     202  match gfc_match_omp_target_enter_data (void);
     203  match gfc_match_omp_target_exit_data (void);
     204  match gfc_match_omp_target_parallel (void);
     205  match gfc_match_omp_target_parallel_do (void);
     206  match gfc_match_omp_target_parallel_do_simd (void);
     207  match gfc_match_omp_target_parallel_loop (void);
     208  match gfc_match_omp_target_simd (void);
     209  match gfc_match_omp_target_teams (void);
     210  match gfc_match_omp_target_teams_distribute (void);
     211  match gfc_match_omp_target_teams_distribute_parallel_do (void);
     212  match gfc_match_omp_target_teams_distribute_parallel_do_simd (void);
     213  match gfc_match_omp_target_teams_distribute_simd (void);
     214  match gfc_match_omp_target_teams_loop (void);
     215  match gfc_match_omp_target_update (void);
     216  match gfc_match_omp_task (void);
     217  match gfc_match_omp_taskgroup (void);
     218  match gfc_match_omp_taskloop (void);
     219  match gfc_match_omp_taskloop_simd (void);
     220  match gfc_match_omp_taskwait (void);
     221  match gfc_match_omp_taskyield (void);
     222  match gfc_match_omp_teams (void);
     223  match gfc_match_omp_teams_distribute (void);
     224  match gfc_match_omp_teams_distribute_parallel_do (void);
     225  match gfc_match_omp_teams_distribute_parallel_do_simd (void);
     226  match gfc_match_omp_teams_distribute_simd (void);
     227  match gfc_match_omp_teams_loop (void);
     228  match gfc_match_omp_threadprivate (void);
     229  match gfc_match_omp_workshare (void);
     230  match gfc_match_omp_end_critical (void);
     231  match gfc_match_omp_end_nowait (void);
     232  match gfc_match_omp_end_single (void);
     233  
     234  /* decl.cc.  */
     235  
     236  match gfc_match_data (void);
     237  match gfc_match_null (gfc_expr **);
     238  match gfc_match_kind_spec (gfc_typespec *, bool);
     239  match gfc_match_decl_type_spec (gfc_typespec *, int);
     240  
     241  match gfc_match_end (gfc_statement *);
     242  match gfc_match_data_decl (void);
     243  match gfc_match_formal_arglist (gfc_symbol *, int, int, bool = false);
     244  match gfc_match_procedure (void);
     245  match gfc_match_generic (void);
     246  match gfc_match_function_decl (void);
     247  match gfc_match_entry (void);
     248  match gfc_match_subroutine (void);
     249  match gfc_match_submod_proc (void);
     250  match gfc_match_map (void);
     251  match gfc_match_union (void);
     252  match gfc_match_structure_decl (void);
     253  match gfc_match_derived_decl (void);
     254  match gfc_match_final_decl (void);
     255  match gfc_match_type (gfc_statement *);
     256  
     257  match gfc_match_implicit_none (void);
     258  match gfc_match_implicit (void);
     259  
     260  void gfc_set_constant_character_len (gfc_charlen_t, gfc_expr *,
     261  				     gfc_charlen_t);
     262  
     263  /* Matchers for attribute declarations.  */
     264  match gfc_match_allocatable (void);
     265  match gfc_match_asynchronous (void);
     266  match gfc_match_automatic (void);
     267  match gfc_match_codimension (void);
     268  match gfc_match_contiguous (void);
     269  match gfc_match_dimension (void);
     270  match gfc_match_external (void);
     271  match gfc_match_gcc_attributes (void);
     272  match gfc_match_gcc_builtin (void);
     273  match gfc_match_gcc_ivdep (void);
     274  match gfc_match_gcc_novector (void);
     275  match gfc_match_gcc_unroll (void);
     276  match gfc_match_gcc_vector (void);
     277  match gfc_match_import (void);
     278  match gfc_match_intent (void);
     279  match gfc_match_intrinsic (void);
     280  match gfc_match_optional (void);
     281  match gfc_match_parameter (void);
     282  match gfc_match_pointer (void);
     283  match gfc_match_protected (void);
     284  match gfc_match_private (gfc_statement *);
     285  match gfc_match_public (gfc_statement *);
     286  match gfc_match_save (void);
     287  match gfc_match_static (void);
     288  match gfc_match_modproc (void);
     289  match gfc_match_target (void);
     290  match gfc_match_value (void);
     291  match gfc_match_volatile (void);
     292  
     293  /* decl.cc.  */
     294  
     295  /* Fortran 2003 c interop.
     296     TODO: some of these should be moved to another file rather than decl.cc */
     297  match gfc_match_bind_c_stmt (void);
     298  match gfc_match_bind_c (gfc_symbol *, bool);
     299  
     300  /* primary.cc.  */
     301  match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **);
     302  match gfc_match_variable (gfc_expr **, int);
     303  match gfc_match_equiv_variable (gfc_expr **);
     304  match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false);
     305  match gfc_match_literal_constant (gfc_expr **, int);
     306  
     307  /* expr.cc -- FIXME: this one should be eliminated by moving the
     308     matcher to matchexp.cc and a call to a new function in expr.cc that
     309     only makes sure the init expr. is valid.  */
     310  bool gfc_reduce_init_expr (gfc_expr *expr);
     311  match gfc_match_init_expr (gfc_expr **);
     312  
     313  /* array.cc.  */
     314  match gfc_match_array_spec (gfc_array_spec **, bool, bool);
     315  match gfc_match_array_ref (gfc_array_ref *, gfc_array_spec *, int, int);
     316  match gfc_match_array_constructor (gfc_expr **);
     317  
     318  /* interface.cc.  */
     319  match gfc_match_abstract_interface (void);
     320  match gfc_match_generic_spec (interface_type *, char *, gfc_intrinsic_op *);
     321  match gfc_match_interface (void);
     322  match gfc_match_end_interface (void);
     323  
     324  /* io.cc.  */
     325  match gfc_match_format (void);
     326  match gfc_match_open (void);
     327  match gfc_match_close (void);
     328  match gfc_match_endfile (void);
     329  match gfc_match_backspace (void);
     330  match gfc_match_rewind (void);
     331  match gfc_match_flush (void);
     332  match gfc_match_inquire (void);
     333  match gfc_match_read (void);
     334  match gfc_match_wait (void);
     335  match gfc_match_write (void);
     336  match gfc_match_print (void);
     337  
     338  /* matchexp.cc.  */
     339  match gfc_match_defined_op_name (char *, int);
     340  match gfc_match_expr (gfc_expr **);
     341  
     342  /* module.cc.  */
     343  match gfc_match_use (void);
     344  match gfc_match_submodule (void);
     345  void gfc_use_modules (void);
     346  
     347  #endif  /* GFC_MATCH_H  */
     348