#===------------------------------------------------------------------------===#
#
# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#
#===------------------------------------------------------------------------===#

# Some tests in the suite use non-standard features that are supported in
# gfortran but are not (and might never be) supported by flang. But if they are,
# they should be moved out of here.
file(GLOB UNSUPPORTED_FILES CONFIGURE_DEPENDS
  # --------------------------------------------------------------------------
  #
  # This tests the ability of gfortran to emit code with calling conventions
  # compatible with g77 and f2c. These will probably never be relevant to
  # flang.
  f2c_4.f90
  value_4.f90

  # --------------------------------------------------------------------------
  #
  # These test/use GNU extensions that are not currently supported by Flang.
  #
  # TODO: Some of the tests may actually just use a GNU intrinsic during the
  # process of testing some other functionality. It may be worthwhile to
  # include a version elsewhere in this repo which tests that same functionality
  # but without using any GNU extensions.
  #
  backtrace_1.f90                 # backtrace
  complex_intrinsic_1.f90         # complex
  dec_io_2.f90                    # fseek
  dec_io_2a.f90                   # fseek
  fgetc_1.f90                     # fgetc, fputc
  fgetc_2.f90                     # fgetc, fputc
  fseek.f90                       # fseek
  ftell_1.f90                     # ftell
  ftell_2.f90                     # ftell
  ftell_3.f90                     # ftell
  inquire_10.f90                  # getcwd
  int_conv_1.f90                  # int2, int8
  itime_idate_1.f                 # itime, idate
  itime_idate_2.f                 # itime, idate
  list_read_9.f90                 # fputc
  ltime_gmtime_1.f90              # time, ltime, gmtime
  ltime_gmtime_2.f90              # time, ltime, gmtime
  malloc_free_1.f90               # malloc, free
  mclock.f90                      # mclock, mclock8
  open_errors.f90                 # chmod, getuid
  open_new.f90                    # unlink
  secnds.f                        # secnds
  secnds-1.f                      # secnds
  stat_1.f90                      # stat, fstat, lstat, getuid, getgid
  stat_2.f90                      # stat, fstat, lstat, getuid, getgid
  transfer_array_intrinsic_2.f90  # rand

  # ---------------------------------------------------------------------------
  #
  # This test emits diagnostics in JSON format and checks the resulting JSON
  # diagnostic output.
  diagnostic-format-json-1.F90

  # "automatic" attribute extension not supported in parser
  auto_in_equiv_3.f90
  auto_in_equiv_7.f90
  # "static" attribute extension not supported in parser
  auto_in_equiv_6.f90
  # BESJ0 intrinsic function extension not supported
  bessel_2.f90
  # COMPLEX intrinsic function extension not supported (standard is CMPLX)
  boz_complex_2.f90
  # BOZ not allowed in FLOAT intrinsic function extension (which is supported) -- would be easy to add
  boz_float_2.f90
  # THIS_IMAGE(DISTANCE=), NUM_IMAGES(DISTANCE=), and NUM_IMAGES(FAILED=) extensions not supported
  coarray_this_image_1.f90
  coarray_this_image_2.f90
  # f18 requires extension Cray pointee to be a sequence type if derived
  cray_pointers_11.f90
  # Unimplemented in extension: assumed-size Cray pointee
  cray_pointers_6.f90
  # Unimplemented in extension: Cray pointer to function
  cray_pointers_9.f90
  # DEC "typed" bit intrinsics: BBTEST, BITEST, FLOATI, FLOATJ, BIEOR, &c.
  dec_intrinsic_ints.f90
  # COTAN extension intrinsic
  dec_math_4.f90
  # DEC old-style PARAMETER statement without parentheses
  dec_parameter_3.f90
  # TYPE statement as a synonym for PRINT
  dec_type_print.f90
  # Unsupported extension intrinsic procedures for POSIX APIs (chdir, symlnk, getpid, &c)
  g77_intrinsics_sub.f
  noreturn-3.f90
  # Unsupported: assignment of Hollerith to numeric (b = 4habcd), Hollerith in DATA for numeric, &c.
  hollerith5.f90
  hollerith_legacy.f90
  # Unsupported REALPART and IMAGPART extension intrinsic functions
  imag_1.f
  initialization_29.f90
  # Unsupported ETIME intrinsic procedure
  intrinsic_8.f90
  # Unsupported SIGNAL intrinsic procedure
  intrinsic_signal.f90
  # Unsupported directive !GCC$ attributes NO_ARG_CHECK :: buf   leads to semantic errors
  no_arg_check_1.f90
  no_arg_check_2.f90
  # Unsupported directive syntax  !dir$ unroll(2)
  pr88148.f90
  pr91496.f90
  # Unsupported extension: using .NOT., .OR., &c. on INTEGER
  pr88228.f90
  # Unsupported extension: BOZ output list item
  pr91650_2.f90
  # Unsupoorted extension: PRINT NAMELIST_NAME
  print_fmt_3.f
  # Unsupported extension intrinsic functions DACOSH, ZCOS, &c.
  specifics_2.f90
  # Unsupported predefined macro: __TIMESTAMP__
  wdate-time.F90
)

# These tests are skipped because they hit a 'not yet implemented' assertion
# in flang and thus fail to compile. They should be removed from here when the
# corresponding feature is implemented. Eventually, this variable should be
# removed altogether once all the missing features are implemented.
file(GLOB UNIMPLEMENTED_FILES CONFIGURE_DEPENDS
  # unimplemented: assumed rank in procedure interface.
  ISO_Fortran_binding_1.f90
  ISO_Fortran_binding_13.f90
  ISO_Fortran_binding_3.f90
  ISO_Fortran_binding_6.f90
  PR100029.f90
  PR100097.f90
  PR100098.f90
  PR100911.f90
  PR100915.f90
  PR93963.f90
  PR94022.f90
  PR95196.f90
  PR95352.f90
  PR96726.f90
  PR96727.f90
  PR96728.f90
  PR97046.f90
  assumed_rank_12.f90
  assumed_rank_18.f90
  assumed_rank_19.f90
  assumed_rank_20.f90
  assumed_rank_21.f90
  assumed_type_9.f90
  bind-c-contiguous-2.f90
  interface_49.f90
  is_contiguous_2.f90
  pr103366.f90
  pr84088.f90
  pr88932.f90
  pr92277.f90
  pr95828.f90
  select_rank_5.f90
  sizeof_4.f90
  sizeof_6.f90
  unlimited_polymorphic_1.f03

  # unimplemented: ASYNCHRONOUS in procedure interface
  assumed_rank_13.f90
  asynchronous_3.f03

  # unimplemented: assumed type in actual argument
  altreturn_10.f90 # bad Fortran, warnings are correct

  # unimplemented: procedure pointers
  compiler-directive_1.f90
  proc_ptr_1.f90
  recursive_check_6.f03

  # unimplemented: procedure components
  pr82253.f90
  proc_ptr_24.f90
  proc_ptr_comp_14.f90
  structure_constructor_11.f90

  # unimplemented: procedure pointer results
  pointer_check_5.f90
  pr39695_1.f90
  pr63797.f90

  # unimplemented: support for polymorphic types.
  allocate_alloc_opt_8.f90
  assumed_type_10.f90
  assumed_type_11.f90
  assumed_type_16.f90
  assumed_type_1.f90
  assumed_type_2.f90
  assumed_type_4.f90
  c_f_pointer_tests_5.f90
  class_3.f03
  class_45a.f03
  class_52.f90
  class_allocate_19.f03
  class_array_3.f03
  coarray_allocate_2.f08
  coarray_allocate_3.f08
  coarray_allocate_5.f08
  coarray_lib_alloc_2.f90
  coarray_lib_alloc_3.f90
  coarray_poly_5.f90
  der_io_5.f90
  implicit_class_1.f90
  intent_out_7.f90
  pointer_array_5.f90
  pr105501.f90
  pr48958.f90
  pr57987.f90
  pr63331.f90
  pr78092.f90
  ptr_func_assign_2.f08
  realloc_on_assign_20.f90
  realloc_on_assign_21.f90
  select_type_17.f03
  select_type_48.f90
  sizeof_5.f90
  storage_size_1.f08
  typebound_proc_15.f03
  unlimited_polymorphic_14.f90
  unlimited_polymorphic_3.f03
  unlimited_polymorphic_32.f90

  # unimplemented: BIND (C) internal procedure.
  ISO_Fortran_binding_19.f90
  array_reference_3.f90
  bind_c_char_4.f90
  bind_c_char_5.f90
  internal_dummy_4.f08

  # unimplemented: BIND(C) internal procedures:
  bind-c-char-descr.f90
  bind_c_usage_9.f03

  # unimplemented: BIND(C) module variable linkage
  bind_c_dts.f90
  bind_c_vars.f90
  binding_label_tests_10.f03
  binding_label_tests_13.f03
  global_vars_c_init.f90
  proc_ptr_8.f90

  # unimplemented: character array expression temp with dynamic length.
  char_length_13.f90
  char_result_13.f90
  mapping_3.f90
  pr77506.f90

  # unimplemented: allocatable components in derived type assignment
  pr50769.f90

  # unimplemented: passing dynamically optional argument to elemental procedures
  bounds_check_fail_2.f90
  elemental_optional_args_6.f90

  # unimplemented: io-control-spec contains a reference to a non-integer,
  # non-scalar, or non-variable
  fmt_nonchar_2.f90

  # unimplemented: BOZ
  boz_bge.f90
  nan_4.f90

  # unimplemented: coarray address
  coarray_39.f90
  coarray_dependency_1.f90

  # unimplemented: coarray allocation
  associate_26a.f90
  associate_26.f90
  associate_37.f90
  coarray_12.f90
  coarray_19.f90
  coarray_25.f90
  coarray_30.f90
  coarray_alloc_with_implicit_sync_1.f90
  coarray_alloc_with_implicit_sync_2.f90
  coarray_lib_alloc_1.f90
  coarray_lib_token_3.f90
  coarray_lock_7.f90
  coarray_poly_4.f90

  # unimplemented: coarray in procedure interface
  coarray_29_1.f90
  coarray_32.f90
  coarray_36.f
  coarray_37.f90
  coarray_45.f90
  coarray_allocate_4.f08
  coarray_lib_move_alloc_1.f90
  coarray_lib_this_image_1.f90
  coarray_lib_this_image_2.f90
  coarray_poly_6.f90
  coarray_poly_7.f90
  coarray_poly_8.f90
  class_optional_1.f90
  class_optional_2.f90
  coarray_41.f90
  submodule_26.f08

  # unimplemented: coarray reference
  coarray_lib_comm_1.f90

  # unimplemented: co_max
  coarray_collectives_4.f90
  coarray_collectives_5.f90
  coarray_collectives_6.f90

  # unimplemented: CriticalConstruct implementation
  coarray_2.f90
  coarray_critical_1.f90

  # unimplemented: SYNC IMAGES
  pr71706.f90

  # unimplemented: SYNC MEMORY
  coarray_sync_memory.f90

  # unimplemented: intrinsic: atan
  atan2_1.f90

  # unimplemented: intrinsic: co_broadcast
  coarray_collectives_17.f90

  # unimplemented: intrinsic: erfc_scaled
  erfc_scaled_1.f90
  erf_2.F90
  erf_3.F90

  # unimplemented: intrinsic: failed_images
  coarray_failed_images_1.f08

  # unimplemented: intrinsic: image_status
  coarray_image_status_1.f08

  # unimplemented: intrinsic: min and max for CHARACTER
  minmax_char_1.f90

  # unimplemented: intrinsic: num_images
  coarray_allocate_1.f90
  coarray_collectives_12.f90
  pr96737.f90

  # unimplemented: intrinsic: selected_char_kind
  selected_char_kind_1.f90
  selected_char_kind_4.f90

  # unimplemented: intrinsic: sind
  dec_math_2.f90

  # unimplemented: intrinsic: stopped_images
  coarray_stopped_images_1.f08

  # unimplemented: intrinsic: this_image
  coarray_40.f90
  coarray_43.f90
  coarray_allocate_10.f08
  coarray_allocate_7.f08
  coarray_allocate_8.f08
  coarray_allocate_9.f08
  coarray_alloc_comp_1.f08
  coarray_alloc_comp_2.f08
  coarray_collectives_18.f90
  coarray_fail_18.f90
  coarray_fail_st.f90
  coarray_ptr_comp_1.f08
  coarray_ptr_comp_2.f08
  coarray_send_by_ref_1.f08
  coarray_stat_2.f90
  coarray_stat_function.f90
  coarray_stat_whitespace.f90
  co_reduce_1.f90
  pr84784.f90
  random_init_3.f90
  random_init_4.f90
  random_init_5.f90
  random_init_6.f90

  # unimplemented: %VAL() intrinsic for arguments
  c_by_val_1.f
  c_by_val_3.f90
  pointer_check_12.f90

  # unimplemented: parameterized derived types
  dec_type_print_2.f03
  pdt_1.f03
  pdt_10.f03
  pdt_11.f03
  pdt_12.f03
  pdt_15.f03
  pdt_19.f03
  pdt_22.f03
  pdt_25.f03
  pdt_27.f03
  pdt_28.f03
  pdt_7.f03
  pdt_9.f03
  pr95826.f90

  # unimplemented: host associated derived type with length parameters
  pdt_31.f03

  # unimplemented: derived type components with non default lower bounds
  vax_structure_1.f90

  # unimplemented: asynchronous transfers not implemented in runtime
  f2003_io_1.f03

  # unimplemented: support for UNION
  dec_init_1.f90
  dec_init_3.f90
  dec_init_4.f90
  dec_structure_13.f90
  dec_structure_16.f90
  dec_structure_22.f90
  dec_union_1.f90
  dec_union_10.f90
  dec_union_11.f90
  dec_union_12.f90
  dec_union_2.f90
  dec_union_3.f90
  dec_union_4.f90
  dec_union_5.f90
  dec_union_6.f90
  dec_union_8.f90
  dec_union_9.f90
  pr78259.f90

  # unimplemented: VOLATILE in procedure interface
  volatile12.f90

  # unimplemented: no math runtime available for '[SYM]'
  large_real_kind_2.F90
  large_real_kind_3.F90
  large_real_kind_3.F90
  large_real_kind_form_io_1.f90
  norm2_3.f90
  pr96711.f90

  # unimplemented: calling character elemental function with
  # non constant character length (HLFIR regression).
  array_temporaries_3.f90
  pure_byref_1.f90

  # unimplemented: pointer assignments inside FORALL (HLFIR
  # regression)
  dependency_19.f90
  forall_3.f90
  pr49698.f90

  # unimplemented: compute elemental function result length parameters in HLFIR
  elemental_function_3.f90

  # These tests are NYI: support for polymorphic types; when polymorphic
  # type support is enabled by option, they pass.  Delete these when
  # polymorphic types are enabled by default.
  class_allocate_15.f90
  dtio_27.f90
  submodule_6.f08
)

# These tests are skipped because they cannot be compiled. Unlike the
# UnimplementedTests list, they do not fail with a "not yet implemented"
# assertion. The root cause for the failure could very well be one of those,
# but with the specific failure mode that is observed, it is not clear what
# missing feature is causing the compile-failure for these tests.
# If any of these tests use features that will never be supported, they should
# be moved to the UnsupportedTests list. If the cause of the failure of any
# tests in this list is addressed, they should be removed from here.
#
file(GLOB SKIPPED_FILES CONFIGURE_DEPENDS
  # --------------------------------------------------------------------------
  #
  # These tests are skipped because they trigger internal compiler errors.
  #

  # These still crash with flang-new when compiling in this test
  # environment, but are usually successful when run manually.
  ISO_Fortran_binding_8.f90
  ISO_Fortran_binding_12.f90
  binding_c_table_15_1.f03
  binding_label_tests_16.f03
  binding_label_tests_33.f90
  bind_c_coms.f90
  bind_c_dts_2.f03
  bind_c_usage_10.f03
  bind_c_usage_16.f03
  bind_c_usage_24.f90
  bind_c_usage_33.f90
  com_block_driver.f90
  c_char_tests_2.f03
  c_funloc_tests.f03
  c_funloc_tests_3.f03
  c_funloc_tests_4.f03
  c_f_pointer_shape_tests_5.f90
  c_f_pointer_tests.f90
  c_f_pointer_tests_4.f90
  c_kind_int128_test2.f03
  c_loc_test.f90
  c_loc_tests_2.f03
  c_loc_test_20.f90
  c_ptr_tests.f03
  c_ptr_tests_14.f90
  c_ptr_tests_19.f90
  c_ptr_tests_7.f03
  c_ptr_tests_8.f03
  c_sizeof_1.f90
  c_sizeof_5.f90
  c_size_t_test.f03
  deferred_character_10.f90
  iso_c_binding_rename_2.f03
  iso_fortran_binding_uint8_array.f90
  logical_temp_io.f90
  logical_temp_io_kind8.f90
  pointer_remapping_10.f90
  pr32627.f03
  pr35983.f90
  pr43866.f90
  pr71764.f90
  pr88611.f90
  print_c_kinds.f90
  proc_decl_17.f90
  proc_decl_2.f90
  repack_arrays_1.f90
  transfer_simplify_10.f90
  value_tests_f03.f90

  # lowering bugs (reported)
  c_char_tests.f03

  # Categorize and debug further
  bounds_check_17.f90 # needs -fcheck=bounds
  c_char_tests_3.f90 # runtime segfault
  c_funptr_1.f90 # needs "win32_types" module
  c_funptr_1_mod.f90 # needs "win32_types" module
  c_kind_params.f90 # runtime failure detected in test
  class_assign_4.f90 # NYI: vector subscripted polymorphic in HLFIR
  coarray_allocate_6.f08 # NYI: allocation of coarray
  coarray_alloc_comp_3.f08 # NYI: allocation of coarray
  coarray_alloc_comp_6.f08 # NYI: lowering coarray reference
  coarray_alloc_comp_7.f08 # NYI: lowering coarray reference
  coarray_alloc_comp_8.f08 # NYI: lowering coarray reference
  coarray_lib_alloc_4.f90 # NYI: allocation of coarray
  coarray_poly_9.f90 # NYI: allocation of coarray
  c_ptr_tests_10.f03 # valid compilation error on print of c_null_ptr (?)
  c_ptr_tests_9.f03 # valid compilation error on print of c_null_ptr (?)
  ISO_Fortran_binding_10.f90 # test reports failure at runtime
  ISO_Fortran_binding_18.f90 # runtime abort
  ISO_Fortran_binding_5.f90 # test reports failure at runtime
  ISO_Fortran_binding_7.f90 # test reports failure at runtime
  winapi.f90 # needs -lkernel32 and target *-*-cygwin*
  widechar_11.f90 # No ASSIGNMENT matches TYPE(c_ptr) and TYPE(__builtin_c_ptr)

  # error: 'fir.convert' op invalid type conversion
  c_char_tests_4.f90
  c_char_tests_5.f90

  # error: a function must have a type
  proc_decl_9.f90

  # error: not a constant derived type expression
  coarray_42.f90
  init_flag_10.f90
  pr68078.f90
  pr69739.f90
  typebound_call_32.f90

  # --------------------------------------------------------------------------
  #
  # These tests are skipped because they result in a compile error. This may
  # be the result of them exercising unsupported extensions that are not
  # supported in flang or some other reason. If there are multiple errors
  # in a single file, each distinct error message will be provided.

  # error: Entity in ALLOCATE statement must have the ALLOCATABLE or POINTER
  # attribute
  ISO_Fortran_binding_15.f90

  # error: Left-hand side of assignment may not be polymorphic unless
  # assignment is to an entire allocatable
  PR100040.f90
  PR100103.f90

  # error: The left-hand side of a pointer assignment is not definable
  PR100094.f90

  # error: Assumed-rank array cannot be forwarded to '[var]=' argument
  PR100906.f90
  PR100914.f90
  assumed_rank_10.f90
  assumed_rank_24.f90
  assumed_rank_9.f90
  associated_assumed_rank.f90
  assumed_rank_16.f90
  assumed_rank_8.f90

  # error: Pointer has rank 0 but target has rank [n]
  assumed_rank_1.f90

  # error: Actual argument variable length '1' does not match the expected
  # length '77'
  PR95214.f90

  # error: Dimension 1 of left operand has extent [m], but right operand has
  # extent [n]
  PR94289.f90
  assumed_rank_2.f90
  assumed_rank_22.f90
  assumed_rank_bounds_2.f90
  assumed_rank_bounds_3.f90
  assumed_rank_17.f90
  assumed_rank_bounds_1.f90

  # error: DIM=3 dimension is out of range for rank-1 array
  assumed_rank_3.f90
  assumed_rank_7.f90

  # error: Subscript [m] is less than lower bound [n] for dimension [d] of
  # array
  bounds_check_11.f90
  bounds_check_fail_1.f90

  # error: Assumed-size polymorphic array may not be associated with a
  # monomorphic dummy argument
  class_dummy_7.f90

  # error: '[var]' is an external procedure without the EXTERNAL attribute in
  # a scope with IMPLICIT NONE(EXTERNAL)
  assumed_type_13.f90
  bind-c-contiguous-3.f90

  # error: Assumed type argument requires an explicit interface
  assumed_type_2a.f90

  # error: No intrinsic or user-defined ASSIGNMENT(=) matches operand types
  # 'TYPE 1' and 'TYPE 2'
  dec-comparison-complex_1.f90
  dec-comparison-complex_2.f90
  dec-comparison-int_1.f90
  dec-comparison-int_2.f90
  dec-comparison-real_1.f90
  dec-comparison-real_2.f90
  dec_char_conversion_in_assignment_1.f90
  dec_char_conversion_in_assignment_2.f90
  dec_char_conversion_in_assignment_3.f90
  dec_char_conversion_in_assignment_5.f90
  dec_char_conversion_in_assignment_6.f90
  dec_char_conversion_in_assignment_7.f90
  hollerith2.f90
  hollerith4.f90
  hollerith6.f90
  pdt_23.f03

  # error: Operands of .AND. must be LOGICAL; have 'TYPE 1' and 'TYPE 2'
  dec_bitwise_ops_1.f90
  dec_bitwise_ops_2.f90

  # error: A BIND(C) object must have an interoperable type
  bind-c-contiguous-1.f90
  bind-c-contiguous-4.f90
  bind-c-contiguous-5.f90
  bind_c_char_10.f90
  char4_decl-2.f90

  # error: A dim= argument is required for 'size' when the array is
  # assumed-size
  class_dummy_6.f90

  # error: No explicit type declared for '[sym]'
  PR49268.f90
  boz_complex_3.f90
  char_result_19.f90
  chmod_1.f90
  chmod_2.f90
  chmod_3.f90
  coarray_16.f90
  cray_pointers_7.f90
  dec_math.f90
  dec_math_5.f90
  fmt_en.f90
  fmt_en_rd.f90
  fmt_en_rn.f90
  fmt_en_ru.f90
  fmt_en_rz.f90
  fmt_g0_6.f08
  fmt_pf.f90
  interface_12.f90
  result_in_spec_1.f90
  unlimited_polymorphic_13.f90

  # error: Shape of initialized object 'foo' must be constant
  pdt_26.f03

  # error: Kind type parameters of allocatable object must be the same as the
  # corresponding ones of SOURCE or MOLD expression
  pdt_3.f03

  # error: [sym] is not a variable
  cray_pointers_8.f90

  # error: Typeless (BOZ) not allowed for 'a=' argument
  boz_float_3.f90

  # error: Actual argument for 'i=' has bad type 'LOGICAL(1)'
  and_or_xor.f90

  # error: Argument of ALLOCATED() must be an ALLOCATABLE object or component
  select_rank_1.f90

  # error: 'coarray=' argument must have corank > 0 for intrinsic 'lcobound'
  bound_simplification_4.f90
  bound_simplification_5.f90

  # error: Coarray argument requires an explicit interface
  coarray_15.f90

  # error: 'mask=' argument has unacceptable rank 0
  coarray_13.f90

  # error: 'a' has corank 0, but coindexed reference has 1 cosubscripts
  coindexed_1.f90

  # error: 'temp_node_t' is PRIVATE in 'temp_node'
  constructor_6.f90

  # error: Type of Cray pointee 'dpte1' is a non-sequence derived type
  cray_pointers_2.f90

  # error: DATA statement value could not be converted to the type '[TYPE]'
  dec_char_conversion_in_data_1.f90
  dec_char_conversion_in_data_2.f90
  dec_char_conversion_in_data_4.f90
  dec_char_conversion_in_data_5.f90
  dec_char_conversion_in_data_6.f90
  hollerith.f90

  # error: Duplicate UNIT specifier
  dec_io_5.f90
  dec_io_6.f90

  # error: Value of named constant cannot be computed as a constant value
  array_initializer_1.f90
  pr83874.f90

  # error: In an elemental procedure reference with at least one array argument,
  # actual argument that corresponds to an INTENT(OUT) or INTENT(INOUT) dummy
  # argument must be an array
  impure_1.f08

  # error: Invalid STATUS value
  iomsg_1.f90
  iostat_2.f90
  pr20163-2.f

  # error: '[SYM]' was not declared a separate module procedure
  class_assign_1.f08
  submodule_31.f08

  # error: No operator .XOR. defined for LOGICAL(4) and LOGICAL(4)
  dec_logical_xor_1.f90

  # error: Value in structure constructor of type 'education' is incompatible
  # with component
  extends_2.f03

  # error: If a POINTER or ALLOCATABLE dummy or actual argument is polymorphic,
  # both must be so
  finalize_12.f90

  # error: Must be a scalar value, but is a rank-1 array
  impl_do_var_data.f90

  # error: Unlimited format item list must contain a data edit descriptor
  fmt_error_11.f03

  # error: Expected '[FMT]' edit descriptor '.[SOMETHING]' value
  fmt_missing_period.f
  fmt_missing_period_2.f

  # error: Positive scale factor k (from kP) and width d in a 'E' edit
  # descriptor must satisfy 'k < d+2'
  fmt_zero_digits.f90

  # error: '[SYM]' is not a known intrinsic procedure
  gamma_1.f90
  specifics_1.f90

  # error: Keyword may not appear in a reference to a procedure with an implicit
  # interface
  getenv_1.f90

  # error: Must be a constant value
  pr67140.f90
  pr89077.f90
  substr_simplify.f90
  transfer_simplify_12.f90

  # error: COMMON block was not lowered before its usage
  test_common_binding_labels.f03

  # error: Subscript 3 is greater than upper bound 2 for dimension 1 of array
  module_procedure_4.f90

  # error: '[SYM]' is not an object that can appear in an expression
  namelist_print_1.f

  # error: '[SYM]' is already declared in this scoping unit
  namelist_use.f90

  # error: Actual argument type '[TYPE1]' is not compatible with dummy argument
  # type '[TYPE2]'
  no_arg_check_2a.f90
  pdt_2.f03

  # error: '[SYM]' not found in module 'iso_fortran_env'
  quad_2.f90
  quad_3.f90
  team_change_1.f90
  team_end_1.f90
  team_form_1.f90
  team_number_1.f90

  # error: 'mask=' argument has unacceptable rank 0
  pdt_20.f03

  # error: literal is too large
  pr92629.f90

  # error: In assignment to procedure pointer 'funct', the target is not a
  # procedure or procedure pointer
  proc_ptr_47.f90

  # error: '[SYM]' may not be a procedure as it is in a COMMON block
  proc_ptr_common_1.f90

  # error: Procedure pointer may not be ELEMENTAL
  proc_ptr_comp_45.f90

  # error: Procedure pointer associated with result of reference to function
  # that is an incompatible procedure pointer
  proc_ptr_result_1.f90

  # error: Actual argument associated with procedure pointer dummy argument
  # must be a POINTER unless INTENT(IN)
  proc_ptr_result_6.f90

  # error: Must have '[TYPE1]' type, but is '[TYPE2]'
  real_index_1.f90

  # error: error: Invalid CONVERT value
  record_marker_3.f90

  # error: Result of pure function may not have an impure FINAL subroutine
  finalize_51.f90

  # --------------------------------------------------------------------------
  #
  # These tests are skipped for a variety of reasons that don't fit well in
  # any of the previous categories

  # The test calls the subroutine should_not_fail(). The intention seems to be
  # for the call to should_not_fail() to be dead-code eliminated. It is guarded
  # by a conditional with a call to selected_real_kind() that should evaluate
  # to false at compile-time. This is not being eliminated resulting in an
  # "undefined symbol" error at link time.
  #
  selected_real_kind_2.f90

  # For some reason, when building these tests, LLVM-IR is generated instead of
  # of an object file.
  save_6.f90
  shape_9.f90

  # --------------------------------------------------------------------------
  #
  # These tests are skipped because flang cannot parse these files. This could
  # be because of the use of non-standard syntax, but they will need to be
  # checked to be sure.
  #
  auto_in_equiv_1.f90
  auto_in_equiv_2.f90
  automatic_1.f90
  dec-comparison-character_1.f90
  dec-comparison-character_2.f90
  dec_exp_1.f90
  dec_format_empty_item_1.f
  dec_format_empty_item_2.f
  dec_io_1.f90
  dec_parameter_1.f
  dec_parameter_2.f90
  dec_static_1.f90
  dec_static_2.f90
  dec_structure_10.f90
  dec_structure_5.f90
  dec_structure_7.f90
  fmt_error_10.f
  fmt_error_9.f
  substr_9.f90

  # --------------------------------------------------------------------------
  #
  # These tests are skipped because they cause flang to crash.

  # Assertion `ty.isa<fir::RecordType>()' failed
  c_assoc.f90
  c_f_pointer_complex.f03
  c_f_pointer_logical.f03
  c_f_pointer_shape_tests_2.f03
  c_f_pointer_shape_tests_4.f03
  equiv_7.f90
  iso_c_binding_rename_1.f03
  test_only_clause.f90

  # --------------------------------------------------------------------------
  #
  # These tests require libquadmath which is not built by default. They are
  # disabled until the test suite's configure script is fixed to allow
  # conditionally enabling them if libquadmath is available.

  quad_1.f90
  internal_dummy_3.f08

  # --------------------------------------------------------------------------
  #
  # These tests are skipped because they fail on AArch64 but not x86. These
  # will be disabled until we allow tests to be selectively enabled on certain
  # platforms.

  large_integer_kind.f90
  oldstyle_5.f
  maxlocval_1.f90
  pr91497.f90

  alloc_comp_class_4.f03 # TODO: This also fails on X86, so recategorize
  unpack_bounds_1.f90    # TODO: This also fails on X86, so recategorize

  # --------------------------------------------------------------------------
  #
  # These are skipped almost certainly because of a bug in the way multi-file
  # compile tests are built by the test-suite. This almost certainly has nothing
  # to do with flang, but they will be skipped until the test suite build
  # scripts are fixed.

  bind_c_array_params_3.f90
  class_4a.f03
  global_vars_f90_init.f90
  matmul_bounds_14.f
  namelist_83.f90
  pr37287-1.f90
  pr77420_3.f90
  pr93524.f90
  public_private_module_3.f90
  static_linking_1.f

  # ----------------------------------------------------------------------------
  #
  # These files are only intended to be run on AArch64, but we don't currently
  # process the target attribute, so these are disabled everywhere. When the
  # DejaGNU target attribute is handled correctly, these should be removed from
  # here.
  pr88833.f90

  # ----------------------------------------------------------------------------
  #
  # These tests have a -J flag but the build system adds a -J of its own and
  # exactly one is allowed. If the build system is changed, these can be removed
  # from here.
  include_14.f90
  include_15.f90
  include_16.f90
  include_17.f90
  include_18.f90
  include_19.f90
  include_20.f90
  include_8.f90
)

# These tests are disabled because they fail when they are expected to pass.
file(GLOB FAILING_FILES CONFIGURE_DEPENDS
  # ---------------------------------------------------------------------------
  #
  # These tests fail at runtime when they should pass. are likely a result of
  # unimplemented features in the runtime, but they could also be bugs. If any
  # will never pass with flang (if they use unsupported extensions for instance),
  # they should be added to the Unsupported list.

  # Tests that "fail" because they should fail
  assign_2.f90 # j=5; goto j
  error_stop_1.f08 # ERROR STOP stops program
  stop_shouldfail.f90 # STOP stops program

  # require further analysis
  bounds_check_10.f90
  bounds_check_7.f90
  bounds_check_array_ctor_1.f90
  bounds_check_array_ctor_2.f90
  bounds_check_array_ctor_6.f90
  bounds_check_array_ctor_7.f90
  bounds_check_array_ctor_8.f90
  bounds_check_fail_4.f90
  bounds_check_strlen_1.f90
  bounds_check_strlen_2.f90
  bounds_check_strlen_3.f90
  bounds_check_strlen_4.f90
  bounds_check_strlen_5.f90
  bounds_check_strlen_7.f90
  char_bounds_check_fail_1.f90
  char_pointer_assign_4.f90
  char_pointer_assign_5.f90
  check_bits_1.f90 # requires -fcheck=bits to catch ISHFTC runtime error
  check_bits_2.f90 # requires -fcheck=bits to catch ISHFTC runtime error
  internal_dummy_2.f08 # causes flang-new to crash in the backend (llvm-project/issues/76927)
  cr_lf.f90 # shenanigans with CR characters
  dollar_edit_descriptor_4.f # TODO: (i3,$) format shouldn't advance record when looping
  list_read_11.f90 # more CR character shenanigans
  matmul_bounds_10.f90
  matmul_bounds_2.f90
  matmul_bounds_3.f90
  matmul_bounds_4.f90
  matmul_bounds_5.f90
  matmul_bounds_8.f90
  maxlocval_2.f90
  maxlocval_4.f90
  merge_bits_2.F90
  merge_char_3.f90
  module_nan.f90
  namelist_87.f90
  nan_2.f90 # depend on MIN/MAX(1.,NaN) folding to 1.; f18 & Intel return NaN.
  negative_unit_int8.f # depends on 64-bit unit numbers or something?
  no_range_check_1.f90
  nosigned_zero_2.f90 # only works with a -fno-sign-zero option
  open_access_append_2.f90 # expects warning for OPEN(ACCESS='APPEND'), gets one
  open_errors_3.f90 # same file open on multiple units - valid in F'2018?
  open_status_2.f90 # TODO: support OPEN(STATUS='UNKNOWN')?  research
  pad_source_3.f # depends on -fno-pad-source option
  pad_source_4.f # depends on -ffixed-line-length-none option
  pad_source_5.f # depends on -ffixed-line-length-0 option
  pr12884.f
  pr17286.f90
  pr17706.f90 # depends on -fno-sign-zero option
  pr59700.f90
  pr71523_2.f90
  pr96436_3.f90
  pr96436_4.f90
  pr96436_5.f90
  pr96436_6.f90
  pr96436_7.f90
  pr96436_8.f90
  pr96436_9.f90
  pr96436_10.f90
  promotion_3.f90
  promotion_4.f90
  read_5.f90
  read_bang4.f90
  read_bang.f90
  read_eof_all.f90
  real4-10-real8-10.f90
  real4-10-real8-16.f90
  real4-10-real8-4.f90
  real4-10.f90
  real4-16-real8-10.f90
  real4-16-real8-16.f90
  real4-16-real8-4.f90
  real4-16.f90
  real4-8-real8-10.f90
  real4-8-real8-16.f90
  real4-8-real8-4.f90
  real4-8.f90
  real8-10.f90
  real8-16.f90
  real8-4.f90
  real_const_3.f90
  recursive_check_11.f90
  recursive_check_13.f90
  recursive_check_7.f90
  recursive_check_9.f90
  round_3.f08
  selected_kind_1.f90
  short_circuiting_3.f90
  streamio_13.f90
  streamio_17.f90
  system_clock_3.f08
  transpose_2.f90
  unf_io_convert_4.f90
  unf_read_corrupted_1.f90
  unf_short_record_1.f90
  unformatted_subrecord_1.f90
  where_2.f90
  widechar_IO_4.f90
  zero_sized_1.f90
  elemental_function_2.f90

  # These tests fail at runtime on AArch64 (but pass on x86). Disable them
  # anyway so the test-suite passes by default on AArch64.
  entry_23.f
  findloc_8.f90

  # These tests fail on Ubuntu because of a bug in the not utility. At least
  # some of these should work once the issue with not has been fixed.
  #
  # https://github.com/llvm/llvm-test-suite/pull/102#issuecomment-1980674221
  #
  abort_shouldfail.f90
  all_bounds_1.f90
  alloc_comp_class_4.f03
  allocate_error_5.f90
  allocate_error_6.f90
  allocate_with_source_23.f03
  bounds_check_12.f90
  bounds_check_array_ctor_4.f90
  bounds_check_fail_3.f90
  cshift_bounds_3.f90
  cshift_bounds_4.f90
  deallocate_error_2.f90
  dim_sum_1.f90
  dim_sum_2.f90
  dim_sum_3.f90
  do_check_1.f90
  endfile_3.f90
  eoshift_bounds_1.f90
  error_format.f90
  fmt_error_4.f90
  fmt_error_5.f90
  inline_matmul_15.f90
  internal_write_1.f90
  large_unit_1.f90
  matmul_5.f90
  matmul_bounds_11.f90
  matmul_bounds_13.f90
  matmul_bounds_15.f
  matmul_bounds_16.f
  matmul_bounds_7.f90
  matmul_bounds_9.f90
  maxloc_bounds_1.f90
  maxloc_bounds_2.f90
  maxloc_bounds_3.f90
  maxloc_bounds_4.f90
  maxloc_bounds_6.f90
  maxloc_bounds_7.f90
  maxloc_bounds_8.f90
  open_errors_2.f90
  open_new_segv.f90
  PR100136.f90
  pack_bounds_1.f90
  pointer_check_11.f90
  pointer_check_1.f90
  pointer_check_2.f90
  pointer_check_3.f90
  pointer_check_4.f90
  pointer_check_6.f90
  pr92050.f90
  random_3.f90
  random_5.f90
  repeat_1.f90
  reshape_order_1.f90
  reshape_order_2.f90
  reshape_order_3.f90
  reshape_order_4.f90
  spread_bounds_1.f90
  unpack_bounds_1.f90
  unpack_bounds_2.f90
  unpack_bounds_3.f90
  write_check.f90

  # ---------------------------------------------------------------------------
  #
  # These tests are expected to raise a runtime error, but currently don't.

  allocate_error_1.f90
  cshift_bounds_2.f90
  deallocate_error_1.f90
  do_check_2.f90
  do_check_3.f90
  do_check_4.f90
  do_check_11.f90
  do_check_12.f90
  endfile_4.f90
  fmt_g0_2.f08
  inline_sum_bounds_check_1.f90
  inline_sum_bounds_check_2.f90
  io_real_boz2.f90
  io_real_boz_4.f90
  io_real_boz_5.f90
  no_unit_error_1.f90
  pointer_check_10.f90
  pointer_remapping_6.f08

  # ---------------------------------------------------------------------------
  #
  # Compilation of these tests is expected to fail, but it succeeds instead.

  binding_label_tests_26b.f90
  test_common_binding_labels_2_main.f03

  # Tests that exercise gfortran's ability to set -std=f95 and then see errors on newer features
  abstract_type_1.f90
  alloc_comp_constraint_7.f90
  alloc_comp_std.f90
  allocatable_scalar_2.f90
  allocate_alloc_opt_5.f90
  argument_checking_14.f90
  argument_checking_2.f90
  array_constructor_38.f90
  array_constructor_type_13.f90
  assign_3.f90
  associate_2.f95
  asynchronous_2.f90
  block_3.f90
  blockdata_5.f90
  blockdata_6.f90
  boz_10.f90
  boz_7.f90
  byte_1.f90
  common_19.f90
  common_9.f90
  constructor_4.f90
  constructor_7.f90
  dup_save_2.f90
  equiv_constraint_1.f90
  equiv_constraint_2.f90
  finalize_6.f90
  fmt_error_8.f
  fmt_g0_3.f08
  implied_shape_2.f90
  import2.f90
  initialization_13.f90
  initialization_16.f90
  initialization_30.f90
  initialization_4.f90
  inquire_iolength.f90
  interface_15.f90
  interface_abstract_2.f90
  intrinsic_param_1.f90
  intrinsic_std_1.f90
  intrinsic_std_4.f90
  io_constraints_10.f90
  io_constraints_11.f90
  iostat_3.f90
  logint_2.f
  minmax_char_2.f90
  module_procedure_double_colon_2.f90
  namelist_34.f90
  namelist_35.f90
  namelist_3.f90
  namelist_5.f90
  namelist_63.f90
  namelist_assumed_char.f90
  newunit_2.f90
  pointer_assign_6.f90
  pointer_intent_2.f90
  pointer_remapping_1.f90
  pr107423.f90
  pr77978_1.f90
  pr95373_1.f90
  private_type_10.f90
  private_type_12.f90
  private_type_1.f90
  private_type_2.f90
  private_type_4.f90
  private_type_9.f90
  proc_decl_4.f90
  proc_ptr_37.f90 # https://github.com/llvm/llvm-project/issues/73215
  proc_ptr_46.f90 # https://github.com/llvm/llvm-project/issues/73215
  protected_3.f90
  selected_char_kind_3.f90
  spread_init_expr_2.f90
  structure_constructor_9.f90
  system_clock_2.f90
  use_6.f90
  used_before_typed_4.f90
  value_2.f90
  volatile2.f90
  warnings_are_errors_1.f90

  # -std=f2003 tests to detect Fortran 2008 features
  bessel_3.f90
  bind_c_array_params.f03
  bind_c_bool_1.f90
  binding_label_tests_20.f90
  c_funloc_tests_5.f03
  c_kind_int128_test1.f03
  c_loc_test_19.f90
  c_loc_test_21.f90
  c_loc_tests_10.f03
  c_loc_tests_4.f03
  char_length_1.f90
  coarray_5.f90
  common_20.f90
  complex_intrinsic_4.f90
  complex_intrinsic_6.f90
  contains_empty_1.f03
  contains.f90
  contiguous_2.f90
  finalize_2.f03
  generic_26.f90
  iall_iany_iparity_2.f90
  intrinsic_std_5.f03
  io_constraints_12.f90
  module_procedure_double_colon_3.f90
  norm2_4.f90
  parity_3.f90
  pointer_remapping_2.f03
  pointer_target_2.f90
  pr95373_2.f90
  ptr-func-2.f90
  pure_formal_2.f90
  rank_2.f90
  type_decl_2.f90
  typebound_proc_3.f03

  # -std=f2008 tests to detect Fortran 2018 features
  bind_c_usage_28.f90
  c_loc_tests_11.f03
  coarray_collectives_2.f90
  implicit_14.f90
  pr90290.f90
  pr91564.f90
  rank_3.f90

  # Requires behaviour specific to -std=f2008 and fails with -std=f2018.
  finalize_38a.f90

  # Tests that use -std=... to enable checks that no longer apply in modern Fortran.
  # Module variable with derived type default initialization requires explicit SAVE
  default_initialization_1.f90
  save_4.f90
  # ERROR STOP in pure procedure
  error_stop_4.f90
  # EXIT outside DO
  exit_5.f03
  # New features in ISO_FORTRAN_ENV & ISO_C_BINDING
  iso_c_binding_compiler_2.f90
  iso_c_binding_param_1.f90
  iso_fortran_env_6.f90

  # Tests that are not errors, and compile just fine with flang
  constant_shape.f90
  continuation_2.f90
  equiv_pure.f90 # gfortran's error is inappropriate for this test
  finalize_9.f90
  func_decl_3.f90
  initialization_20.f90
  initialization_24.f90
  interface_7.f90
  intrinsic_short-long.f90
  parameter_array_init_6.f90
  pr19936_1.f90 # ac-do-variables are their own entities
  pr35031.f90 # ENTRY in ELEMENTAL
  pr43996.f90
  pr70070.f90
  pr70853.f90
  pr71799.f90
  pr88328.f90
  recursive_check_1.f # RECURSIVE is now default
  recursive_check_2.f90
  string_1_lp64.f90
  substr_10.f90

  # Tests that expect nonconformant IS_CONTIGUOUS answers with zero size arrays.
  is_contiguous_1.f90
  is_contiguous_3.f90

  # Flang allows a redundant 'contiguous' attribute on scalars and on arrays
  # that are simply contiguous (not pointers or assumed-shape/rank).
  contiguous_6.f90
  contiguous_9.f90
  pr95503.f90

  # Tests that are errors in gfortran but for which we emit adequate warnings; might need to use -pedantic to see them
  achar_3.f90
  achar_5.f90
  argument_checking_19.f90
  argument_checking_20.f90
  argument_checking_22.f90
  argument_checking_24.f90
  arith_divide.f
  arith_divide_no_check.f
  arithmetic_overflow_1.f90
  associate_50.f90
  associated_3.f90
  bessel_5_redux.f90
  bounds_temporaries_1.f90
  dec_loc_rval_3.f03
  do_4.f
  do_check_5.f90
  do_subscript_6.f90
  dollar_sym_1.f90
  dollar_sym_3.f
  entry_22.f90
  enum_8.f90
  error_recovery_4.f90
  ichar_1.f90
  int_conv_2.f90
  integer_exponentiation_4.f90
  interface_21.f90
  interface_30.f90
  interface_33.f90
  interface_46.f90
  invalid_contains_1.f90
  invalid_contains_2.f90
  invalid_procedure_name.f90 # but maybe should be error instead of warning, as in all other compilers
  iso_fortran_env_4.f90
  nearest_5.f90
  pr103259.f90
  pr16433.f
  pr58027.f90
  pr77460.f90
  pr77978_2.f90
  pr84734.f90
  pr86045.f90
  pr91714.f90
  pr92993.f90
  pr95611.f90
  pr95614_1.f90
  pr95614_2.f90
  pr95882_3.f90
  recursive_check_3.f90
  return_1.f90
  size_kind_3.f90
  string_3.f90
  string_3_lp64.f90
  warn_conversion.f90
  whole_file_1.f90
  whole_file_2.f90

  # Tests that used to be hard errors, are now warnings, need -pedantic to
  # observe them
  interface_6.f90
  interop_params.f03
  iso_c_binding_class.f03
  pr85877.f90

  # Tests that would be errors if we supported options to enable checks
  dec_structure_24.f90
  line_length_5.f90
  module_private_1.f90

  # Tests of options that need to be in the test configuration
  include_6.f90

  # Missed errors (though not required by a numbered standard constraint)
  # ALLOCATE(entity, stat=something in entity)
  allocate_alloc_opt_11.f90
  # Same object appears more than once in ALLOCATE
  allocate_error_2.f90
  allocate_error_4.f90
  # Character length mismatch between definition and external in same file
  auto_char_len_4.f90
  # Non-conformable array operands -- needs symbolic evaluation to see
  bounds_check_18.f90
  # BTEST position argument checking
  btest_1.f90
  # Not catching EQUIVALENCE of default-initialized derived type object with object in COMMON
  equiv_constraint_9.f90
  # MASKL argument checking
  masklr_3.f90
  # MODULO(x,0) argument checking
  modulo_check.f90
  # MOVE_ALLOC with overlapping arguments
  move_alloc_17.f90
  # MVBITS argument checking
  mvbits_9.f90
  # INQUIRE(UNIT=-1, ...)
  negative_unit_check.f90
  # Small RANDOM_SEED(GET=/PUT=) arrays
  random_seed_1.f90
  random_seed_4.f90
  # RESHAPE(SOURCE=) array is too small
  reshape_source_size_1.f90

  # Extensions, intentionally not errors, but should maybe elicit a portability warning
  # BIND(C,NAME=) name same as module
  binding_label_tests_29.f90
  # BIND(C,NAME=) names are case sensitive in f18
  binding_label_tests_34.f90
  # COMMON block name clashes with local entity
  common_7.f90
  common_8.f90
  # No option needed to enable Cray pointers
  cray_pointers_3.f90
  # D lines default to comments, no need to use option to make that happen
  d_lines_4.f
  dec_d_lines_3.f
  # Complex components (%RE and %IM) and substrings are allowed in DATA statements (need to document extension)
  data_inquiry_ref.f90
  data_substring.f90
  # ELEMENTAL subprograms may not have dummy procedures
  elemental_args_check_2.f90
  elemental_args_check_4.f90
  # Construct labels can conflict with local names
  host_assoc_types_1.f90
  # Names with leading underscores
  invalid_name.f90
  # Long lines in free form source
  line_length_6.f90
  line_length_8.f90
  line_length_9.f90
  # NAMELIST before declaration of object in group
  namelist_98.f90
  # BOZ in structure constructor
  pr93604.f90
  # USE'd module name used as local entity
  pr95880.f90
  use_28.f90
  # Forward reference to procedure name in PROCEDURE(...)
  proc_decl_11.f90
  # Statement function with argument or result with rank > 0
  statement_function_3.f
  # Useless SUBMODULE
  submodule_21.f08
  # Initial tab in fixed form means five leading blanks
  tab_continuation.f
  # DOUBLE COMPLEX
  type_decl_1.f90

  # gfortran warnings and optional errors that we miss & should fix
  # "bytea" statement for "byte a"
  byte_4.f90
  # DO index variable modified in call to internal procedure
  do_check_13.f90
  do_check_16.f90

  # Not relevant to f18
  # Tests "!GCC$ attributes stdcall, fastcall::test"
  compiler-directive_2.f
  # unsupported COMPLEX extension intrinsic function
  complex_intrinsic_2.f90
  # !GCC$ unroll
  directive_unroll_5.f90
  # Tests "!GCC$ attributes weak :: x"
  weak-3.f90

  # Probable bugs
  # ["a", "ab"]
  array_constructor_28.f03
  bounds_check_array_ctor_3.f90
  bounds_check_array_ctor_5.f90
  # C_SIZEOF() argument must be an interoperable type
  c_sizeof_6.f90
  # External should not have same name as COMMON
  common_15.f90
  # Not catching lack of label actual argument for alternate return dummy
  do_check_19.f90
  # Not catching use of ENTRY-only dummy argument in a specification expression
  entry_dummy_ref_1.f90
  # Parent component of extended derived type with PRIVATE default must be PRIVATE
  extends_10.f03
  # Old-style initializer on declaration of dummy argument
  oldstyle_2.f90
  # Function result may not be a coarray
  pr104210.f90
  # integer, parameter :: dp = kind(1.0_dp)
  recursive_parameter_1.f90
  # Statement function cannot be a dummy argument
  stfunc_2.f90
  # Statement function argument implicit type doesn't match later explicit type
  stfunc_3.f90
  # Valid parser failure, could have better error recovery
  use_29.f90
  # Assumed-length CHARACTER cannot be VALUE
  value_5.f90
  # No return type mismatch warning
  whole_file_34.f90
  # No interface mismatch warning on call to implicit interface expecting alternate returns
  whole_file_3.f90

  # Test configuration problems
  # Needs to be compiled as class_4[abc].f03 due to modules -- then compiles
  class_4b.f03
  class_4c.f03
  # Needs to be compiled as coarray_29_[12].f90 due to modules -- then hits NYI in lowering "coarray in procedure interface"
  coarray_29_2.f90
  # Needs to be compiled as coarray_35{,a}.f90 -- then hits NYI in lowering "intrinsic: this_image"
  coarray_35a.f90
  # Needs to be compiled with "-ed" or whatever flang-new uses to enable D lines (Fortran::common::LanguageFeature::OldDebugLines); GNU uses "-fd-lines-as-code"
  dec_d_lines_1.f
  d_lines_2.f
  # Needs -fxor-operator
  dec_logical_xor_2.f90
  # Needs to be compiled as Fortran/gfortran/regression/namelist_83{,_2}.f90 due to modules -- then compiles
  namelist_83_2.f90
  # Needs to be compiled as Fortran/gfortran/regression/pr77420_[34].f90 due to modules -- then compiles
  pr77420_4.f90
  # Needs to be compiled as Fortran/gfortran/regression/public_private_module_[34].f90
  public_private_module_4.f90

  # Compiler bugs that should be fixed
  # D lines confuse continuation line detection
  d_lines_3.f
  # "0include" not recognized as INCLUDE line with 0 in column 6
  include_12.f
  # Invalid specification expression: reference to impure function 'iargc' -- might as well consider it to be pure
  pr71085.f90
  # No explicit type declared for 'f'
  pr91945.f90
  # error: No explicit type declared for 'arg4'
  unused_artificial_dummies_1.f90

  # Valid errors
  # Valid out-of-bounds subscript errors, are warnings in gfortran
  bounds_check_3.f90
  # Valid errors about mismatching actual/dummy character lengths; are warnings in gfortran
  char_length_3.f90
  # Valid error: 'x' may not be a local variable in a pure subprogram  because: 'x' is polymorphic in a pure subprogram
  class_49.f90
  class_74.f90
  # Valid error: Coindexed polymorphic object may not be associated with a polymorphic dummy argument 'x='
  class_dummy_4.f03
  # Valid error: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  coarray_atomic_6.f90
  # Valid error: The event-variable must be a coarray
  coarray_event_1.f08
  # Valid error: ALLOCATABLE coarray '...' may not be associated with INTENT(OUT) dummy argument '...='
  coarray_lib_token_2.f90
  intent_out_11.f90
  # Valid error "The type of 'n' has already been implicitly declared" on   "implicit NONE; integer :: a(n); integer (kind=1), intent(in) :: n"
  directive_unroll_1.f90
  directive_unroll_2.f90
  directive_unroll_3.f90
  directive_unroll_4.f90
  # Valid error: Result of ENTRY is not compatible with result of containing function
  entry_17.f90
  # Just bad syntax:   READ ('(') // 'A)', var  -- note transposed ) and final quote
  fmt_read_3.f90
  # Valid error: Label '99' is in a construct that prevents its use as a branch target here
  goto_8.f90
  # These tests attempt to print the value of the private component of a C_PTR.
  init_flag_17.f90
  c_ptr_tests_16.f90
  # Valid error: Generic 'ambiguous' may not have specific procedures 'f' and 'f' as their interfaces are not distinguishable
  interface_1.f90
  # Valid error: Generic 'generic' may not have specific procedures 'foo' and 'bar' as their interfaces are not distinguishable
  interface_8.f90
  # Valid error: Dimension 1 of left-hand side has extent 2, but right-hand side has extent 3
  iso_fortran_env_7.f90
  # Valid error: Invalid specification expression: reference to local entity '...'
  pr101026.f
  pr101267.f90
  pr78061.f
  pr79315.f90
  pr95090.f90
  # Valid error: An array component of an interoperable type must have at least one element
  pr105954.f90
  # Bogus error: 'dcdx' is not a callable procedure
  pr41011.f
  # Valid error: Must have INTEGER type, but is REAL(4)   on implicit real-valued DO indices being used as subscripts
  pr41928.f90
  # Valid error: DATA statement initializations affect 'i(1_8,2_8)' more than once
  pr49540-2.f90
  # Valid error: A variable with BIND(C) attribute may only appear in the specification part of a module
  pr67900.f90
  # Valid error: Label '1000' is not distinct
  pr69554-1.F90
  pr69554-2.F90
  # Valid error: Subscript value (3) is out of range on dimension 1 in reference to a constant array value
  pr71935.f90
  # Valid error: Return type of function 'c' does not match return type of the corresponding interface body
  pr83113.f90
  # Valid error: 'v' is already declared in this scoping unit
  pr84957.f90
  # Valid error: Procedure 'foo' is recursively defined.  Procedures in the cycle: 'foo', 'r1'
  recursive_interface_1.f90
  recursive_interface_2.f90
  # Valid error: Actual argument associated with POINTER dummy argument 'thenode=' must also be POINTER unless INTENT(IN)
  select_type_30.f03
  # Valid error: INTEGER stop code must be of default kind
  stop_2.f
  # Valid error: 'bar' is a MODULE procedure which must be declared within a MODULE or SUBMODULE
  submodule_24.f08
  # Valid error: Values in array constructor must have the same declared type when no explicit type appears
  zero_sized_12.f90
  # Valid error: ASSOCIATE entities are not pointers
  associate_42.f90

  # Not yet implemented in evaluate / semantics
  # IMAGE_INDEX not (yet) an intrinsic function
  coarray_11.f90
  pr104330.f90
  # ATOMIC_ADD is not (yet) a known intrinsic procedure
  coarray_atomic_4.f90
  coarray_atomic_5.f90
  # CO_REDUCE is not (yet) a known intrinsic procedure
  coarray_collectives_11.f90
  coarray_collectives_15.f90
  coarray_collectives_16.f90
  # Unsupported in folding: erfc_scaled(real(kind=4)) cannot be folded on host
  erfc_scaled_2.f90

  # Unclear; may be bogus error on actual non-coarray arg to dummy coarray, may be bad test
  coarray_args_2.f90
  coarray_lib_token_1.f90
  coarray_lib_token_4.f90

  # ---------------------------------------------------------------------------
  #
  # These are "compile" tests which fail to compile, though compilation is
  # expected to succeed.
  internal_dummy_1.f90

  # This test has a #illegal preprocessor directive. I think this is expected to
  # raise a warning in gfortran, but flang raises an error and fails to compile
  # instead. This may be a policy difference between flang and gfortran but
  # should be confirmed.
  badline.f

  # These test use byte order marks and are in UTF-16 or UTF32. This causes
  # flang's scanner to fail producing errors such as:
  #
  #     error: bad character (0xff) in Fortran token
  #
  # TODO: Need to check if we intend to support such files.
  #
  bom_UTF-16.f90
  bom_UTF16-BE.f90
  bom_UTF16-LE.f90
  bom_UTF-32.f90

  # These check if the parser accepts the "form-feed" character (ASCII 0x0c).
  # Flang fails to compile with "bad character (0x0c) in Fortran token".
  feed_1.f90
  feed_2.f90

  # This splits a string (the argument to an include directive) across two lines
  # using a continuation character. This causes an error:
  #
  #   error: Incomplete character literal
  #
  # This may be a DEC extension but I am not sure.
  include_13.f90

  # This has something to do with the -ffixed-line-length-none directive. It
  # could be that the flag is not being passed correctly to flang in the test
  # suite's build system, or that flang does not support the flag.
  literal_character_constant_1_z.F

  # In these tests, the -fopenmp and -fopenacc flags are either not being passed
  # correctly to flang while building the tests, or flag does not define the
  # _OPENMP/_OPENACC directives while gfortran does.
  openacc-define-3.f90
  openmp-define-3.f90

  # Tests looking for runtime errors (e.g., bound checks). Correctly
  # caught by flang runtime.
  allocate_with_source_22.f03
  associate_32.f03
  inline_matmul_1.f90
  maxloc_bounds_5.f90
  ptr_func_assign_1.f08

  # Bad test, assigning an 11 elements array to a 12 elements array.
  transfer_array_intrinsic_4.f90

  # Bad test; reads 0.D99999 from a file; every other Fortran works
  io_err_1.f90

  # Fails at runtime with a valid I/O error due to INQUIRE(IOLENGTH=n)
  # being used on a derived type with defined unformatted output.
  dtio_16.f90

  # Fail at runtime due to dependence on gfortran's specific IOSTAT=
  # error code numbers or IOMSG= error message texts.
  direct_io_7.f90
  dtio_10.f90
  dtio_15.f90
  dtio_24.f90
  dtio_26.f03
  iostat_4.f90
  namelist_89.f90
  namelist_97.f90

  # Depends on gfortran's exact NAMELIST output spacing and record advances
  dtio_25.f90
  namelist_18.f90
  namelist_19.f90
  namelist_38.f90
  namelist_57.f90
  namelist_65.f90
  namelist_84.f90
  pr18210.f90

  # Bad test that expects partial NAMELIST input into a character array to
  # blank-fill the remaining elements.
  namelist_56.f90

  # Bad test that expects truncated NAMELIST input groups to be treated as
  # END= conditions rather than ERR= conditions (like every other Fortran).
  namelist_81.f90

  # Bad test that expects the result of TRIM() to have a leading space
  dtio_14.f90

  # Bad tests that expect IOMSG to be defined by a defined I/O subroutine
  # even when IOSTAT=0, violating F'23 12.6.4.8.3 paragraph 4:
  # "If the defined input/output procedure returns a nonzero value for the iostat
  # argument, the procedure shall also return an explanatory message in the iomsg
  # argument. Otherwise, the procedure shall not change the value of the
  # iomsg argument."
  dtio_4.f90

  # Valid test, but the expected output is incorrect (gfortran inserts
  # spaces that must not be there; F'23 13.10.4 p1).
  dtio_30.f03

  # A bad test that expects child input to span records
  dtio_7.f90

  # Unimplemented extension: reading a directory as a stream
  read_dir.f90

  # Unimplemented extension: \u and \U Unicode escape sequences
  widechar_1.f90

  # Unimplemented extension: \b backslash escapes in FORMAT statements
  backslash_3.f

  # Depends on gfortran's exact (DE)ALLOCATE(ERRMSG=) wording
  allocate_alloc_opt_15.f90
  allocate_alloc_opt_3.f90
  deallocate_alloc_opt_3.f90
  deallocate_stat_2.f90

  # Depends on gfortran's exact non-zero (DE)ALLOCATE(STAT=) codes
  deallocate_stat.f90

  # Depends on gfortran's incorrect return of EOR (-2) on internal
  # WRITE record overflow
  arrayio_3.f90

  # Depends on gfortran's incorrect return of EOF (-1) on internal
  # WRITE array overflow
  arrayio_5.f90

  # Depends on gfortran's implementation of list-directed & G0 output
  char4_iunit_1.f03
  char4_iunit_2.f03
  f2003_io_5.f03
  fmt_f_default_field_width_1.f90
  fmt_f_default_field_width_2.f90
  fmt_g0_1.f08
  fmt_g_default_field_width_1.f90
  fmt_g_default_field_width_2.f90
  fmt_i_default_field_width_1.f90
  fmt_i_default_field_width_2.f90
  fmt_zero_width.f90
  list_directed_large.f90

  # Depends on gfortran padding Hollerith with blanks up to even 32-bit words.
  # gfortran & nvfortran do so; ifort/ifx, NAG, and f18 pad with zeroes; XLF
  # doesn't pad at all.
  hollerith8.f90

  # Depends on gfortran returning a nonstandard "UNSPECIFIED" result for
  # INQUIRE(..., POSITION=).
  inquire_5.f90

  # Depends on gfortran's specific maximum sequential unformatted record size.
  inquire_recl_f2018.f90

  # gfortran interprets INQUIRE(-1, ..., IOSTAT=) as a failed attempt to
  # inquire a child unit created for defined I/O to an internal unit, even
  # when it is not; f18 treats it as a nonexistent external unit.
  # Other compilers vary.
  inquire_internal.f90

  # gfortran expects FLUSH(unconnected unit) to be a runtime error;
  # all other Fortran compilers, and (debatably) the standard, allow it.
  iostat_5.f90

  # Depends on gfortran emitting "Infinity" for formatted output;
  # some compilers, including f18, emit "Inf".
  large_real_kind_1.f90

  # Require -finit-local-zero or similar.
  dec_init_2.f90 # needs -finit-derived -finit-integer=42 &c.
  init_flag_15.f03 # needs -finit-derived -finit-integer
  auto_save_2.f90 # requires -fno-automatic -finit-local-zero
  init_flag_1.f90 # needs -finit-local-zero
  init_flag_2.f90
  init_flag_3.f90
  init_flag_4.f90
  init_flag_5.f90
  init_flag_6.f90
  init_flag_7.f90
  init_flag_9.f90

  # https://github.com/llvm/llvm-project/issues/84088
  pr36006-2.f90
)
