// Test the FIR types parser diagnostics
// RUN: fir-opt -split-input-file -verify-diagnostics %s

// expected-error@+1 {{expected non-function type}}
func.func private @box3() -> !fir.boxproc<>

// -----

// expected-error@+2 {{expected non-function type}}
// expected-error@+1 {{failed to parse fir_BoxType parameter 'eleTy' which is to be a `mlir::Type`}}
func.func private @box1() -> !fir.box<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @box2() -> !fir.boxchar<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @it6() -> !fir.char<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @it6() -> !fir.char<2, >

// -----

// expected-error@+1 {{expected integer value}}
func.func private @it3() -> !fir.complex<>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @mem3() -> !fir.heap<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @it1() -> !fir.int<A>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @it1() -> !fir.logical<b>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @mem3() -> !fir.ptr<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @mem3() -> !fir.real<>

// -----

// expected-error@+1 {{expected valid keyword}}
func.func private @mem3() -> !fir.type<>

// -----

// expected-error@+2 {{expected valid keyword}}
// expected-error@+1 {{expected LEN parameter list}}
func.func private @dvd4() -> !fir.type<derived4()>

// -----

// expected-error@+2 {{expected ':'}}
// expected-error@+1 {{expected LEN parameter list}}
func.func private @dvd4() -> !fir.type<derived4(p)>

// -----

// expected-error@+2 {{expected non-function type}}
// expected-error@+1 {{expected LEN parameter list}}
func.func private @dvd4() -> !fir.type<derived4(p:)>

// -----

// expected-error@+2 {{expected valid keyword}}
// expected-error@+1 {{expected field type list}}
func.func private @dvd4() -> !fir.type<derived4(p:i8){}>

// -----

// expected-error@+2 {{expected ':'}}
// expected-error@+1 {{expected field type list}}
func.func private @dvd4() -> !fir.type<derived4(p:i8){f1}>

// -----

// expected-error@+2 {{expected non-function type}}
// expected-error@+1 {{expected field type list}}
func.func private @dvd4() -> !fir.type<derived4(p:i8){f1:f2}>

// -----

// expected-error@+2 {{expected valid keyword}}
// expected-error@+1 {{expected field type list}}
func.func private @dvd4() -> !fir.type<derived4(p:i8){f1:i32,}>

// -----

// expected-error@+2 {{expected valid keyword}}
// expected-error@+1 {{expected field type list}}
func.func private @dvd4() -> !fir.type<derived4(p:i8){,}>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @mem3() -> !fir.ref<>

// -----

// expected-error@+1 {{expected ':'}}
func.func private @arr1() -> !fir.array<*>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @arr1() -> !fir.array<*:>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @oth1() -> !fir.shape<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @oth1() -> !fir.shapeshift<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @oth1() -> !fir.shift<>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @oth1() -> !fir.slice<>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @oth3() -> !fir.tdesc<xx>

// -----

// expected-error@+1 {{expected integer value}}
func.func private @oth3() -> !fir.vector<>

// -----

// expected-error@+1 {{expected ':'}}
func.func private @oth3() -> !fir.vector<10>

// -----

// expected-error@+1 {{expected non-function type}}
func.func private @oth3() -> !fir.vector<10:>

// -----

// expected-error@+1 {{invalid element type}}
func.func private @upe() -> !fir.class<!fir.box<i32>>

// -----

// expected-error@+1 {{invalid element type}}
func.func private @upe() -> !fir.box<!fir.class<none>>
