1 /* All matcher functions. 2 Copyright (C) 2003-2019 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.c. */ 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 *); 49 match gfc_match_st_label (gfc_st_label **); 50 match gfc_match_label (void); 51 match gfc_match_small_int (int *); 52 match gfc_match_small_int_expr (int *, gfc_expr **); 53 match gfc_match_name (char *); 54 match gfc_match_name_C (const char **buffer); 55 match gfc_match_symbol (gfc_symbol **, int); 56 match gfc_match_sym_tree (gfc_symtree **, int); 57 match gfc_match_intrinsic_op (gfc_intrinsic_op *); 58 match gfc_match_char (char); 59 match gfc_match (const char *, ...); 60 match gfc_match_iterator (gfc_iterator *, int); 61 match gfc_match_parens (void); 62 match gfc_match_type_spec (gfc_typespec *); 63 match gfc_match_member_sep(gfc_symbol *); 64 65 66 /* Statement matchers. */ 67 match gfc_match_program (void); 68 match gfc_match_pointer_assignment (void); 69 match gfc_match_assignment (void); 70 match gfc_match_if (gfc_statement *); 71 match gfc_match_else (void); 72 match gfc_match_elseif (void); 73 match gfc_match_event_post (void); 74 match gfc_match_event_wait (void); 75 match gfc_match_critical (void); 76 match gfc_match_fail_image (void); 77 match gfc_match_change_team (void); 78 match gfc_match_end_team (void); 79 match gfc_match_form_team (void); 80 match gfc_match_sync_team (void); 81 match gfc_match_block (void); 82 match gfc_match_associate (void); 83 match gfc_match_do (void); 84 match gfc_match_cycle (void); 85 match gfc_match_exit (void); 86 match gfc_match_lock (void); 87 match gfc_match_pause (void); 88 match gfc_match_stop (void); 89 match gfc_match_error_stop (void); 90 match gfc_match_continue (void); 91 match gfc_match_assign (void); 92 match gfc_match_goto (void); 93 match gfc_match_sync_all (void); 94 match gfc_match_sync_images (void); 95 match gfc_match_sync_memory (void); 96 match gfc_match_unlock (void); 97 98 match gfc_match_allocate (void); 99 match gfc_match_nullify (void); 100 match gfc_match_deallocate (void); 101 match gfc_match_return (void); 102 match gfc_match_call (void); 103 104 /* We want to use this function to check for a common-block-name 105 that can exist in a bind statement, so removed the "static" 106 declaration of the function in match.c. 107 108 TODO: should probably rename this now that it'll be globally seen to 109 gfc_match_common_name. */ 110 match match_common_name (char *name); 111 112 match gfc_match_common (void); 113 match gfc_match_block_data (void); 114 match gfc_match_namelist (void); 115 match gfc_match_module (void); 116 match gfc_match_equivalence (void); 117 match gfc_match_st_function (void); 118 match gfc_match_ptr_fcn_assign (void); 119 match gfc_match_case (void); 120 match gfc_match_select (void); 121 match gfc_match_select_type (void); 122 match gfc_match_type_is (void); 123 match gfc_match_class_is (void); 124 match gfc_match_where (gfc_statement *); 125 match gfc_match_elsewhere (void); 126 match gfc_match_forall (gfc_statement *); 127 128 /* Other functions. */ 129 130 gfc_common_head *gfc_get_common (const char *, int); 131 132 /* openmp.c. */ 133 134 /* OpenACC directive matchers. */ 135 match gfc_match_oacc_atomic (void); 136 match gfc_match_oacc_cache (void); 137 match gfc_match_oacc_wait (void); 138 match gfc_match_oacc_update (void); 139 match gfc_match_oacc_declare (void); 140 match gfc_match_oacc_loop (void); 141 match gfc_match_oacc_host_data (void); 142 match gfc_match_oacc_data (void); 143 match gfc_match_oacc_kernels (void); 144 match gfc_match_oacc_kernels_loop (void); 145 match gfc_match_oacc_parallel (void); 146 match gfc_match_oacc_parallel_loop (void); 147 match gfc_match_oacc_enter_data (void); 148 match gfc_match_oacc_exit_data (void); 149 match gfc_match_oacc_routine (void); 150 151 /* OpenMP directive matchers. */ 152 match gfc_match_omp_eos (void); 153 match gfc_match_omp_atomic (void); 154 match gfc_match_omp_barrier (void); 155 match gfc_match_omp_cancel (void); 156 match gfc_match_omp_cancellation_point (void); 157 match gfc_match_omp_critical (void); 158 match gfc_match_omp_declare_reduction (void); 159 match gfc_match_omp_declare_simd (void); 160 match gfc_match_omp_declare_target (void); 161 match gfc_match_omp_distribute (void); 162 match gfc_match_omp_distribute_parallel_do (void); 163 match gfc_match_omp_distribute_parallel_do_simd (void); 164 match gfc_match_omp_distribute_simd (void); 165 match gfc_match_omp_do (void); 166 match gfc_match_omp_do_simd (void); 167 match gfc_match_omp_flush (void); 168 match gfc_match_omp_master (void); 169 match gfc_match_omp_ordered (void); 170 match gfc_match_omp_ordered_depend (void); 171 match gfc_match_omp_parallel (void); 172 match gfc_match_omp_parallel_do (void); 173 match gfc_match_omp_parallel_do_simd (void); 174 match gfc_match_omp_parallel_sections (void); 175 match gfc_match_omp_parallel_workshare (void); 176 match gfc_match_omp_sections (void); 177 match gfc_match_omp_simd (void); 178 match gfc_match_omp_single (void); 179 match gfc_match_omp_target (void); 180 match gfc_match_omp_target_data (void); 181 match gfc_match_omp_target_enter_data (void); 182 match gfc_match_omp_target_exit_data (void); 183 match gfc_match_omp_target_parallel (void); 184 match gfc_match_omp_target_parallel_do (void); 185 match gfc_match_omp_target_parallel_do_simd (void); 186 match gfc_match_omp_target_simd (void); 187 match gfc_match_omp_target_teams (void); 188 match gfc_match_omp_target_teams_distribute (void); 189 match gfc_match_omp_target_teams_distribute_parallel_do (void); 190 match gfc_match_omp_target_teams_distribute_parallel_do_simd (void); 191 match gfc_match_omp_target_teams_distribute_simd (void); 192 match gfc_match_omp_target_update (void); 193 match gfc_match_omp_task (void); 194 match gfc_match_omp_taskgroup (void); 195 match gfc_match_omp_taskloop (void); 196 match gfc_match_omp_taskloop_simd (void); 197 match gfc_match_omp_taskwait (void); 198 match gfc_match_omp_taskyield (void); 199 match gfc_match_omp_teams (void); 200 match gfc_match_omp_teams_distribute (void); 201 match gfc_match_omp_teams_distribute_parallel_do (void); 202 match gfc_match_omp_teams_distribute_parallel_do_simd (void); 203 match gfc_match_omp_teams_distribute_simd (void); 204 match gfc_match_omp_threadprivate (void); 205 match gfc_match_omp_workshare (void); 206 match gfc_match_omp_end_critical (void); 207 match gfc_match_omp_end_nowait (void); 208 match gfc_match_omp_end_single (void); 209 210 /* decl.c. */ 211 212 match gfc_match_data (void); 213 match gfc_match_null (gfc_expr **); 214 match gfc_match_kind_spec (gfc_typespec *, bool); 215 match gfc_match_old_kind_spec (gfc_typespec *); 216 match gfc_match_decl_type_spec (gfc_typespec *, int); 217 218 match gfc_match_end (gfc_statement *); 219 match gfc_match_data_decl (void); 220 match gfc_match_formal_arglist (gfc_symbol *, int, int, bool = false); 221 match gfc_match_procedure (void); 222 match gfc_match_generic (void); 223 match gfc_match_function_decl (void); 224 match gfc_match_entry (void); 225 match gfc_match_subroutine (void); 226 match gfc_match_submod_proc (void); 227 match gfc_match_map (void); 228 match gfc_match_union (void); 229 match gfc_match_structure_decl (void); 230 match gfc_match_derived_decl (void); 231 match gfc_match_final_decl (void); 232 match gfc_match_type (gfc_statement *); 233 234 match gfc_match_implicit_none (void); 235 match gfc_match_implicit (void); 236 237 void gfc_set_constant_character_len (gfc_charlen_t, gfc_expr *, 238 gfc_charlen_t); 239 240 /* Matchers for attribute declarations. */ 241 match gfc_match_allocatable (void); 242 match gfc_match_asynchronous (void); 243 match gfc_match_automatic (void); 244 match gfc_match_codimension (void); 245 match gfc_match_contiguous (void); 246 match gfc_match_dimension (void); 247 match gfc_match_external (void); 248 match gfc_match_gcc_attributes (void); 249 match gfc_match_gcc_builtin (void); 250 match gfc_match_gcc_ivdep (void); 251 match gfc_match_gcc_novector (void); 252 match gfc_match_gcc_unroll (void); 253 match gfc_match_gcc_vector (void); 254 match gfc_match_import (void); 255 match gfc_match_intent (void); 256 match gfc_match_intrinsic (void); 257 match gfc_match_optional (void); 258 match gfc_match_parameter (void); 259 match gfc_match_pointer (void); 260 match gfc_match_protected (void); 261 match gfc_match_private (gfc_statement *); 262 match gfc_match_public (gfc_statement *); 263 match gfc_match_save (void); 264 match gfc_match_static (void); 265 match gfc_match_modproc (void); 266 match gfc_match_target (void); 267 match gfc_match_value (void); 268 match gfc_match_volatile (void); 269 270 /* decl.c. */ 271 272 /* Fortran 2003 c interop. 273 TODO: some of these should be moved to another file rather than decl.c */ 274 void set_com_block_bind_c (gfc_common_head *, int); 275 bool set_verify_bind_c_sym (gfc_symbol *, int); 276 bool set_verify_bind_c_com_block (gfc_common_head *, int); 277 bool get_bind_c_idents (void); 278 match gfc_match_bind_c_stmt (void); 279 match gfc_match_suffix (gfc_symbol *, gfc_symbol **); 280 match gfc_match_bind_c (gfc_symbol *, bool); 281 match gfc_get_type_attr_spec (symbol_attribute *, char*); 282 283 /* primary.c. */ 284 match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **); 285 match gfc_match_variable (gfc_expr **, int); 286 match gfc_match_equiv_variable (gfc_expr **); 287 match gfc_match_actual_arglist (int, gfc_actual_arglist **, bool = false); 288 match gfc_match_literal_constant (gfc_expr **, int); 289 290 /* expr.c -- FIXME: this one should be eliminated by moving the 291 matcher to matchexp.c and a call to a new function in expr.c that 292 only makes sure the init expr. is valid. */ 293 bool gfc_reduce_init_expr (gfc_expr *expr); 294 match gfc_match_init_expr (gfc_expr **); 295 296 /* array.c. */ 297 match gfc_match_array_spec (gfc_array_spec **, bool, bool); 298 match gfc_match_array_ref (gfc_array_ref *, gfc_array_spec *, int, int); 299 match gfc_match_array_constructor (gfc_expr **); 300 301 /* interface.c. */ 302 match gfc_match_abstract_interface (void); 303 match gfc_match_generic_spec (interface_type *, char *, gfc_intrinsic_op *); 304 match gfc_match_interface (void); 305 match gfc_match_end_interface (void); 306 307 /* io.c. */ 308 match gfc_match_format (void); 309 match gfc_match_open (void); 310 match gfc_match_close (void); 311 match gfc_match_endfile (void); 312 match gfc_match_backspace (void); 313 match gfc_match_rewind (void); 314 match gfc_match_flush (void); 315 match gfc_match_inquire (void); 316 match gfc_match_read (void); 317 match gfc_match_wait (void); 318 match gfc_match_write (void); 319 match gfc_match_print (void); 320 321 /* matchexp.c. */ 322 match gfc_match_defined_op_name (char *, int); 323 match gfc_match_expr (gfc_expr **); 324 325 /* module.c. */ 326 match gfc_match_use (void); 327 match gfc_match_submodule (void); 328 void gfc_use_modules (void); 329 330 #endif /* GFC_MATCH_H */ 331 332