With this MR, and with: https://github.com/certik/stdlib/tree/lfortran2 (which is based off of the latest stdlib master), commit 9a616bed580e97fc6770736a4be3c4cb96726c96, I get:
$ make
[ 0%] Generating stdlib_version.f90
[ 0%] Generating stdlib_ascii.f90
[ 0%] Generating stdlib_bitsets.f90
[ 1%] Generating stdlib_bitsets_64.f90
[ 1%] Generating stdlib_bitsets_large.f90
[ 1%] Generating stdlib_hash_32bit.f90
[ 2%] Generating stdlib_hash_32bit_fnv.f90
[ 2%] Generating stdlib_hash_32bit_nm.f90
[ 3%] Generating stdlib_hash_32bit_water.f90
[ 3%] Generating stdlib_hash_64bit.f90
[ 3%] Generating stdlib_hash_64bit_fnv.f90
[ 4%] Generating stdlib_hash_64bit_pengy.f90
[ 4%] Generating stdlib_hash_64bit_spookyv2.f90
[ 5%] Generating stdlib_io.f90
[ 5%] Generating stdlib_io_npy.f90
[ 5%] Generating stdlib_io_npy_load.f90
[ 6%] Generating stdlib_io_npy_save.f90
[ 6%] Generating stdlib_kinds.f90
[ 7%] Generating stdlib_linalg.f90
[ 7%] Generating stdlib_linalg_diag.f90
[ 7%] Generating stdlib_linalg_outer_product.f90
[ 7%] Generating stdlib_math.f90
[ 7%] Generating stdlib_math_all_close.f90
[ 7%] Generating stdlib_math_arange.f90
[ 7%] Generating stdlib_math_diff.f90
[ 8%] Generating stdlib_math_is_close.f90
[ 8%] Generating stdlib_math_linspace.f90
[ 9%] Generating stdlib_math_logspace.f90
[ 10%] Generating stdlib_optval.f90
[ 10%] Generating stdlib_quadrature.f90
[ 10%] Generating stdlib_quadrature_simps.f90
[ 11%] Generating stdlib_quadrature_trapz.f90
[ 12%] Generating stdlib_random.f90
[ 12%] Generating stdlib_selection.f90
[ 13%] Generating stdlib_sorting.f90
[ 13%] Generating stdlib_sorting_ord_sort.f90
[ 13%] Generating stdlib_sorting_sort.f90
[ 14%] Generating stdlib_sorting_sort_index.f90
[ 14%] Generating stdlib_stats.f90
[ 15%] Generating stdlib_stats_corr.f90
[ 15%] Generating stdlib_stats_cov.f90
[ 16%] Generating stdlib_stats_distribution_exponential.f90
[ 16%] Generating stdlib_stats_distribution_normal.f90
[ 17%] Generating stdlib_stats_distribution_uniform.f90
[ 17%] Generating stdlib_stats_mean.f90
[ 18%] Generating stdlib_stats_median.f90
[ 18%] Generating stdlib_stats_moment.f90
[ 19%] Generating stdlib_stats_moment_all.f90
[ 19%] Generating stdlib_stats_moment_mask.f90
[ 19%] Generating stdlib_stats_moment_scalar.f90
[ 19%] Generating stdlib_stats_var.f90
[ 20%] Generating stdlib_string_type.f90
[ 20%] Generating stdlib_string_type_constructor.f90
[ 20%] Generating stdlib_strings.f90
[ 21%] Generating stdlib_strings_to_string.f90
Scanning dependencies of target fortran_stdlib
[ 21%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_kinds.f90.o
[ 21%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_optval.f90.o
[ 21%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_error.f90.o
[ 21%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/f08estop.f90.o
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/f08estop.f90:38:1
|
38 | endif
| ^^^^^ help: write this as 'end if'
Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that needs to be fixed).
[ 22%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_array.f90.o
[ 22%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_ascii.f90.o
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/stdlib_ascii.f90:233:9
|
233 | endif
| ^^^^^ help: write this as 'end if'
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/stdlib_ascii.f90:249:9
|
249 | endif
| ^^^^^ help: write this as 'end if'
Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that needs to be fixed).
[ 22%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_bitsets.f90.o
[ 23%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_bitsets_64.f90.o
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/stdlib_bitsets_64.f90:1206:9
|
1206 | endif
| ^^^^^ help: write this as 'end if'
Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that needs to be fixed).
[ 23%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_bitsets_large.f90.o
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/stdlib_bitsets_large.f90:1437:9
|
1437 | endif
| ^^^^^ help: write this as 'end if'
Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that needs to be fixed).
[ 24%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_32bit.f90.o
[ 24%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_32bit_fnv.f90.o
[ 24%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_32bit_nm.f90.o
[ 25%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_32bit_water.f90.o
[ 25%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_64bit.f90.o
[ 26%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_64bit_fnv.f90.o
[ 26%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_64bit_pengy.f90.o
[ 26%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_hash_64bit_spookyv2.f90.o
[ 26%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_string_type.f90.o
[ 27%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_io.f90.o
style suggestion: Use 'end if' instead of 'endif'
--> /Users/ondrej/repos/lfortran/stdlib/src/stdlib_io.f90:863:7
|
863 | endif
| ^^^^^ help: write this as 'end if'
Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that needs to be fixed).
[ 27%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_io_npy.f90.o
[ 27%] Building Fortran object src/CMakeFiles/fortran_stdlib.dir/stdlib_strings.f90.o
Internal Compiler Error: Unhandled exception
Traceback (most recent call last):
File "/Users/ondrej/repos/lfortran/lfortran/src/bin/lfortran.cpp", line 1608
return compile_to_object_file(arg_file, outfile, false,
File "/Users/ondrej/repos/lfortran/lfortran/src/bin/lfortran.cpp", line 748
result = fe.get_asr2(input, lm, diagnostics);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/fortran_evaluator.cpp", line 218
Result<ASR::TranslationUnit_t*> res2 = get_asr3(*ast, diagnostics);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/fortran_evaluator.cpp", line 240
compiler_options.symtab_only);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_to_asr.cpp", line 46
auto res = body_visitor(al, ast, diagnostics, unit);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 1426
BodyVisitor b(al, unit, diagnostics);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 108
visit_ast(*x.m_items[i]);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4595
void visit_ast(const ast_t &b) { visit_ast_t(b, self()); }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4553
case astType::unit: { v.visit_unit((const unit_t &)x); return; }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4598
void visit_mod(const mod_t &b) { visit_mod_t(b, self()); }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4207
case modType::Module: { v.visit_Module((const Module_t &)x); return; }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 817
visit_program_unit(*x.m_contains[i]);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4603
void visit_program_unit(const program_unit_t &b) { visit_program_unit_t(b, self()); }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4219
case program_unitType::Procedure: { v.visit_Procedure((const Procedure_t &)x); return; }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 924
transform_stmts(body, x.n_body, x.m_body);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 85
this->visit_stmt(*m_body[i]);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4636
void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/ast.h", line 4306
case stmtType::Assign: { v.visit_Assign((const Assign_t &)x); return; }
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 971
value_type, target_type);
File "/Users/ondrej/repos/lfortran/lfortran/src/lfortran/semantics/asr_implicit_cast_rules.h", line 117
LFORTRAN_ASSERT(dest_type2->type < num_types);
AssertFailed: dest_type2->type < 6
make[2]: *** [src/CMakeFiles/fortran_stdlib.dir/stdlib_strings.f90.o] Error 1
make[1]: *** [src/CMakeFiles/fortran_stdlib.dir/all] Error 2
make: *** [all] Error 2
Browsing the commits that I had to make: https://github.com/certik/stdlib/commits/lfortran2, the most common issues are:
-
The most difficult issue is with overloaded <
and=
operators for astring_t
type, as they are used a lot, and they all seem to fail with ICE. -
transfer
-
floor
with 3 arguments -
shiftl
,shiftr
,ishiftc
, ` -
character_storage_size
-
a bug in block
/associate
, uninitialized vector -
large int conversion (beyond 64bit) -
keyword arguments in generic functions