Skip to content

v.builder: always apply -fno-strict-aliasing too, on -cc gcc -prod to avoid the need for the -cflags -fno-inline-small-functions workaround with gcc > 12.0 (fix #26512)#26552

Merged
spytheman merged 1 commit into
vlang:masterfrom
spytheman:gcc_add_fno_strict_aliasing_for_prod_builds
Feb 8, 2026

Conversation

@spytheman

@spytheman spytheman commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Fix #26512.
Thank you @tankf33der for investigating it more completely.

…to avoid the need for the `-cflags -fno-inline-small-functions` workaround with gcc > 12.0 (fix vlang#26512)
@tankf33der

Copy link
Copy Markdown
Contributor

I have access to Debian 13.3, gcc is 14.2.0-19.

I took the effort to show the current situation with the tests.

./v test vlib/

To reproduce just failure 1 run:    '/home/tankf33der/v/v'  '/home/tankf33der/v/vlib/v/generics/new_generics_regression_test.v'
Summary for all V _test.v files: 1 failed, 2630 passed, 61 skipped, 2692 total. Elapsed time: 64700 ms, on 127 parallel jobs. Comptime: 2189294 ms. Runtime: 596752 ms.

./v -cc gcc -prod test vlib/

...
...
 OK    [2689/2692] C: 51595.5 ms, R:    13.590 ms vlib/veb/tests/middleware_test.v
 OK    [2690/2692] C: 22289.3 ms, R: 30943.237 ms vlib/veb/tests/memory_leak_test.v
 OK    [2691/2692] C:  5792.6 ms, R: 154468.500 ms vlib/v/slow_tests/keep_args_alive_test.c.v
 OK    [2692/2692] C: 63410.6 ms, R:     9.132 ms vlib/v/transformer/tests/const_infix_expr_test.v
--------------------------------------------------------------------------------------------------------------------------------------------
To reproduce just failure 1 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/crypto/ecdsa/example/ensure_compatibility_with_net_openssl_test.v'
To reproduce just failure 2 run:    '/home/tankf33der/v/v' -cc gcc -prod -w '/home/tankf33der/v/vlib/json/tests/json_encode_default_option_none_test.v'
To reproduce just failure 3 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/encoding/xml/query_test.v'
To reproduce just failure 4 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/json/tests/json_decode_with_sumtype_test.v'
To reproduce just failure 5 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/encoding/xml/test/local/13_doctype_element/doctype_test.v'
To reproduce just failure 6 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/json/tests/json_encode_primite_test.v'
To reproduce just failure 7 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/json/tests/json_sumtype_test.v'
To reproduce just failure 8 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/json/tests/json_test.v'
To reproduce just failure 9 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/encoding/binary/serialize_test.v'
To reproduce just failure 10 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/os/find_abs_path_of_executable_test.v'
To reproduce just failure 11 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/net/jsonrpc/jsonrpc_test.v'
To reproduce just failure 12 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/os/dir_expansions_test.v'
To reproduce just failure 13 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/strconv/converter_test.v'
To reproduce just failure 14 run:    '/home/tankf33der/v/v' -cc gcc -prod  -b c '/home/tankf33der/v/vlib/os/os_test.c.v'
To reproduce just failure 15 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/regex/pcre/regex_test.v'
To reproduce just failure 16 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/scanner/scanner_test.v'
To reproduce just failure 17 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/v/build_constraint/constraint_test.v'
To reproduce just failure 18 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/tests/compact_test.v'
To reproduce just failure 19 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/tests/nested_test.v'
To reproduce just failure 20 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/tests/table_test.v'
To reproduce just failure 21 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/tests/strings_test.v'
To reproduce just failure 22 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/toml/tests/toml_test.v'
To reproduce just failure 23 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/v/tests/assign/assign_option_of_multi_return_with_heap_test.v'
To reproduce just failure 24 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/v/generics/new_generics_regression_test.v'
To reproduce just failure 25 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/v/tests/builtin_maps/map_and_array_with_fns_test.v'
To reproduce just failure 26 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/net/http/server_test.v'
To reproduce just failure 27 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/v/tests/comptime/comptime_map_generic_test.v'
To reproduce just failure 28 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/crypto/curve25519/usage_test.v'
To reproduce just failure 29 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/encoding/asn1/ia5string_test.v'
To reproduce just failure 30 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/encoding/asn1/element_decode_test.v'
To reproduce just failure 31 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/encoding/asn1/public_api_test.v'
To reproduce just failure 32 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/decode_array_array_test.v'
To reproduce just failure 33 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/decode_object_test.v'
To reproduce just failure 34 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/encoding/asn1/integer_test.v'
To reproduce just failure 35 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/attributes_test.v'
To reproduce just failure 36 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/decode_custom_test.v'
To reproduce just failure 37 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/json2_test.v'
To reproduce just failure 38 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/json2_tests/json2_test.v'
To reproduce just failure 39 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/x/json2/tests/json_sumtype_test.v'
To reproduce just failure 40 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/veb/tests/handle_split_requests_in_chrome_test.v'
To reproduce just failure 41 run:    '/home/tankf33der/v/v' -cc gcc -prod '/home/tankf33der/v/vlib/vweb/csrf/csrf_test.v'
Summary for all V _test.v files: 41 failed, 2583 passed, 68 skipped, 2692 total. Elapsed time: 197828 ms, on 127 parallel jobs. Comptime: 18729479 ms. Runtime: 606374

./v -cc gcc -cflags -fno-strict-aliasing -prod test vlib/

...
...
 OK    [2691/2692] C: 23953.6 ms, R: 30929.263 ms vlib/veb/tests/memory_leak_test.v
 OK    [2692/2692] C: 62383.9 ms, R:     9.186 ms vlib/v/transformer/tests/const_infix_expr_test.v
--------------------------------------------------------------------------------------------------------------------------------------------
To reproduce just failure 1 run:    '/home/tankf33der/v/v' -cc gcc -cflags -fno-strict-aliasing -prod -w '/home/tankf33der/v/vlib/json/tests/json_encode_default_option_none_test.v'
To reproduce just failure 2 run:    '/home/tankf33der/v/v' -cc gcc -cflags -fno-strict-aliasing -prod '/home/tankf33der/v/vlib/strconv/converter_test.v'
To reproduce just failure 3 run:    '/home/tankf33der/v/v' -cc gcc -cflags -fno-strict-aliasing -prod '/home/tankf33der/v/vlib/v/generics/new_generics_regression_test.v'
To reproduce just failure 4 run:    '/home/tankf33der/v/v' -cc gcc -cflags -fno-strict-aliasing -prod '/home/tankf33der/v/vlib/v/tests/builtin_maps/map_and_array_with_fns_test.v'
Summary for all V _test.v files: 4 failed, 2620 passed, 68 skipped, 2692 total. Elapsed time: 198349 ms, on 127 parallel jobs. Comptime: 19206430 ms. Runtime: 439818 ms.

@spytheman

Copy link
Copy Markdown
Contributor Author

I am not sure I understand the purpose of those comparisons.
With the current PR, -prod with gcc will always also use -fno-strict-aliasing .

What is the additional -cflags -fno-strict-aliasing for?

Are you doing the tests on master, or on this branch?

@tankf33der

Copy link
Copy Markdown
Contributor

@spytheman
I was sleepy and lazy to switch to the PR's branch, so I quickly did everything manually.

@spytheman

Copy link
Copy Markdown
Contributor Author

@tankf33der ok, do you think this will be an improvement over the current state?
If you do, I will merge it asap.

The other failing tests are now just 4, and potentially could be caused by another reason, or we may need to change them/tag stuff manually with @[noinline] 🤔 .

@tankf33der

Copy link
Copy Markdown
Contributor

@spytheman

I don't want to double the bugs and evil, I always have doubts, but when I saw this feature in the nim source code I felt calmer. I vote to do the merge.

@spytheman spytheman merged commit 36df28d into vlang:master Feb 8, 2026
89 checks passed
cestef pushed a commit to cestef/v that referenced this pull request Mar 9, 2026
…to avoid the need for the `-cflags -fno-inline-small-functions` workaround with gcc > 12.0 (fix vlang#26512) (vlang#26552)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

some or many tests fails in Linux under gcc in -prod

2 participants