Open avelure opened 1 month ago
Second part of log:
file: ./7c96d591351ae9d499df39a80e42815cb94e68692fd17fac9e52bb9001ed70ed
nvc: ../src/parse.c:4622: tree_t p_primary(tree_t): Assertion `is_scanned_as_psl()' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555564bc36] /nvc/build/../src/parse.c:4622 p_primary
case tNONDETV:
--> assert(is_scanned_as_psl());
return p_psl_builtin_function_call();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c393] /nvc/build/../src/parse.c:4917 p_expression_with_head
--> tree_t expr = p_relation(head);
[0x55555564e270] /nvc/build/../src/parse.c:0 p_range
[0x55555566d97f] /nvc/build/../src/parse.c:2958 p_range_constraint
{
--> tree_t r = p_range(expr1);
solve_types(nametab, r, constraint);
[0x55555563caa0] p_constraint
[0x55555563caa0] /nvc/build/../src/parse.c:4226 p_subtype_indication
--> p_constraint(type);
}
[0x55555562f76b] /nvc/build/../src/parse.c:6785 p_subtype_declaration
--> type_t sub = p_subtype_indication();
[0x555555636f9e] p_package_declarative_item
[0x555555636f9e] p_package_declarative_part
[0x555555636f9e] /nvc/build/../src/parse.c:8820 p_package_declaration
--> p_package_declarative_part(pack);
[0x555555615eac] /nvc/build/../src/parse.c:9390 p_primary_unit
else
--> p_package_declaration(unit);
break;
[0x5555556135e3] p_library_unit
[0x5555556135e3] p_design_unit
[0x5555556135e3] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./829c8caa83d8e941a9cf4d5dbc823735e159a32d4ecd35e5bd95d0b13b8e34af
nvc: ../src/parse.c:4622: tree_t p_primary(tree_t): Assertion `is_scanned_as_psl()' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555564bc36] /nvc/build/../src/parse.c:4622 p_primary
case tNONDETV:
--> assert(is_scanned_as_psl());
return p_psl_builtin_function_call();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c4e2] /nvc/build/../src/parse.c:1500 p_expression_with_head
--> tree_t right = (*right_fn)(NULL);
tree_set_loc(expr, CURRENT_LOC);
[0x555555650149] /nvc/build/../src/parse.c:4476 p_aggregate_or_expression
--> tree_t head = p_expression();
[0x55555564b03e] /nvc/build/../src/parse.c:4585 p_primary
case tLPAREN:
--> return p_aggregate_or_expression();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c393] /nvc/build/../src/parse.c:4917 p_expression_with_head
--> tree_t expr = p_relation(head);
[0x55555565dadd] p_condition
[0x55555565dadd] /nvc/build/../src/parse.c:6971 p_assertion
--> tree_set_value(s, p_condition());
[0x555555656f57] p_assertion_statement
[0x555555656f57] /nvc/build/../src/parse.c:10489 p_sequential_statement
case tASSERT:
--> return p_assertion_statement(label);
[0x555555689c2e] p_sequence_of_statements
[0x555555689c2e] p_process_statement_part
[0x555555689c2e] /nvc/build/../src/parse.c:8483 p_process_statement
--> p_process_statement_part(t);
[0x55555561d2ff] p_concurrent_statement
[0x55555561d2ff] /nvc/build/../src/parse.c:10946 p_concurrent_statement_or_psl
else
--> tree_add_stmt(parent, p_concurrent_statement());
}
[0x555555618e70] p_architecture_statement_part
[0x555555618e70] p_architecture_body
[0x555555618e70] /nvc/build/../src/parse.c:13094 p_secondary_unit
case tARCHITECTURE:
--> p_architecture_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./8a914f40d873ff7bec49e7993899821246958566831a90b871c3bbc1081a4566
nvc: ../src/simp.c:1454: tree_t simp_range(tree_t): Assertion `attr == ATTR_RANGE || attr == ATTR_REVERSE_RANGE' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x5555557213da] simp_range
[0x5555557213da] /nvc/build/../src/simp.c:1716 simp_tree
case T_RANGE:
--> return simp_range(t);
case T_SEQUENCE:
[0x555555765051] /nvc/build/../src/object.c:715 object_rewrite
for (;;) {
--> object_t *new = (*ctx->post_fn[object->tag])(object, ctx->context);
if (new == object || (object = object_rewrite(new, ctx)) == NULL)
[0x555555764dfd] /nvc/build/../src/object.c:790 object_rewrite
object_t *o = object->items[n].obj_array->items[i];
--> if ((o = object_rewrite(o, ctx))) {
object_write_barrier(object, o);
[0x555555764d05] /nvc/build/../src/object.c:779 object_rewrite
object_t *o = object->items[n].object;
--> object->items[n].object = object_rewrite(o, ctx);
object_write_barrier(object, o);
[0x555555764dfd] /nvc/build/../src/object.c:790 object_rewrite
object_t *o = object->items[n].obj_array->items[i];
--> if ((o = object_rewrite(o, ctx))) {
object_write_barrier(object, o);
[0x5555556ada40] /nvc/build/../src/tree.c:1310 tree_rewrite
--> object_t *result = object_rewrite(&(t->object), &ctx);
free(ctx.cache);
[0x555555749ae5] ../src/simp.c:1805 analyse_file
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./a3855bb94f65948ac0f8ca3555d79a537faeeb4cf8fd8273c3dbdea2e586c70f
nvc: ../src/tree.c:587: tree_kind_t tree_kind(tree_t): Assertion `t != NULL' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555573bafa] tree_kind
[0x55555573bafa] ../src/tree.c:655 is_subprogram
[0x55555581302f] /nvc/build/../src/names.c:792 make_visible
return; // Ignore ports in component, etc.
--> else if (is_subprogram(it->container))
return; // Do not warn when subprogram parameters hide ports
[0x5555558262cd] /nvc/build/../src/names.c:1038 insert_generics
--> make_visible(s, name, decl, DIRECT, s);
}
[0x555555636d58] p_package_header
[0x555555636d58] /nvc/build/../src/parse.c:8818 p_package_declaration
if (standard() >= STD_08)
--> p_package_header(pack);
[0x5555556372a2] p_package_declarative_item
[0x5555556372a2] p_package_declarative_part
[0x5555556372a2] /nvc/build/../src/parse.c:8820 p_package_declaration
--> p_package_declarative_part(pack);
[0x555555615eac] /nvc/build/../src/parse.c:9390 p_primary_unit
else
--> p_package_declaration(unit);
break;
[0x5555556135e3] p_library_unit
[0x5555556135e3] p_design_unit
[0x5555556135e3] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./a91350302e6a58b6a7a65cc634a1bc58bdec9977c0abd21f41d017ae339a972d
nvc: ../src/parse.c:4622: tree_t p_primary(tree_t): Assertion `is_scanned_as_psl()' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555564bc36] /nvc/build/../src/parse.c:4622 p_primary
case tNONDETV:
--> assert(is_scanned_as_psl());
return p_psl_builtin_function_call();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564ea23] /nvc/build/../src/parse.c:1500 p_relation
--> tree_t right = (*right_fn)(NULL);
tree_set_loc(expr, CURRENT_LOC);
[0x55555564c393] /nvc/build/../src/parse.c:4917 p_expression_with_head
--> tree_t expr = p_relation(head);
[0x55555565bd56] p_condition
[0x55555565bd56] p_next_statement
[0x55555565bd56] /nvc/build/../src/parse.c:10515 p_sequential_statement
case tNEXT:
--> return p_next_statement(label);
[0x55555565853e] p_sequence_of_statements
[0x55555565853e] p_loop_statement
[0x55555565853e] /nvc/build/../src/parse.c:10509 p_sequential_statement
case tFOR:
--> return p_loop_statement(label);
[0x55555562693f] p_sequence_of_statements
[0x55555562693f] /nvc/build/../src/parse.c:8287 p_subprogram_body
--> p_sequence_of_statements(spec);
[0x55555562213f] /nvc/build/../src/parse.c:12931 p_package_body_declarative_item
else
--> tree_add_decl(parent, p_subprogram_body(spec));
}
[0x555555620858] p_package_body_declarative_part
[0x555555620858] /nvc/build/../src/parse.c:13064 p_package_body
--> p_package_body_declarative_part(body);
[0x5555556180b3] /nvc/build/../src/parse.c:13098 p_secondary_unit
case tPACKAGE:
--> p_package_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./c74e31b83a3bd35b2478fef367a3f4b93f8dfeadbe1d7574d81acbbaf4510377
nvc: ../src/tree.c:587: tree_kind_t tree_kind(tree_t): Assertion `t != NULL' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555573bafa] tree_kind
[0x55555573bafa] ../src/tree.c:655 is_subprogram
[0x55555581302f] /nvc/build/../src/names.c:792 make_visible
return; // Ignore ports in component, etc.
--> else if (is_subprogram(it->container))
return; // Do not warn when subprogram parameters hide ports
[0x555555627498] /nvc/build/../src/parse.c:7265 p_variable_declaration
tree_add_decl(parent, t);
--> insert_name(nametab, t, it->ident);
sem_check(t, nametab);
[0x5555556220ba] /nvc/build/../src/parse.c:12936 p_package_body_declarative_item
case tSHARED:
--> p_variable_declaration(parent);
break;
[0x555555620858] p_package_body_declarative_part
[0x555555620858] /nvc/build/../src/parse.c:13064 p_package_body
--> p_package_body_declarative_part(body);
[0x555555622239] /nvc/build/../src/parse.c:12987 p_package_body_declarative_item
require_std(STD_08, "nested package declarations");
--> tree_add_decl(parent, p_package_body(NULL));
}
[0x555555620858] p_package_body_declarative_part
[0x555555620858] /nvc/build/../src/parse.c:13064 p_package_body
--> p_package_body_declarative_part(body);
[0x5555556180b3] /nvc/build/../src/parse.c:13098 p_secondary_unit
case tPACKAGE:
--> p_package_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./d3572db6b0680175bbdb7486d2444e480db8de0caff43a0f2230a70a70690086
nvc: ../src/tree.c:587: tree_kind_t tree_kind(tree_t): Assertion `t != NULL' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555573bafa] tree_kind
[0x55555573bafa] ../src/tree.c:655 is_subprogram
[0x55555581302f] /nvc/build/../src/names.c:792 make_visible
return; // Ignore ports in component, etc.
--> else if (is_subprogram(it->container))
return; // Do not warn when subprogram parameters hide ports
[0x55555562f4f9] /nvc/build/../src/parse.c:6946 p_constant_declaration
--> insert_name(nametab, t, it->ident);
sem_check(t, nametab);
[0x555555636e68] p_package_declarative_item
[0x555555636e68] p_package_declarative_part
[0x555555636e68] /nvc/build/../src/parse.c:8820 p_package_declaration
--> p_package_declarative_part(pack);
[0x5555556372a2] p_package_declarative_item
[0x5555556372a2] p_package_declarative_part
[0x5555556372a2] /nvc/build/../src/parse.c:8820 p_package_declaration
--> p_package_declarative_part(pack);
[0x555555615eac] /nvc/build/../src/parse.c:9390 p_primary_unit
else
--> p_package_declaration(unit);
break;
[0x5555556135e3] p_library_unit
[0x5555556135e3] p_design_unit
[0x5555556135e3] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./d87cece15bccf62714ce1bdd82abbcdacc5f29bc31060c1dc3a56bb91295073b
*** Caught signal 11 (SEGV_MAPERR) [address=0x8, ip=0x55555581fcea] ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x55555581fcea] ../src/diag.c:1131 begin_overload_resolution
[0x555555829385] solve_pcall
[0x555555829385] /nvc/build/../src/names.c:4862 _solve_types
case T_PROT_PCALL:
--> return solve_pcall(tab, expr);
case T_LITERAL:
[0x55555582880a] /nvc/build/../src/names.c:4918 solve_types
type_set_add(tab, constraint, NULL);
--> type_t type = _solve_types(tab, expr);
type_set_pop(tab);
[0x55555565b81f] p_procedure_call_statement
[0x55555565b81f] /nvc/build/../src/parse.c:10564 p_sequential_statement
case tPARAMETER:
--> return p_procedure_call_statement(label, name);
[0x55555562693f] p_sequence_of_statements
[0x55555562693f] /nvc/build/../src/parse.c:8287 p_subprogram_body
--> p_sequence_of_statements(spec);
[0x55555562213f] /nvc/build/../src/parse.c:12931 p_package_body_declarative_item
else
--> tree_add_decl(parent, p_subprogram_body(spec));
}
[0x555555620858] p_package_body_declarative_part
[0x555555620858] /nvc/build/../src/parse.c:13064 p_package_body
--> p_package_body_declarative_part(body);
[0x5555556180b3] /nvc/build/../src/parse.c:13098 p_secondary_unit
case tPACKAGE:
--> p_package_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./eb0266416cde0a67a4ee42260ebb31bb3a0701c1bb2115b998b75d59853bc619
nvc: ../src/tree.c:587: tree_kind_t tree_kind(tree_t): Assertion `t != NULL' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555573bafa] tree_kind
[0x55555573bafa] ../src/tree.c:655 is_subprogram
[0x55555581302f] /nvc/build/../src/names.c:792 make_visible
return; // Ignore ports in component, etc.
--> else if (is_subprogram(it->container))
return; // Do not warn when subprogram parameters hide ports
[0x5555558262cd] /nvc/build/../src/names.c:1038 insert_generics
--> make_visible(s, name, decl, DIRECT, s);
}
[0x555555636d58] p_package_header
[0x555555636d58] /nvc/build/../src/parse.c:8818 p_package_declaration
if (standard() >= STD_08)
--> p_package_header(pack);
[0x5555556372a2] p_package_declarative_item
[0x5555556372a2] p_package_declarative_part
[0x5555556372a2] /nvc/build/../src/parse.c:8820 p_package_declaration
--> p_package_declarative_part(pack);
[0x555555615eac] /nvc/build/../src/parse.c:9390 p_primary_unit
else
--> p_package_declaration(unit);
break;
[0x5555556135e3] p_library_unit
[0x5555556135e3] p_design_unit
[0x5555556135e3] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./eeba3cffabd41ada6f164e360cae4c785ff7bb94130ed6a22fb24c4587533578
nvc: ../src/parse.c:4622: tree_t p_primary(tree_t): Assertion `is_scanned_as_psl()' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555564bc36] /nvc/build/../src/parse.c:4622 p_primary
case tNONDETV:
--> assert(is_scanned_as_psl());
return p_psl_builtin_function_call();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c4e2] /nvc/build/../src/parse.c:1500 p_expression_with_head
--> tree_t right = (*right_fn)(NULL);
tree_set_loc(expr, CURRENT_LOC);
[0x555555650149] /nvc/build/../src/parse.c:4476 p_aggregate_or_expression
--> tree_t head = p_expression();
[0x55555564b03e] /nvc/build/../src/parse.c:4585 p_primary
case tLPAREN:
--> return p_aggregate_or_expression();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c393] /nvc/build/../src/parse.c:4917 p_expression_with_head
--> tree_t expr = p_relation(head);
[0x55555565dadd] p_condition
[0x55555565dadd] /nvc/build/../src/parse.c:6971 p_assertion
--> tree_set_value(s, p_condition());
[0x555555656f57] p_assertion_statement
[0x555555656f57] /nvc/build/../src/parse.c:10489 p_sequential_statement
case tASSERT:
--> return p_assertion_statement(label);
[0x555555689c2e] p_sequence_of_statements
[0x555555689c2e] p_process_statement_part
[0x555555689c2e] /nvc/build/../src/parse.c:8483 p_process_statement
--> p_process_statement_part(t);
[0x55555561d2ff] p_concurrent_statement
[0x55555561d2ff] /nvc/build/../src/parse.c:10946 p_concurrent_statement_or_psl
else
--> tree_add_stmt(parent, p_concurrent_statement());
}
[0x555555618e70] p_architecture_statement_part
[0x555555618e70] p_architecture_body
[0x555555618e70] /nvc/build/../src/parse.c:13094 p_secondary_unit
case tARCHITECTURE:
--> p_architecture_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./f20a87db867edc832fa714c1d5254fcecc167caef43f9fe9018c9e30da7ed243
nvc: ../src/parse.c:4622: tree_t p_primary(tree_t): Assertion `is_scanned_as_psl()' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x55555564bc36] /nvc/build/../src/parse.c:4622 p_primary
case tNONDETV:
--> assert(is_scanned_as_psl());
return p_psl_builtin_function_call();
[0x55555564efb9] p_unary_expression
[0x55555564efb9] /nvc/build/../src/parse.c:4704 p_factor
--> tree_t operand = p_unary_expression(head);
[0x55555564bf73] /nvc/build/../src/parse.c:4743 p_term
--> tree_t term = p_factor(head);
[0x55555564fb5f] /nvc/build/../src/parse.c:4798 p_simple_expression
else
--> expr = p_term(head);
[0x55555564f593] /nvc/build/../src/parse.c:4836 p_shift_expression
--> tree_t shift = p_simple_expression(head);
[0x55555564e6c3] /nvc/build/../src/parse.c:4893 p_relation
--> tree_t rel = p_shift_expression(head);
[0x55555564c393] /nvc/build/../src/parse.c:4917 p_expression_with_head
--> tree_t expr = p_relation(head);
[0x555555664bd8] p_actual_part
[0x555555664bd8] /nvc/build/../src/parse.c:3257 p_association_element
--> tree_t value = p_actual_part(class, kind);
[0x555555665bf1] p_association_list
[0x555555665bf1] /nvc/build/../src/parse.c:3307 p_actual_parameter_part
--> p_association_list(call, call, F_SUBPROGRAM);
}
[0x55555565b4f3] p_procedure_call_statement
[0x55555565b4f3] /nvc/build/../src/parse.c:10564 p_sequential_statement
case tPARAMETER:
--> return p_procedure_call_statement(label, name);
[0x55555565853e] p_sequence_of_statements
[0x55555565853e] p_loop_statement
[0x55555565853e] /nvc/build/../src/parse.c:10509 p_sequential_statement
case tFOR:
--> return p_loop_statement(label);
[0x55555562693f] p_sequence_of_statements
[0x55555562693f] /nvc/build/../src/parse.c:8287 p_subprogram_body
--> p_sequence_of_statements(spec);
[0x55555562213f] /nvc/build/../src/parse.c:12931 p_package_body_declarative_item
else
--> tree_add_decl(parent, p_subprogram_body(spec));
}
[0x555555620858] p_package_body_declarative_part
[0x555555620858] /nvc/build/../src/parse.c:13064 p_package_body
--> p_package_body_declarative_part(body);
[0x5555556180b3] /nvc/build/../src/parse.c:13098 p_secondary_unit
case tPACKAGE:
--> p_package_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
file: ./fc2d4e66b3ea007a59d8becdf1e6eb8a8881ff2eb3f90cd5667bf3f19fcc3471
find: '/usr/local/bin/nvc' terminated by signal 11
file: ./ff398ee0f80582493bc2ba306f2b613eb23628a205de984eb0f64174e1d2c4f2
nvc: ../src/sem.c:3795: _Bool sem_check_array_aggregate(tree_t, nametab_t *): Assertion `akind == A_CONCAT || akind == A_SLICE' failed.
*** Caught signal 6 (SIGABRT) ***
[0x55555560d299] /nvc/build/../src/util.c:875 signal_handler
--> show_stacktrace();
[0x7ffff0b1351f] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b679fc] (/usr/lib/x86_64-linux-gnu/libc.so.6) pthread_kill
[0x7ffff0b13475] (/usr/lib/x86_64-linux-gnu/libc.so.6) raise
[0x7ffff0af97f2] (/usr/lib/x86_64-linux-gnu/libc.so.6) abort
[0x7ffff0af971a] (/usr/lib/x86_64-linux-gnu/libc.so.6)
[0x7ffff0b0ae95] (/usr/lib/x86_64-linux-gnu/libc.so.6) __assert_fail
[0x5555556cbe2c] sem_check_array_aggregate
[0x5555556cbe2c] /nvc/build/../src/sem.c:3996 sem_check_aggregate
if (type_is_array(composite_type))
--> return sem_check_array_aggregate(t, tab);
else
[0x5555556c8789] /nvc/build/../src/sem.c:4672 sem_check_qualified
--> if (!sem_check(value, tab))
return false;
[0x5555556f4913] /nvc/build/../src/sem.c:2592 sem_check_waveforms
--> if (!sem_check(value, tab))
return false;
[0x5555556d0ceb] /nvc/build/../src/sem.c:2972 sem_check_cond_assign
--> if (!sem_check_waveforms(a, target, tab))
return false;
[0x55555568c491] /nvc/build/../src/parse.c:10874 p_concurrent_signal_assignment_statement
if (label) insert_name(nametab, t, NULL);
--> sem_check(t, nametab);
return t;
[0x55555561bd04] p_concurrent_statement
[0x55555561bd04] /nvc/build/../src/parse.c:10946 p_concurrent_statement_or_psl
else
--> tree_add_stmt(parent, p_concurrent_statement());
}
[0x555555618e70] p_architecture_statement_part
[0x555555618e70] p_architecture_body
[0x555555618e70] /nvc/build/../src/parse.c:13094 p_secondary_unit
case tARCHITECTURE:
--> p_architecture_body(unit);
break;
[0x555555613593] p_library_unit
[0x555555613593] p_design_unit
[0x555555613593] /nvc/build/../src/parse.c:13236 parse
--> tree_t unit = p_design_unit();
[0x555555749617] /nvc/build/../src/common.c:2468 analyse_file
tree_t unit;
--> while (base_errors = error_count(), (unit = parse())) {
if (error_count() == base_errors) {
[0x5555555eeed7] analyse
[0x5555555eeed7] /nvc/build/../src/nvc.c:2135 process_command
case 'a':
--> return analyse(argc, argv, state);
case 'e':
[0x5555555ec042] /nvc/build/../src/nvc.c:2297 main
--> const int ret = process_command(argc, argv, &state);
find: '/usr/local/bin/nvc' terminated by signal 6
Hi @avelure! Your patch is not accessible anmore. Did you change it to private? Would be very interested in looking at your fuzzing setup. Did you use AFL or llvm's libfuzzer?
Sorry, I had forgotten to set the repo public. Should work now. It uses aflplusplus.
I can reproduce the error from file 12dc86da02baf50abcdb2d9777c5ff7f6ef12056c14535fd30c1ad9e50f71411
with the following more minimized example:
package foo_pkg is
end foo_pkg;
package body foo_pkg is
shared variable var : integer;
package bar_pkg is
end bar_pkg;
package body bar_pkg is
shared variable var : integer;
end package body bar_pkg;
end package body foo_pkg;
Edit: Files that trigger the same crash:
237dc1fae4aa4449167b52e5af0094718eba6de3b79c3676c1f186fd0589cc85
291f781a7966d1fd9f6d08d2319d1607c2e8eb00bfddfd1934373b86c504926e
2b65ad2cdb69369c35d7d777fd176d371435d69906e9636fcb1799c756dc834e
5167d85a877bda6ab1f16c5bdaabd10d0770f1fdffce7e8ea975c936ef622fc9
51fa4f1f438bd4398b99ad3f713af0426f7c83c68efc109d6970d0e465dd78ac
52c07ae78c40db41f4206f42bda1a2d7ff7e49219e3cd3e9753bd0f7c431860f
a3855bb94f65948ac0f8ca3555d79a537faeeb4cf8fd8273c3dbdea2e586c70f
c74e31b83a3bd35b2478fef367a3f4b93f8dfeadbe1d7574d81acbbaf4510377
d3572db6b0680175bbdb7486d2444e480db8de0caff43a0f2230a70a70690086
eb0266416cde0a67a4ee42260ebb31bb3a0701c1bb2115b998b75d59853bc619
I can reproduce the error from file 1725b8e09f4abd33a4be1451e6b69e2f56112371ad021eeffd3deb4e2334def1
with the following more minimized example:
package foo is
alias TO_OCTAL_STRING is ns;
end package foo;
Currently I'm just using the analyze switch for fuzzing which is a bit slow. I guess I could use the --syntax switch to parse the file, but it is missing some of the analysis switches like --psl, --relaxed and --error-limit, though it seems quite easy to add, so maybe I can make a pullrequest.
The --syntax
command has some issues at the moment: I don't think it works properly if a file contains multiple design units and NVC has been able to separate parsing from other checks for a long time. I think I'd rather remove it and add --no-save
flag to -a
that would skip saving the working library to disk.
You might want to try disabling LLVM while you're doing this (--disable-llvm
configure flag). Most Linux distributions have disabled lazy binding in recent years which means the whole LLVM library gets loaded at start-up regardless of whether it's used or not, and that thing is huge. Here's an example with bin/nvc
linked against libLLVM.so
:
Performance counter stats for './bin/nvc -a ../test/regress/wait1.vhd':
74,518,234 instructions # 1.50 insn per cycle
49,552,361 cycles
0.011137862 seconds time elapsed
0.005594000 seconds user
0.005594000 seconds sys
And with --disable-llvm
:
Performance counter stats for './x-interp/bin/nvc -a ../test/regress/wait1.vhd':
19,419,825 instructions # 1.53 insn per cycle
12,671,157 cycles
0.003238301 seconds time elapsed
0.003335000 seconds user
0.000000000 seconds sys
So ~4x faster.
Reproducer for error from file 181a6c3f1ee6985b3b3d3f5b38b8d6f81f5c826a761045cb7740b8d93a753314
with the following more minimized example:
ENTITY next_ent IS
END next_ent;
ARCHITECTURE arch OF next_ent IS
TYPE integer_array IS ARRAY (NATURAL RANGE <>) OF INTEGER;
FUNCTION func1(ia: integer_array := (1,2,3,next)) RETURN BOOLEAN;
BEGIN
END ARCHITECTURE arch;
Edit: Files that trigger the same crash:
209648284096242ef8e489ec9a8c9878d32f790438edcca953a49bd7bf7ad8f4
3d6eaf8db2d6639e23ef48375bf8637db2916b4fa93f1da0af569e929e0ec2a4
3f3d061108d3a7abc82e067554883df795dbce17ade7348fee15e17524275f5b
47354825eb49e9636e5c14b41152066c063dfb46c47ece41b84eceaef6ebcb87
4788c6e651f9bdbb83fccfa6b861cea794f91ca18db53483e637342df4f2d5d8
4e16949ec326542a03cb8ee829bf5203566412f9579e4450ebf336010a8a64a5
5f97485ea9e89ad928bdf5fffb747446d7d91688ebbe112bce0caa63c9dda2c6
7c96d591351ae9d499df39a80e42815cb94e68692fd17fac9e52bb9001ed70ed
829c8caa83d8e941a9cf4d5dbc823735e159a32d4ecd35e5bd95d0b13b8e34af
a91350302e6a58b6a7a65cc634a1bc58bdec9977c0abd21f41d017ae339a972d
eeba3cffabd41ada6f164e360cae4c785ff7bb94130ed6a22fb24c4587533578
f20a87db867edc832fa714c1d5254fcecc167caef43f9fe9018c9e30da7ed243
Reproducer for error from file 60bc12eff12e4f7e41dc5499ffb25c74da54d4f78c77d1200d3621e7a8d6ca30
with the following (slightly) more minimized example:
library ieee;
use ieee.std_logic_1164.all;
entity GENERIC_WHEN is
generic( FOO : std_logic_vector(1 downto 0) );
port( IN1 : in std_logic_vector(1 downto 0);
OUT1 : out std_logic_vector(1 downto 0) );
end GENERIC_WHEN;
architecture BEHAVIOUR of GENERIC_WHEN is
begin
process( IN1 )
begin
case IN1 is
when FOO => OUT1 <= FOO;
when others => null;
end case;
end process;
end BEHAVIOUR;
@nickg I don't really know how that should be fixed. The following dirty hack works, but I'm unsure what effects it causes in the depths of other codepaths.
diff --git a/src/common.c b/src/common.c
index 3b6d24b5..bebd594d 100644
--- a/src/common.c
+++ b/src/common.c
@@ -1599,7 +1599,10 @@ unsigned get_case_choice_char(tree_t value, int depth)
case T_REF:
{
tree_t decl = tree_ref(value);
- assert(tree_kind(decl) == T_CONST_DECL || tree_kind(decl) == T_ALIAS);
+ tree_kind_t kind = tree_kind(decl);
+ if (kind == T_GENERIC_DECL)
+ return ~0;
+ assert(kind == T_CONST_DECL || kind == T_ALIAS);
assert(tree_has_value(decl));
return get_case_choice_char(tree_value(decl), depth);
}
Reproducer for error from file 8a914f40d873ff7bec49e7993899821246958566831a90b871c3bbc1081a4566
with the following more minimized example:
package timing_pkg is
type frequency is range real'high;
end package;
@nickg I don't really know how that should be fixed. The following dirty hack works, but I'm unsure what effects it causes in the depths of other codepaths.
This code is actually illegal, I misinterpreted the 2008 rule changes. It's the same as #1022 and I'm working on a fix.
Reproducer for error from file d87cece15bccf62714ce1bdd82abbcdacc5f29bc31060c1dc3a56bb91295073b
with the following more minimized example:
package foo is
end package;
package body foo is
procedure bar is
begin
report "" ; natural ;
end procedure;
end package body;
Note: That line is very long.
Reproducer for error from file a3855bb94f65948ac0f8ca3555d79a537faeeb4cf8fd8273c3dbdea2e586c70f
with the following more minimized example:
package numeric_system_pkg is
impure function addes
end hello;
architecture behav of hello is
begin
subtype quire_in_reg is ssf_type'
subtype quire_in_mul is sss_mul_output_type;
end package;
Note: This is wholly not valid VHDL.
I think I'd rather remove it and add --no-save flag to -a that would skip saving the working library to disk.
I've done this now so you can try adding --no-save
to save a few milliseconds and some disk I/O.
I ran the fuzzing for a week and collected 32 crashing cases. crashes_cmin.zip There might be some duplicates in here as there often is different code paths that lead to the same crash. The log below shows SIGABRT, but you can ignore this as this is because it is neceseary to modify the source to raise a signal to the fuzzer when something interesting occurs. You can see my patch here: https://github.com/avelure/vhdl_fuzz/blob/main/nvc_bug_abort.patch
Second part of log comes in a new comment as there is a comment length limit.
There was also one that causes an
input buffer overflow, can't enlarge buffer because scanner uses REJECT
, but that might not be so interesting. input_buffer_overflow.zipThen there were 5 cases that seem to hang the parser or the parser takes an abnormal long time to complete. hangs.zip
Currently I'm just using the analyze switch for fuzzing which is a bit slow. I guess I could use the
--syntax
switch to parse the file, but it is missing some of the analysis switches like--psl
,--relaxed
and--error-limit
, though it seems quite easy to add, so maybe I can make a pullrequest. Another option is to use persistence mode to loop the parser and just change the input buffer to speed up the testing https://github.com/AFLplusplus/AFLplusplus/blob/stable/instrumentation/README.persistent_mode.md this also seems feasible in nvc, so I can look at this next.