let make_c_type_ql ql ty = 
  let rec iter const volatile = function
      [] -> make_c_type ~const ~volatile ty
    | Const :: tl ->
        if const then failwith "const appeared twice"
        else iter true volatile tl
    | Volatile :: tl ->
        if volatile then failwith "volatile appeared twice"
        else iter const true tl
  in iter false false ql