Skip to content

Draft: Stdlib sprint

Ondřej Čertík requested to merge certik/lfortran:stdlib_gagan into master

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 a string_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
Edited by Ondřej Čertík

Merge request reports