============================================================================
Constant interface declarations
============================================================================
function f (constant k :    t;
            constant k : in i;
                     k :    t;
                     k : in t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
Signal interface declarations
============================================================================
function f (signal s1 :    t;
            signal s2 : in t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (subtype_indication
          (type_mark
            (simple_name))))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
File interface declarations
============================================================================
function f (file f : t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (file_interface_declaration
        (identifier_list
          (identifier))
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal constant interface declarations
============================================================================
function f (constant k : out     t;
            constant k : inout   t;
            constant k : buffer  t;
            constant k : linkage t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (constant_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal signal interface declarations
============================================================================
function f (signal s :         t := x;
            signal s : in      t := x;
            signal s : out     t;
            signal s : inout   t;
            signal s : buffer  t;
            signal s : linkage t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (subtype_indication
          (type_mark
            (simple_name)))
        (default_expression
          (simple_name)))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))
        (default_expression
          (simple_name)))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (signal_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal variable interface declarations
============================================================================
function f (variable v : in      t;
            variable v : out     t;
            variable v : inout   t;
            variable v : buffer  t;
            variable v : linkage t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (variable_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (variable_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (variable_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (variable_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (variable_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal file interface declarations
============================================================================
function f (file f : in      t;
            file f : out     t;
            file f : inout   t;
            file f : buffer  t;
            file f : linkage t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (file_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (file_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (file_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (file_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name))))
      (file_interface_declaration
        (identifier_list
          (identifier))
        (mode)
        (subtype_indication
          (type_mark
            (simple_name)))))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal type interface declarations
============================================================================
function f (type t) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (type_interface_declaration
        (identifier)))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal subprogram interface declarations
============================================================================
function f (procedure p) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (procedure_interface_declaration
        (identifier)))
    (return
      (type_mark
        (simple_name)))))

============================================================================
LINT: Illegal package interface declarations
============================================================================
function f (package pkg is new pkg generic map (<>)) return t;
---

(design_file
  (function_declaration
    (identifier)
    (function_parameter_clause
      (package_interface_declaration
        (identifier)
        (simple_name)
        (package_map_aspect
          (generic_map_aspect
            (any)))))
    (return
      (type_mark
        (simple_name)))))
