From 8193684deab24c8094a2c26b4bb6121a3970fd89 Mon Sep 17 00:00:00 2001 From: Erwan Jahier <jahier@imag.fr> Date: Tue, 27 May 2008 15:59:54 +0200 Subject: [PATCH] Fix a bug in predefSemantics.unify that was returning wrong result when trying to unify, e.g., "a^3" and "int^3". Such kind of things occured when one imbricates iterators. In fact, it was not possible to get it rigth with the data representation used for node profiles, which was not sufficiently general. --- src/compiledData.ml | 14 ++--- src/compiledDataDump.ml | 44 +++++++------ src/evalType.ml | 11 ++-- src/lazyCompiler.ml | 33 +++++----- src/predefSemantics.ml | 133 ++++++++++++++++++++++++---------------- src/test/test.res.exp | 38 ++++++------ 6 files changed, 151 insertions(+), 122 deletions(-) diff --git a/src/compiledData.ml b/src/compiledData.ml index ed502917..9cc89bcf 100644 --- a/src/compiledData.ml +++ b/src/compiledData.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 27/05/2008 (at 13:25) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:11) by Erwan Jahier> *) (** @@ -126,10 +126,6 @@ and type_eff = | Array_type_eff of type_eff * int | Struct_type_eff of Ident.long * (Ident.t * (type_eff * const_eff option)) list -and var_type = - | Atype of type_eff - | Any - | Overload (* [Overload] is like [Any], except that it can only be [int] or [real] *) (* [type_eff] extended with polymorphic or overloaded variables *) and type_eff_ext = @@ -320,7 +316,7 @@ type 'a check_flag = | Checked of 'a | Incorrect -let type_eff_to_type_eff_ext = function +let rec type_eff_to_type_eff_ext = function | Bool_type_eff -> Bool_type_eff_ext | Int_type_eff -> Int_type_eff_ext | Real_type_eff -> Real_type_eff_ext @@ -335,6 +331,8 @@ let type_eff_to_type_eff_ext = function (fun (id,(teff,copt)) -> (id,(type_eff_to_type_eff_ext teff,copt))) fl) +exception Polymorphic +exception Overloaded let rec type_eff_ext_to_type_eff = function | Bool_type_eff_ext -> Bool_type_eff | Int_type_eff_ext -> Int_type_eff @@ -349,8 +347,8 @@ let rec type_eff_ext_to_type_eff = function List.map (fun (id,(teff,copt)) -> (id,(type_eff_ext_to_type_eff teff,copt))) fl) - | Any -> assert false - | Overload -> assert false + | Any -> raise Polymorphic + | Overload -> raise Overloaded let (profile_of_node_exp_eff : diff --git a/src/compiledDataDump.ml b/src/compiledDataDump.ml index 67ff13cb..63040f4e 100644 --- a/src/compiledDataDump.ml +++ b/src/compiledDataDump.ml @@ -32,27 +32,33 @@ let rec string_of_const_eff = ( ) ) -and string_of_type_eff = function - | Bool_type_eff -> "bool" - | Int_type_eff -> "int" - | Real_type_eff -> "real" - | External_type_eff i -> long i - | Enum_type_eff (i, sl) -> +and string_of_type_eff_ext = function + | Bool_type_eff_ext -> "bool" + | Int_type_eff_ext -> "int" + | Real_type_eff_ext -> "real" + | External_type_eff_ext i -> long i + | Enum_type_eff_ext (i, sl) -> assert (sl <>[]); let f sep acc s = acc ^ sep ^ (long s) in (List.fold_left (f ", ") (f "" "enum {" (List.hd sl)) (List.tl sl)) ^ "}" - | Array_type_eff (ty, sz) -> sprintf "%s^%d" (string_of_type_eff ty) sz - | Struct_type_eff (i, fl) -> + | Array_type_eff_ext (ty, sz) -> sprintf "%s^%d" (string_of_type_eff_ext ty) sz + | Struct_type_eff_ext (i, fl) -> assert (fl <>[]); - let f sep acc (id, (type_eff, const_eff_opt)) = + let f sep acc (id, (type_eff_ext, const_eff_opt)) = acc ^ sep ^ (Ident.to_string id) ^ " : " ^ - (string_of_type_eff type_eff) ^ + (string_of_type_eff_ext type_eff_ext) ^ match const_eff_opt with None -> "" | Some ce -> " (" ^ (string_of_const_eff ce) ^ ")" in (List.fold_left (f "; ") (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}" + | Any -> "a" + | Overload -> "o" + +and string_of_type_eff teff = string_of_type_eff_ext (type_eff_to_type_eff_ext teff) + + and string_of_type_eff_list = function | [] -> "" | [x] -> string_of_type_eff x @@ -86,18 +92,16 @@ let (string_of_type_decl_list : (Ident.t * type_eff) list -> string -> string) = let str = String.concat sep (List.map string_of_decl tel) in str -let string_of_var_type = function - | Any -> "a" - | Overload -> "o" - | Atype teff -> string_of_type_eff teff +let string_of_decl_ext (id,teff) = + (Ident.to_string id) ^ ":" ^ (string_of_type_eff_ext teff) -let string_of_decl2 (id,teff) = - (Ident.to_string id) ^ ":" ^ (string_of_var_type teff) -let (string_of_type_decl_list2 : (Ident.t * var_type) list -> string -> string) = +let (string_of_type_decl_list_ext : (Ident.t*type_eff_ext) list -> string -> string) = fun tel sep -> - let str = String.concat sep (List.map string_of_decl2 tel) in + let str = String.concat sep (List.map string_of_decl_ext tel) in str + + let string_of_slice_info_eff si_eff = "[" ^ (string_of_int si_eff.se_first) ^ ".." ^ (string_of_int si_eff.se_last) ^ (if si_eff.se_step = 1 then "" else " step " ^ (string_of_int si_eff.se_step)) ^ @@ -253,8 +257,8 @@ let (profile_of_node_exp_eff: node_exp_eff -> string) = ((if neff.def_eff = ExternEff then "extern " else "") ^ (if neff.has_mem_eff then "node " else "function ") ^ (string_of_node_key neff.node_key_eff) ^ - "(" ^ (string_of_type_decl_list2 neff.inlist_eff "; ") ^ ") returns (" ^ - (string_of_type_decl_list2 neff.outlist_eff "; ") ^ ");\n") + "(" ^ (string_of_type_decl_list_ext neff.inlist_eff "; ") ^ ") returns (" ^ + (string_of_type_decl_list_ext neff.outlist_eff "; ") ^ ");\n") let (string_of_node_def : node_def_eff -> string list) = function diff --git a/src/evalType.ml b/src/evalType.ml index 5a38e6e4..055af69d 100644 --- a/src/evalType.ml +++ b/src/evalType.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 26/05/2008 (at 15:48) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:13) by Erwan Jahier> *) open Predef @@ -33,12 +33,9 @@ and (eval_by_pos_type : | CALL_eff node_exp_eff -> let lto = snd (List.split node_exp_eff.it.outlist_eff) in - List.map - (function - | Atype t -> t - | (Any | Overload) -> assert false (* cannot occur for user node *) - ) - lto + (try List.map type_eff_ext_to_type_eff lto + with Polymorphic | Overloaded -> assert false) + | IDENT_eff id -> ( (* [id] migth be a constant, but also a variable *) try [type_of_const_eff (id_solver.id2const id lxm)] diff --git a/src/lazyCompiler.ml b/src/lazyCompiler.ml index ab24f7a7..c519ce3e 100644 --- a/src/lazyCompiler.ml +++ b/src/lazyCompiler.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 26/05/2008 (at 16:42) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:17) by Erwan Jahier> *) open Lxm @@ -481,7 +481,7 @@ and (node_check_interface_do: t -> CompiledData.node_key -> Lxm.t -> (** [types_are_compatible t1 t2] checks that t1 is compatible with t2, i.e., if t1 = t2 or t1 is abstract and and t2. *) - let type_is_comp (_,t1) (_,t2) = CompiledData.var_type_are_compatible t1 t2 in + let type_is_comp (_,t1) (_,t2) = CompiledData.type_eff_ext_are_compatible t1 t2 in if prov_node_exp_eff.node_key_eff = body_node_exp_eff.node_key_eff && (List.for_all2 type_is_comp @@ -576,10 +576,11 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> | None -> None | Some loclist -> Some (List.map type_args loclist) in + let aux (id,t)= (id, type_eff_to_type_eff_ext t) in { node_key_eff = nk; - inlist_eff = List.map (fun (id,t) -> id, Atype t) inlist; - outlist_eff = List.map (fun (id,t) -> id, Atype t) outlist; + inlist_eff = List.map aux inlist; + outlist_eff = List.map aux outlist; loclist_eff = loclist; clock_inlist_eff = [];(* XXX finish me! *) clock_outlist_eff = [];(* XXX finish me! *) @@ -588,12 +589,6 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> is_safe_eff = node_def.it.is_safe; } in - let var_type_to_type_eff = function - | Atype t -> t - | (Overload | Any) -> - raise (Compile_error ( - lxm, "Cannot alias overloaded or polymorphic operator")) - in let (make_alias_node : CompiledData.node_exp_eff -> CompiledData.node_exp_eff) = fun aliased_node -> (* builds a node that calls the aliased node. It looks like: @@ -609,7 +604,10 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> let var_info_eff = { var_name_eff = id ; var_nature_eff = VarOutput ; - var_type_eff = var_type_to_type_eff te ; + var_type_eff = + try type_eff_ext_to_type_eff te with _ -> + raise (Compile_error ( + lxm, "Cannot alias overloaded or polymorphic operator")) } in LeftVarEff (var_info_eff, lxm) @@ -699,10 +697,15 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> in let aux vi = GetEff.typ node_id_solver vi.it.var_type in let (il,ol) = CompiledData.profile_of_node_exp_eff alias_node in - let il = List.map var_type_to_type_eff il - and ol = List.map var_type_to_type_eff ol in - if - List.map aux vi_il <> il || List.map aux vi_ol <> ol + let (il,ol) = + try + (List.map type_eff_ext_to_type_eff il, + List.map type_eff_ext_to_type_eff ol) + with + Polymorphic | Overloaded -> assert false + in + if + List.map aux vi_il <> il || List.map aux vi_ol <> ol then raise (Compile_error ( lxm, "type mismatch in node alias definition")) diff --git a/src/predefSemantics.ml b/src/predefSemantics.ml index cfed9660..41cf2599 100644 --- a/src/predefSemantics.ml +++ b/src/predefSemantics.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 27/05/2008 (at 11:14) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 15:58) by Erwan Jahier> *) open Predef @@ -24,11 +24,12 @@ let (type_eff_list_to_string :type_eff list -> string) = let str_l = List.map CompiledDataDump.string_of_type_eff tel in String.concat "*" str_l -let (var_type_list_to_string : var_type list -> string) = +let (type_eff_ext_list_to_string :type_eff_ext list -> string) = fun tel -> - let str_l = List.map CompiledDataDump.string_of_var_type tel in + let str_l = List.map CompiledDataDump.string_of_type_eff_ext tel in String.concat "*" str_l + let (type_error : type_eff list -> string -> 'a) = fun tel expect -> @@ -45,7 +46,7 @@ let (type_error2 : string -> string -> string -> 'a) = ("\n*** type '" ^ provided ^ "' was provided" ^ (if expect = "" then "" else (" whereas\n*** type '" ^expect^"' was expected")) ^ - (if msg = "" then "" else ("\n*** and " ^ msg))))) + (if msg = "" then "" else ("\n*** " ^ msg))))) let arity_error (v : 'a list) (expect : string) = @@ -88,45 +89,59 @@ type unify_result = | Unif of type_eff | Ko of string (* a msg explaining why the unification failed *) -let var_type2str = CompiledDataDump.string_of_var_type let type_eff2str = CompiledDataDump.string_of_type_eff +let type_eff_ext2str = CompiledDataDump.string_of_type_eff_ext -let (unify : var_type list -> var_type list -> unify_result) = +let (unify : type_eff_ext list -> type_eff list -> unify_result) = let (is_overloadable : type_eff -> bool) = function | Int_type_eff -> true | Real_type_eff -> true | _ -> false in - List.fold_left2 - (fun acc vt1 vt2 -> - match acc,vt1,vt2 with - | Ko msg , _, _ -> acc - | Equal, Any, Atype t2 -> Unif t2 - | Equal, Overload, Atype t2 -> if is_overloadable t2 then Unif t2 else - Ko((type_eff2str t2) ^ " should have type int or real") - - | (Equal|Unif _), Atype t1, Atype t2 -> if t1 = t2 then acc else - Ko((type_eff2str t1) ^ " <> " ^ (type_eff2str t2)) - - | Unif ts, Any, Atype t2 -> if ts = t2 then acc else - Ko((type_eff2str ts) ^ " <> " ^ (type_eff2str t2)) - | Unif ts, Overload, Atype t2 -> - if ts <> t2 then - Ko((type_eff2str ts) ^ " <> " ^ (type_eff2str t2)) - else if (not (is_overloadable t2)) then - Ko((type_eff2str ts) ^ "should be an int or a real") - else - acc - | _,_, (Overload|Any) -> assert false (* cannot occur *) - ) - Equal + let rec (unify_type_eff : type_eff_ext -> type_eff -> unify_result) = + fun t1 t2 -> + if t1 = type_eff_to_type_eff_ext t2 then Equal else + match (t1,t2) with + | Array_type_eff_ext(teff_ext1,i1), Array_type_eff(teff2,i2) -> + if i1 <> i2 then Ko "incompatible array size" else + unify_type_eff teff_ext1 teff2 + + | Struct_type_eff_ext(l1, fl1), Struct_type_eff(l2, fl2) -> + if l1 <> l2 then Ko "incompatible structure" else + let fl1 = List.map (fun (_,(te,_)) -> te) fl1 + and fl2 = List.map (fun (_,(te,_)) -> te) fl2 in + List.fold_left2 unify_do_acc Equal fl1 fl2 + + | Any, t -> Unif t + | Overload, t -> + if is_overloadable t then Unif t else + Ko((type_eff2str t) ^ " should be an integer or a real") + | _ -> + Ko((type_eff_ext2str t1) ^ " and " ^ (type_eff2str t2) ^ + " are not unifiable") + + and (unify_do_acc : + unify_result -> type_eff_ext -> type_eff -> unify_result) = + fun acc te1 te2 -> + match acc, unify_type_eff te1 te2 with + | Equal, Equal -> Equal + | Ko msg, _ + | _, Ko msg -> Ko msg + | Unif t, Equal + | Equal, Unif t -> Unif t + | Unif t1, Unif t2 -> if t1 = t2 then acc else + Ko((type_eff2str t1) ^ " and " ^ (type_eff2str t2) ^ + " are not unifiable") + + in + List.fold_left2 unify_do_acc Equal (*********************************************************************************) (* a few local alias to make the node profile below more readable. *) -let i = Atype Int_type_eff -let r = Atype Real_type_eff -let b = Atype Bool_type_eff +let i = Int_type_eff_ext +let r = Real_type_eff_ext +let b = Bool_type_eff_ext let id str = Ident.of_string str (** A few useful type profiles for simple operators *) @@ -156,15 +171,9 @@ let ooo_profile = [(id "i1",Overload);(id "i2",Overload)], [(id "o",Overload)] (** iterators profiles *) (* [type_to_array_type [x1;...;xn] c] returns the array type [x1^c;...;xn^c] *) let (type_to_array_type: - (Ident.t * var_type) list -> int -> (Ident.t * var_type) list) = + (Ident.t * type_eff_ext) list -> int -> (Ident.t * type_eff_ext) list) = fun l c -> - List.map - (function - | id, Any -> id, Any - | id, Overload -> id, Overload - | id, Atype teff -> id, Atype (Array_type_eff(teff,c)) - ) - l + List.map (fun (id, teff) -> id, Array_type_eff_ext(teff,c)) l (* Extract the node and the constant from a list of static args *) let (get_node_and_constant:static_arg_eff list -> node_exp_eff * int)= @@ -210,8 +219,8 @@ let fillred_profile = lxm, "\n*** type error: the type of node \n " ^ (CompiledDataDump.profile_of_node_exp_eff n) ^ " is not compatible with the use of this iterator.\n "^ - (CompiledDataDump.string_of_var_type t1) ^ " should be equal to " ^ - (CompiledDataDump.string_of_var_type t2) ^ "\n")) + (CompiledDataDump.string_of_type_eff_ext t1) ^ " should be equal to " ^ + (CompiledDataDump.string_of_type_eff_ext t2) ^ "\n")) (* let fill_profile = fillred_profile *) (* Given @@ -244,10 +253,10 @@ let boolred_profile = | _ -> raise (Compile_error(lxm, "\n*** type error: 3 int were expected")) in let (_i,_j,k) = get_three_constants lxm sargs in - [id "i", Atype (Array_type_eff(Bool_type_eff,k))], [id "o", b] + [id "i", (Array_type_eff_ext(Bool_type_eff_ext,k))], [id "o", b] -type node_profile = (Ident.t * var_type) list * (Ident.t * var_type) list +type node_profile = (Ident.t * type_eff_ext) list * (Ident.t * type_eff_ext) list let (op2profile : Predef.op -> Lxm.t -> static_arg_eff list -> node_profile) = fun op lxm sargs -> match op with @@ -315,31 +324,47 @@ let (type_eval : op -> Lxm.t -> CompiledData.static_arg_eff list -> typer) = | x -> (arity_error x "3") ) | (NOR_n | DIESE_n) -> - (* VERRUE 2 : those operators have no profile, therefore i define an - ad-hoc check for them. - *) + (* VERRUE 2 : cf XXX above: therefore i define an ad-hoc + check for them. *) let check_nary_iter acc ceff = match ceff with (Bool_type_eff) -> acc | _ -> (type_error [ceff] "bool") in - ignore(List.fold_left check_nary_iter true (List.flatten ll)); + List.fold_left check_nary_iter () (List.flatten ll); [Bool_type_eff] | _ -> (* general case *) let node_eff = make_node_exp_eff op lxm sargs in let lti = List.map (fun (id,t) -> t) node_eff.inlist_eff and lto = List.map (fun (id,t) -> t) node_eff.outlist_eff in - let unwrap_type = function Atype t -> t | _ -> assert false in - let subst_type t = function Atype t -> t | Any -> t | Overload -> t in - let l = List.map (fun t -> Atype t) (List.flatten ll) in + let rec (subst_type : type_eff -> type_eff_ext -> type_eff) = + fun t teff_ext -> match teff_ext with + (* substitutes [t] in [teff_ext] *) + | Bool_type_eff_ext -> Bool_type_eff + | Int_type_eff_ext -> Int_type_eff + | Real_type_eff_ext -> Real_type_eff + | External_type_eff_ext l -> External_type_eff l + | Enum_type_eff_ext(l,el) -> Enum_type_eff(l,el) + | Array_type_eff_ext(teff_ext,i) -> + Array_type_eff(subst_type t teff_ext, i) + | Struct_type_eff_ext(l, fl) -> + Struct_type_eff( + l, + List.map + (fun (id,(teff,copt)) -> (id,(subst_type t teff,copt))) + fl) + | Any + | Overload -> t + in + let l = (List.flatten ll) in if (List.length l <> List.length lti) then arity_error l (string_of_int (List.length lti)) else match unify lti l with - | Equal -> List.map unwrap_type lto + | Equal -> List.map type_eff_ext_to_type_eff lto | Unif t -> List.map (subst_type t) lto | Ko(str) -> - type_error2 (var_type_list_to_string l) - (var_type_list_to_string lti) str + type_error2 (type_eff_list_to_string l) + (type_eff_ext_list_to_string lti) str (*********************************************************************************) diff --git a/src/test/test.res.exp b/src/test/test.res.exp index 006cdef1..73eaf964 100644 --- a/src/test/test.res.exp +++ b/src/test/test.res.exp @@ -5218,7 +5218,7 @@ type inter__selType = {i : int; b : bool; r : real}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/Pascal/newpacks.lus ---------------------------------------------------------------------- @@ -5859,7 +5859,7 @@ type inter__selType = {i : int; b : bool; r : real}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/Pascal/p.lus ---------------------------------------------------------------------- @@ -8120,7 +8120,7 @@ type morel4__arrayi = int^2^3; Warning. in file "should_work/fab_test/morel4.lus", line 33, col 17 to 17, token ',': ---> separator mismatch, ';' expected -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/fab_test/morel4.lus ---------------------------------------------------------------------- @@ -8198,7 +8198,7 @@ tel XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/fab_test/morel5.lus ---------------------------------------------------------------------- @@ -9713,7 +9713,7 @@ type produitBool__Tacc_inShift = {acc_in_PLC : {multiplieur : bool^10; rank : XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/ProduitBool/produitBool.lus ---------------------------------------------------------------------- @@ -9983,7 +9983,7 @@ type calculs_max__struct_max = {max1 : int; max2 : int; imax1 : int; imax2 : in XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/calculs_max.lus ---------------------------------------------------------------------- @@ -10022,7 +10022,7 @@ type deSimone__cell_accu = {token : bool; grant : bool}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/deSimone.lus ---------------------------------------------------------------------- @@ -10148,17 +10148,19 @@ type matrice__T_fibo = int^2; const matrice__m = 3; const matrice__n = 2; Exported nodes: -*** Error in file "should_work/lionel/matrice.lus", line 15, col 8 to 10, token 'red': type error: -*** type 'int*int^3^2' was provided whereas -*** type 'o*o' was expected -*** and int <> int^3^2 - node matrice__fibo(accu_in:int^2) returns (accu_out:int^2; elt:int); let accu_out = [(accu_in[0] + accu_in[1]), accu_in[0]]; elt = (accu_in[0] + accu_in[1]); tel -- end of node matrice__fibo +node matrice__matrice(a:int) returns (sum:int; bid:int^2; T:int^3^2); +let + (bid, T) = fill<<node Lustre__fill<<node matrice__fibo, const 3>>, const + 2>>([a, a]); + sum = red<<node Lustre__red<<node Lustre__+, const 3>>, const 2>>(0, T); +tel +-- end of node matrice__matrice ---------------------------------------------------------------------- ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/matrice2.lus @@ -10204,7 +10206,7 @@ const moyenne__size = 10; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/moyenne.lus ---------------------------------------------------------------------- @@ -10298,7 +10300,7 @@ const normal__COM_ERR = 0; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/normal.lus ---------------------------------------------------------------------- @@ -10458,7 +10460,7 @@ const testSilus__COM_ERR = 0; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/testSilus.lus ---------------------------------------------------------------------- @@ -10508,7 +10510,7 @@ type triSel__Exchange_accu = {MinVal : int; MinRank : int; RankFrom : int; Curr XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/triSel.lus ---------------------------------------------------------------------- @@ -10551,7 +10553,7 @@ const contractForElementSelectionInArray__size = 10; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus ---------------------------------------------------------------------- @@ -11734,5 +11736,5 @@ type const2__t8 = int^3^7^8^9^3^8^8; *** Error in file "should_fail/type/const2.lus", line 16, col 12 to 13, token '<>': type error: *** type 'int*real' was provided whereas *** type 'a*a' was expected -*** and int <> real +*** int and real are not unifiable -- GitLab