Skip to content

Commit f9ce05b

Browse files
authored
Turn off settings.LTO if -fno-lto is passed (#20309)
Fixes: #20308
1 parent be5643d commit f9ce05b

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

emcc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3454,6 +3454,8 @@ def consume_arg_file():
34543454
settings.LTO = arg.split('=')[1]
34553455
else:
34563456
settings.LTO = 'full'
3457+
elif arg == "-fno-lto":
3458+
settings.LTO = 0
34573459
elif check_arg('--llvm-lto'):
34583460
logger.warning('--llvm-lto ignored when using llvm backend')
34593461
consume_arg()

test/test_other.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11148,6 +11148,24 @@ def test_setjmp_emulated_casts(self):
1114811148
''')
1114911149
self.do_runf('src.c', 'ok\ndone\n', emcc_args=['-sEMULATE_FUNCTION_POINTER_CASTS'])
1115011150

11151+
def test_no_lto(self):
11152+
# This used to fail because settings.LTO didn't reflect `-fno-lto`.
11153+
# See bug https://github.com/emscripten-core/emscripten/issues/20308
11154+
create_file('src.c', r'''
11155+
#include <stdio.h>
11156+
#include <setjmp.h>
11157+
int main() {
11158+
jmp_buf jb;
11159+
if (!setjmp(jb)) {
11160+
printf("ok\n");
11161+
longjmp(jb, 1);
11162+
} else {
11163+
printf("done\n");
11164+
}
11165+
}
11166+
''')
11167+
self.do_runf('src.c', 'ok\ndone\n', emcc_args=['-flto', '-fno-lto'])
11168+
1115111169
def test_missing_stdlibs(self):
1115211170
# Certain standard libraries are expected to be useable via -l flags but
1115311171
# don't actually exist in our standard library path. Make sure we don't

0 commit comments

Comments
 (0)