diff --git a/runtime/Makefile b/runtime/Makefile index 1d5fe82a1..f71efd909 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -24,7 +24,7 @@ runtime.o: runtime.c runtime.h $(CC) $(PROD_FLAGS) -c runtime.c -o runtime.o printf.o: printf.S - $(CC) $(PROD_FLAGS) -x assembler-with-cpp -c -g printf.S -o printf.o + $(CC) $(PROD_FLAGS) -Wa,--noexecstack -x assembler-with-cpp -c -g printf.S -o printf.o clean: $(RM) *.a *.o *~ negative_scenarios/*.err diff --git a/src/SM.ml b/src/SM.ml index d43ea9b67..223e4f39c 100644 --- a/src/SM.ml +++ b/src/SM.ml @@ -1427,7 +1427,7 @@ let compile cmd ((imports, _), p) = | Expr.Ignore s -> let ls, env = env#get_label in add_code (compile_expr tail ls env s) ls false [ DROP ] - | Expr.ElemRef (x, i) -> compile_list tail l env [ x; i ] + | Expr.ElemRef _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited." | Expr.Var x -> ( let env, line = env#gen_line x in let env, acc = env#lookup x in @@ -1438,10 +1438,7 @@ let compile cmd ((imports, _), p) = false, line @ [ PROTO (name, env#current_function) ] ) | _ -> (env, false, line @ [ LD acc ])) - | Expr.Ref x -> - let env, line = env#gen_line x in - let env, acc = env#lookup x in - (env, false, line @ [ LDA acc ]) + | Expr.Ref _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited." | Expr.Const n -> (env, false, [ CONST n ]) | Expr.String s -> (env, false, [ STRING s ]) | Expr.Binop (op, x, y) -> @@ -1496,13 +1493,15 @@ let compile cmd ((imports, _), p) = let env, line = env#gen_line x in let env, acc = env#lookup x in add_code (compile_expr false lassn env e) lassn false (line @ [ ST acc ]) - | Expr.Assign (x, e) -> + | Expr.Assign (Expr.ElemRef (x, i), e) -> let lassn, env = env#get_label in add_code - (compile_list false lassn env [ x; e ]) + (compile_list false lassn env [ x; i; e ]) lassn false - [ (match x with Expr.Ref _ -> STI | _ -> STA) ] - (*Expr.ElemRef _ -> STA | _ -> STI]*) + [ STA ] + | Expr.Assign (x, _) -> + failwith + (Printf.sprintf "Indirect assignment is not supported yet: %s" (show Expr.t x)) | Expr.Skip -> (env, false, []) | Expr.Seq (s1, s2) -> compile_list tail l env [ s1; s2 ] | Expr.If (c, s1, s2) -> diff --git a/src/X86_64.ml b/src/X86_64.ml index 9c5845c2e..5b7482bbe 100644 --- a/src/X86_64.ml +++ b/src/X86_64.ml @@ -260,10 +260,10 @@ let show env instr = let in_memory = function M _ | S _ | I _ -> true | C _ | R _ | L _ -> false let mov x s = - (* Numeric literals with more than 32 bits cannot ne directly moved to memory location *) - let big_numeric_literal = function L num -> num > 0xFFFFFFFF | _ -> false in + (* Numeric literals with more than 32 bits cannot be directly moved to memory location *) + let big_numeric_literal = function L num -> (num > 0xFFFFFFFF || num < -0xFFFFFFFF) | _ -> false in if x = s then [] - else if (in_memory x && in_memory s) || big_numeric_literal x then + else if (in_memory x && in_memory s) || (big_numeric_literal x && (in_memory x || in_memory s)) then [ Mov (x, rax); Mov (rax, s) ] else [ Mov (x, s) ] @@ -691,16 +691,27 @@ let compile cmd env imports code = (env, push_closure_code @ mov address l @ call_code) | CONST n -> let s, env' = env#allocate in - (env', [ Mov (L (box n), s) ]) + (env', mov (L (box n)) s) | STRING s -> let addr, env = env#string s in let l, env = env#allocate in let env, call = compile_call env ~fname:".string" 1 false in (env, mov addr l @ call) - | LDA x -> + | LDA _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited." + (* let s, env' = (env#variable x)#allocate in let s', env'' = env'#allocate in - (env'', [ Lea (env'#loc x, rax); Mov (rax, s); Mov (rax, s') ]) + let loc_x = env'#loc x in + match loc_x with + | R _ -> + failwith + "We are not able to take an address of a register. This \ + is the known limitation of 64-bit compiler. If you \ + encountered this issue, just do not use indirect \ + assignment :(" + | _ -> + (); + (env'', [ Lea (loc_x, rax); Mov (rax, s); Mov (rax, s') ])*) | LD x -> ( let s, env' = (env#variable x)#allocate in ( env', @@ -715,7 +726,8 @@ let compile cmd env imports code = | S _ | M _ -> [ Mov (s, rax); Mov (rax, env'#loc x) ] | _ -> [ Mov (s, env'#loc x) ] )) | STA -> compile_call env ~fname:".sta" 3 false - | STI -> ( + | STI -> failwith "Should not happen. Indirect assignemts are temporarily prohibited." + (* let v, env = env#pop in let x = env#peek in ( env, @@ -727,7 +739,7 @@ let compile cmd env imports code = Mov (rdx, I (0, rax)); Mov (rdx, x); ] - | _ -> [ Mov (v, rax); Mov (rax, I (0, x)); Mov (rax, x) ] )) + | _ -> [ Mov (v, rax); Mov (rax, I (0, x)); Mov (rax, x) ] )*) | BINOP op -> compile_binop env op | LABEL s | FLABEL s | SLABEL s -> (env, [ Label s ]) | JMP l -> ((env#set_stack l)#set_barrier, [ Jmp l ]) @@ -972,23 +984,21 @@ let compile cmd env imports code = 1 false | LINE line -> env#gen_line line | FAIL ((line, col), value) -> - let v, env = if value then (env#peek, env) else env#pop in + let value, env = if value then (env#peek, env) else env#pop in let msg_addr, env = env#string cmd#get_infile in - let vr, env = env#allocate in - let sr, env = env#allocate in - let liner, env = env#allocate in - let colr, env = env#allocate in + let value_arg_addr, env = env#allocate in + let msg_arg_addr, env = env#allocate in + let line_arg_addr, env = env#allocate in + let col_arg_addr, env = env#allocate in let env, code = compile_call env ~fname:".match_failure" 4 false in let _, env = env#pop in ( env, - [ - Mov (L col, colr); - Mov (L line, liner); - Mov (msg_addr, sr); - Mov (v, vr); - ] + mov (L col) col_arg_addr + @ mov (L line) line_arg_addr + @ mov msg_addr msg_arg_addr + @ mov value value_arg_addr @ code ) | i -> invalid_arg @@ -1304,6 +1314,10 @@ class env prg mode = Buffer.add_char buf '\\'; Buffer.add_char buf 't'; iterate (i + 2) + | 'r' -> + Buffer.add_char buf '\\'; + Buffer.add_char buf 'r'; + iterate (i + 2) | _ -> Buffer.add_char buf '\\'; Buffer.add_char buf '\\'; @@ -1474,8 +1488,8 @@ let build cmd prog = in let compiler_flags, linker_flags = match cmd#target_os with - | Darwin -> ("-arch x86_64", "-ld_classic") - | Linux -> ("", "") + | Darwin -> ("-arch x86_64 -Wa,--noexecstack", "-ld_classic") + | Linux -> ("-Wa,--noexecstack", "") in let debug_flags = if cmd#is_debug then "-g" else "" in match cmd#get_mode with @@ -1493,11 +1507,17 @@ let build cmd prog = (Buffer.contents buf) cmd#get_runtime_path (match cmd#march with `X86_32 -> "runtime32" | `AMD64 -> "runtime") in - Sys.command gcc_cmdline + let result = Sys.command gcc_cmdline in + if result <> 0 then + failwith + (Printf.sprintf "Assembly compiler failed with exit code %d" result) | `Compile -> let cmd = Printf.sprintf "%s %s %s -c -g %s.s" compiler compiler_flags debug_flags cmd#basename in - Sys.command cmd + let result = Sys.command cmd in + if result <> 0 then + failwith + (Printf.sprintf "Assembly compiler failed with exit code %d" result) | _ -> invalid_arg "must not happen" diff --git a/stdlib/regression/gen.ml b/stdlib/regression/gen.ml index 8d1caaac6..53a8cf3ef 100644 --- a/stdlib/regression/gen.ml +++ b/stdlib/regression/gen.ml @@ -36,7 +36,7 @@ let () = if Sys.file_exists !lama_file && i <> 30 then ( (* cram_printfn " $ ls ../x64"; *) cram_printfn - " $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test%02d.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'" i; + " $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test%02d.lama -o test" i; cram_printfn " $ ./test"; true) else false diff --git a/stdlib/regression/test01.t b/stdlib/regression/test01.t index 9410a9f0c..8c74ad30e 100644 --- a/stdlib/regression/test01.t +++ b/stdlib/regression/test01.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test01.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test01.lama -o test $ ./test Set internal structure: MNode (63, 1, 0, MNode (31, 1, 0, MNode (15, 1, 0, MNode (7, 1, 0, MNode (3, 1, 0, MNode (1, 1, 0, MNode (0, 1, 0, 0, 0), MNode (2, 1, 0, 0, 0)), MNode (5, 1, 0, MNode (4, 1, 0, 0, 0), MNode (6, 1, 0, 0, 0))), MNode (11, 1, 0, MNode (9, 1, 0, MNode (8, 1, 0, 0, 0), MNode (10, 1, 0, 0, 0)), MNode (13, 1, 0, MNode (12, 1, 0, 0, 0), MNode (14, 1, 0, 0, 0)))), MNode (23, 1, 0, MNode (19, 1, 0, MNode (17, 1, 0, MNode (16, 1, 0, 0, 0), MNode (18, 1, 0, 0, 0)), MNode (21, 1, 0, MNode (20, 1, 0, 0, 0), MNode (22, 1, 0, 0, 0))), MNode (27, 1, 0, MNode (25, 1, 0, MNode (24, 1, 0, 0, 0), MNode (26, 1, 0, 0, 0)), MNode (29, 1, 0, MNode (28, 1, 0, 0, 0), MNode (30, 1, 0, 0, 0))))), MNode (47, 1, 0, MNode (39, 1, 0, MNode (35, 1, 0, MNode (33, 1, 0, MNode (32, 1, 0, 0, 0), MNode (34, 1, 0, 0, 0)), MNode (37, 1, 0, MNode (36, 1, 0, 0, 0), MNode (38, 1, 0, 0, 0))), MNode (43, 1, 0, MNode (41, 1, 0, MNode (40, 1, 0, 0, 0), MNode (42, 1, 0, 0, 0)), MNode (45, 1, 0, MNode (44, 1, 0, 0, 0), MNode (46, 1, 0, 0, 0)))), MNode (55, 1, 0, MNode (51, 1, 0, MNode (49, 1, 0, MNode (48, 1, 0, 0, 0), MNode (50, 1, 0, 0, 0)), MNode (53, 1, 0, MNode (52, 1, 0, 0, 0), MNode (54, 1, 0, 0, 0))), MNode (59, 1, 0, MNode (57, 1, 0, MNode (56, 1, 0, 0, 0), MNode (58, 1, 0, 0, 0)), MNode (61, 1, 0, MNode (60, 1, 0, 0, 0), MNode (62, 1, 0, 0, 0)))))), MNode (79, 1, -1, MNode (71, 1, 0, MNode (67, 1, 0, MNode (65, 1, 0, MNode (64, 1, 0, 0, 0), MNode (66, 1, 0, 0, 0)), MNode (69, 1, 0, MNode (68, 1, 0, 0, 0), MNode (70, 1, 0, 0, 0))), MNode (75, 1, 0, MNode (73, 1, 0, MNode (72, 1, 0, 0, 0), MNode (74, 1, 0, 0, 0)), MNode (77, 1, 0, MNode (76, 1, 0, 0, 0), MNode (78, 1, 0, 0, 0)))), MNode (87, 1, -1, MNode (83, 1, 0, MNode (81, 1, 0, MNode (80, 1, 0, 0, 0), MNode (82, 1, 0, 0, 0)), MNode (85, 1, 0, MNode (84, 1, 0, 0, 0), MNode (86, 1, 0, 0, 0))), MNode (95, 1, 0, MNode (91, 1, 0, MNode (89, 1, 0, MNode (88, 1, 0, 0, 0), MNode (90, 1, 0, 0, 0)), MNode (93, 1, 0, MNode (92, 1, 0, 0, 0), MNode (94, 1, 0, 0, 0))), MNode (97, 1, -1, MNode (96, 1, 0, 0, 0), MNode (98, 1, -1, 0, MNode (99, 1, 0, 0, 0))))))) Set elements: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99} diff --git a/stdlib/regression/test02.t b/stdlib/regression/test02.t index 687ba8c4d..5b05c8d2c 100644 --- a/stdlib/regression/test02.t +++ b/stdlib/regression/test02.t @@ -1,5 +1,4 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test02.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test02.lama -o test $ ./test Assn ("x", Dec ("3")) diff --git a/stdlib/regression/test03.t b/stdlib/regression/test03.t index 3a60e6a8e..4a0482855 100644 --- a/stdlib/regression/test03.t +++ b/stdlib/regression/test03.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test03.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test03.lama -o test $ ./test -1 1 diff --git a/stdlib/regression/test04.t b/stdlib/regression/test04.t index dc4386546..49da03f89 100644 --- a/stdlib/regression/test04.t +++ b/stdlib/regression/test04.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test04.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test04.lama -o test $ ./test Map internal structure: MNode (63, {630}, 0, MNode (31, {310}, 0, MNode (15, {150}, 0, MNode (7, {70}, 0, MNode (3, {30}, 0, MNode (1, {10}, 0, MNode (0, {0}, 0, 0, 0), MNode (2, {20}, 0, 0, 0)), MNode (5, {50}, 0, MNode (4, {40}, 0, 0, 0), MNode (6, {60}, 0, 0, 0))), MNode (11, {110}, 0, MNode (9, {90}, 0, MNode (8, {80}, 0, 0, 0), MNode (10, {100}, 0, 0, 0)), MNode (13, {130}, 0, MNode (12, {120}, 0, 0, 0), MNode (14, {140}, 0, 0, 0)))), MNode (23, {230}, 0, MNode (19, {190}, 0, MNode (17, {170}, 0, MNode (16, {160}, 0, 0, 0), MNode (18, {180}, 0, 0, 0)), MNode (21, {210}, 0, MNode (20, {200}, 0, 0, 0), MNode (22, {220}, 0, 0, 0))), MNode (27, {270}, 0, MNode (25, {250}, 0, MNode (24, {240}, 0, 0, 0), MNode (26, {260}, 0, 0, 0)), MNode (29, {290}, 0, MNode (28, {280}, 0, 0, 0), MNode (30, {300}, 0, 0, 0))))), MNode (47, {470}, 0, MNode (39, {390}, 0, MNode (35, {350}, 0, MNode (33, {330}, 0, MNode (32, {320}, 0, 0, 0), MNode (34, {340}, 0, 0, 0)), MNode (37, {370}, 0, MNode (36, {360}, 0, 0, 0), MNode (38, {380}, 0, 0, 0))), MNode (43, {430}, 0, MNode (41, {410}, 0, MNode (40, {400}, 0, 0, 0), MNode (42, {420}, 0, 0, 0)), MNode (45, {450}, 0, MNode (44, {440}, 0, 0, 0), MNode (46, {460}, 0, 0, 0)))), MNode (55, {550}, 0, MNode (51, {510}, 0, MNode (49, {490}, 0, MNode (48, {480}, 0, 0, 0), MNode (50, {500}, 0, 0, 0)), MNode (53, {530}, 0, MNode (52, {520}, 0, 0, 0), MNode (54, {540}, 0, 0, 0))), MNode (59, {590}, 0, MNode (57, {570}, 0, MNode (56, {560}, 0, 0, 0), MNode (58, {580}, 0, 0, 0)), MNode (61, {610}, 0, MNode (60, {600}, 0, 0, 0), MNode (62, {620}, 0, 0, 0)))))), MNode (79, {790}, -1, MNode (71, {710}, 0, MNode (67, {670}, 0, MNode (65, {650}, 0, MNode (64, {640}, 0, 0, 0), MNode (66, {660}, 0, 0, 0)), MNode (69, {690}, 0, MNode (68, {680}, 0, 0, 0), MNode (70, {700}, 0, 0, 0))), MNode (75, {750}, 0, MNode (73, {730}, 0, MNode (72, {720}, 0, 0, 0), MNode (74, {740}, 0, 0, 0)), MNode (77, {770}, 0, MNode (76, {760}, 0, 0, 0), MNode (78, {780}, 0, 0, 0)))), MNode (87, {870}, -1, MNode (83, {830}, 0, MNode (81, {810}, 0, MNode (80, {800}, 0, 0, 0), MNode (82, {820}, 0, 0, 0)), MNode (85, {850}, 0, MNode (84, {840}, 0, 0, 0), MNode (86, {860}, 0, 0, 0))), MNode (95, {950}, 0, MNode (91, {910}, 0, MNode (89, {890}, 0, MNode (88, {880}, 0, 0, 0), MNode (90, {900}, 0, 0, 0)), MNode (93, {930}, 0, MNode (92, {920}, 0, 0, 0), MNode (94, {940}, 0, 0, 0))), MNode (97, {970}, -1, MNode (96, {960}, 0, 0, 0), MNode (98, {980}, -1, 0, MNode (99, {990}, 0, 0, 0))))))) Map elements: {[0, 0], [1, 10], [2, 20], [3, 30], [4, 40], [5, 50], [6, 60], [7, 70], [8, 80], [9, 90], [10, 100], [11, 110], [12, 120], [13, 130], [14, 140], [15, 150], [16, 160], [17, 170], [18, 180], [19, 190], [20, 200], [21, 210], [22, 220], [23, 230], [24, 240], [25, 250], [26, 260], [27, 270], [28, 280], [29, 290], [30, 300], [31, 310], [32, 320], [33, 330], [34, 340], [35, 350], [36, 360], [37, 370], [38, 380], [39, 390], [40, 400], [41, 410], [42, 420], [43, 430], [44, 440], [45, 450], [46, 460], [47, 470], [48, 480], [49, 490], [50, 500], [51, 510], [52, 520], [53, 530], [54, 540], [55, 550], [56, 560], [57, 570], [58, 580], [59, 590], [60, 600], [61, 610], [62, 620], [63, 630], [64, 640], [65, 650], [66, 660], [67, 670], [68, 680], [69, 690], [70, 700], [71, 710], [72, 720], [73, 730], [74, 740], [75, 750], [76, 760], [77, 770], [78, 780], [79, 790], [80, 800], [81, 810], [82, 820], [83, 830], [84, 840], [85, 850], [86, 860], [87, 870], [88, 880], [89, 890], [90, 900], [91, 910], [92, 920], [93, 930], [94, 940], [95, 950], [96, 960], [97, 970], [98, 980], [99, 990]} diff --git a/stdlib/regression/test05.t b/stdlib/regression/test05.t index e097cb5bf..fd2e997ac 100644 --- a/stdlib/regression/test05.t +++ b/stdlib/regression/test05.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test05.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test05.lama -o test $ ./test Cached: 1 Cached: 1 diff --git a/stdlib/regression/test06.t b/stdlib/regression/test06.t index 2397dcd6d..1bd844705 100644 --- a/stdlib/regression/test06.t +++ b/stdlib/regression/test06.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test06.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test06.lama -o test $ ./test Flattening: 0 Flattening: {0, 0, 0, 0} diff --git a/stdlib/regression/test07.t b/stdlib/regression/test07.t index 176c7e006..7008dfa47 100644 --- a/stdlib/regression/test07.t +++ b/stdlib/regression/test07.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test07.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test07.lama -o test $ ./test HashTab internal structure: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {[{1, 2, 3}, 100]}, 0, 0, 0] HashTab internal structure: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {[{1, 2, 3}, 200], [{1, 2, 3}, 100]}, 0, 0, 0] diff --git a/stdlib/regression/test08.t b/stdlib/regression/test08.t index 378b1d134..d8ea8e497 100644 --- a/stdlib/regression/test08.t +++ b/stdlib/regression/test08.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test08.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test08.lama -o test $ ./test 6 120 diff --git a/stdlib/regression/test09.t b/stdlib/regression/test09.t index a12501b0c..64cff417a 100644 --- a/stdlib/regression/test09.t +++ b/stdlib/regression/test09.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test09.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test09.lama -o test $ ./test Parsing a*| against "aa"... Succ ({"a", "a"}) Parsing a+| against "aa"... Succ ({"a", "a"}) diff --git a/stdlib/regression/test10.t b/stdlib/regression/test10.t index 75613f54f..fd21203a9 100644 --- a/stdlib/regression/test10.t +++ b/stdlib/regression/test10.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test10.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test10.lama -o test $ ./test Parsing "aaa" with many ... Succ ({"a", "a", "a"}) Parsing "ab" with bad_alter ... Succ ("ab") diff --git a/stdlib/regression/test11.t b/stdlib/regression/test11.t index 7efd2e871..227782b28 100644 --- a/stdlib/regression/test11.t +++ b/stdlib/regression/test11.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test11.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test11.lama -o test $ ./test Succ ("a") Succ (Add ("a", "a")) diff --git a/stdlib/regression/test12.t b/stdlib/regression/test12.t index ba857ec2b..04b3b742f 100644 --- a/stdlib/regression/test12.t +++ b/stdlib/regression/test12.t @@ -1,5 +1,4 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test12.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test12.lama -o test $ ./test Succ (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul ("a", "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a")) diff --git a/stdlib/regression/test13.t b/stdlib/regression/test13.t index 873cf0c62..f69935f4a 100644 --- a/stdlib/regression/test13.t +++ b/stdlib/regression/test13.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test13.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test13.lama -o test $ ./test Succ (Add ("a", Sub ("a", "a"))) Succ (Mul (Div (Mul ("a", "a"), "a"), "a")) diff --git a/stdlib/regression/test14.t b/stdlib/regression/test14.t index c6a2f32a7..09e8f8c18 100644 --- a/stdlib/regression/test14.t +++ b/stdlib/regression/test14.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test14.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test14.lama -o test $ ./test Succ (Add ("a", Sub ("a", "a"))) Succ (Mul (Div (Mul ("a", "a"), "a"), "a")) diff --git a/stdlib/regression/test15.t b/stdlib/regression/test15.t index 86786f3db..f7830e133 100644 --- a/stdlib/regression/test15.t +++ b/stdlib/regression/test15.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test15.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test15.lama -o test $ ./test Succ (Eq ("a", "a")) Succ (Eq (Mul ("a", "a"), Mul ("a", "a"))) diff --git a/stdlib/regression/test16.t b/stdlib/regression/test16.t index 6365c1431..ff411c4b5 100644 --- a/stdlib/regression/test16.t +++ b/stdlib/regression/test16.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test16.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test16.lama -o test $ ./test Succ (Eq ("a", "a")) Succ (Eq ("b", "b")) diff --git a/stdlib/regression/test17.t b/stdlib/regression/test17.t index d38333431..d6f242b37 100644 --- a/stdlib/regression/test17.t +++ b/stdlib/regression/test17.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test17.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test17.lama -o test $ ./test Lazy body: 0 Lazy body: 1 diff --git a/stdlib/regression/test18.t b/stdlib/regression/test18.t index 72a01879a..c10a41179 100644 --- a/stdlib/regression/test18.t +++ b/stdlib/regression/test18.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test18.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test18.lama -o test $ ./test 1 =?= 1 = 0 symmetricity: ok diff --git a/stdlib/regression/test20.t b/stdlib/regression/test20.t index 7bff5b1e6..04ba202ab 100644 --- a/stdlib/regression/test20.t +++ b/stdlib/regression/test20.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test20.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test20.lama -o test $ ./test Empty Node (0, Empty, Empty) diff --git a/stdlib/regression/test21.t b/stdlib/regression/test21.t index 4d97bd002..7435cc4ef 100644 --- a/stdlib/regression/test21.t +++ b/stdlib/regression/test21.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test21.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test21.lama -o test $ ./test 1 1 diff --git a/stdlib/regression/test22.t b/stdlib/regression/test22.t index f926a76c9..9309f39d3 100644 --- a/stdlib/regression/test22.t +++ b/stdlib/regression/test22.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test22.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test22.lama -o test $ ./test 0 {1, 2, 3, 4} diff --git a/stdlib/regression/test23.t b/stdlib/regression/test23.t index fa9a04daa..0306c0c36 100644 --- a/stdlib/regression/test23.t +++ b/stdlib/regression/test23.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test23.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test23.lama -o test $ ./test 1 {2, 3, 4} diff --git a/stdlib/regression/test24.t b/stdlib/regression/test24.t index e48bb1d9e..0d8edd5e8 100644 --- a/stdlib/regression/test24.t +++ b/stdlib/regression/test24.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test24.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test24.lama -o test $ ./test 3 {1} diff --git a/stdlib/regression/test25.t b/stdlib/regression/test25.t index 091f14033..b3079e9d7 100644 --- a/stdlib/regression/test25.t +++ b/stdlib/regression/test25.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test25.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test25.lama -o test $ ./test Cloning int: 5 Cloning string: abc diff --git a/stdlib/regression/test26.t b/stdlib/regression/test26.t index 4319c15cf..7f5907b36 100644 --- a/stdlib/regression/test26.t +++ b/stdlib/regression/test26.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test26.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test26.lama -o test $ ./test Number of commands-line arguments: 1 arg [0 ] = "./test" diff --git a/stdlib/regression/test27.t b/stdlib/regression/test27.t index 158b1e5a8..d2e743c03 100644 --- a/stdlib/regression/test27.t +++ b/stdlib/regression/test27.t @@ -1,5 +1,4 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test27.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test27.lama -o test $ ./test Yes diff --git a/stdlib/regression/test28.t b/stdlib/regression/test28.t index 4afff951a..0972fd855 100644 --- a/stdlib/regression/test28.t +++ b/stdlib/regression/test28.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test28.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test28.lama -o test $ ./test Succ (Seq ("a", "b")) Succ (Alt ("a")) diff --git a/stdlib/regression/test29.t b/stdlib/regression/test29.t index 507ffc622..a1edb8939 100644 --- a/stdlib/regression/test29.t +++ b/stdlib/regression/test29.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test29.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test29.lama -o test $ ./test Succ (Seq ("a", "b")) Succ (Alt ("a")) diff --git a/stdlib/regression/test32.t b/stdlib/regression/test32.t index c1112dde3..c1c48950c 100644 --- a/stdlib/regression/test32.t +++ b/stdlib/regression/test32.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test32.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test32.lama -o test $ ./test Flattening: 0 Flattening: {A, B, C, D} diff --git a/stdlib/regression/test33.t b/stdlib/regression/test33.t index 4d79e62c9..8681e6527 100644 --- a/stdlib/regression/test33.t +++ b/stdlib/regression/test33.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test33.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test33.lama -o test $ ./test {}.string: 0 {}.stringcat: diff --git a/stdlib/regression/test34.t b/stdlib/regression/test34.t index f896fa062..5ac075f5b 100644 --- a/stdlib/regression/test34.t +++ b/stdlib/regression/test34.t @@ -1,6 +1,5 @@ This file was autogenerated. - $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test34.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack' - /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker + $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test34.lama -o test $ ./test - ' " ` % \ \r + ' " ` % \ \h @ $ # ; [ ]