Skip to content

Commit 24f76bf

Browse files
committed
Run asan and lsan suites without -O2
Running them in `-O2` means llvm does optimizations which can hide memory leaks (e.g. In some cases it can completely elinate calls allocations due to malloc/new when the resulting pointer don't escape). This should also speed up running these test suites. Also, fix test_em_asm_2 under asan.
1 parent 3e812a2 commit 24f76bf

File tree

4 files changed

+22
-18
lines changed

4 files changed

+22
-18
lines changed

tests/core/test_em_asm_2.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ int main()
102102
i = EM_ASM_INT("{console.log('5. got int ' + $0); return 7.5;}", 42); printf("5. returned int %d\n", i);
103103

104104
printf("\nEM_ASM_INT: Return an integer in a single brief statement.\n");
105-
i = EM_ASM_INT(return HEAP8.length); printf("1. returned statement %d\n", i);
106-
i = EM_ASM_INT("return HEAP8.length+1"); printf("2. returned statement %d\n", i);
107-
i = EM_ASM_INT({"return HEAP8.length+2"}); printf("3. returned statement %d\n", i);
108-
i = EM_ASM_INT({return HEAP8.length+3}); printf("4. returned statement %d\n", i);
109-
i = EM_ASM_INT("return HEAP8.length+4"); printf("5. returned statement %d\n", i);
105+
i = EM_ASM_INT(return 42); printf("1. returned statement %d\n", i);
106+
i = EM_ASM_INT("return 42+1"); printf("2. returned statement %d\n", i);
107+
i = EM_ASM_INT({"return 42+2"}); printf("3. returned statement %d\n", i);
108+
i = EM_ASM_INT({return 42+3}); printf("4. returned statement %d\n", i);
109+
i = EM_ASM_INT("return 42+4"); printf("5. returned statement %d\n", i);
110110

111111
// Note that expressions do not evaluate to return values, but the "return" keyword is needed. That is, the following line would return undefined and store i <- 0.
112112
// i = EM_ASM_INT(HEAP8.length); printf("returned statement %d\n", i);

tests/core/test_em_asm_2.out

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,11 @@ EM_ASM_INT: Return an integer back.
113113
5. returned int 7
114114

115115
EM_ASM_INT: Return an integer in a single brief statement.
116-
1. returned statement 16777216
117-
2. returned statement 16777217
118-
3. returned statement 16777218
119-
4. returned statement 16777219
120-
5. returned statement 16777220
116+
1. returned statement 42
117+
2. returned statement 43
118+
3. returned statement 44
119+
4. returned statement 45
120+
5. returned statement 46
121121

122122
EM_ASM_DOUBLE: Pass no parameters, return a double.
123123
1. returning double

tests/core/test_emptyclass.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ struct Randomized {
1212
};
1313

1414
int main(int argc, const char *argv[]) {
15-
new Randomized(55);
16-
15+
Randomized(55);
1716
return 0;
1817
}

tests/test_core.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ class TestCoreBase(RunnerCore):
274274
def is_wasm2js(self):
275275
return self.get_setting('WASM') == 0
276276

277-
# A simple check whether the compiler arguments cause optimization.
277+
# A simple check whether the compiler arguments cause optimization.
278278
def is_optimizing(self):
279279
return '-O' in str(self.emcc_args) and '-O0' not in self.emcc_args
280280

@@ -1837,8 +1837,8 @@ def test_em_asm(self):
18371837
self.emcc_args.append('-std=gnu89')
18381838
self.do_core_test('test_em_asm.cpp', force_c=True)
18391839

1840-
# Tests various different ways to invoke the EM_ASM(), EM_ASM_INT() and EM_ASM_DOUBLE() macros.
1841-
@no_asan('Cannot use ASan: test depends exactly on heap size')
1840+
# Tests various different ways to invoke the EM_ASM(), EM_ASM_INT()
1841+
# and EM_ASM_DOUBLE() macros.
18421842
def test_em_asm_2(self):
18431843
self.do_core_test('test_em_asm_2.cpp')
18441844
self.emcc_args.append('-std=gnu89')
@@ -5944,6 +5944,10 @@ def test_ssse3(self):
59445944
@is_slow_test
59455945
def test_sse4_1(self):
59465946
src = test_file('sse/test_sse4_1.cpp')
5947+
if not self.is_optimizing() and '-fsanitize=address' in self.emcc_args:
5948+
# ASan with -O0 fails with:
5949+
# Compiling function #69:"__original_main" failed: local count too large
5950+
self.emcc_args.append('-O1')
59475951
self.run_process([shared.CLANG_CXX, src, '-msse4.1', '-Wno-argument-outside-range', '-o', 'test_sse4_1', '-D_CRT_SECURE_NO_WARNINGS=1'] + clang_native.get_clang_native_args(), stdout=PIPE)
59485952
native_result = self.run_process('./test_sse4_1', stdout=PIPE).stdout
59495953

@@ -7577,6 +7581,7 @@ def test_asyncify_indirect_lists(self, args, should_pass):
75777581
if should_pass:
75787582
raise
75797583

7584+
@no_asan('asyncify stack operations confuse asan')
75807585
def test_emscripten_scan_registers(self):
75817586
self.set_setting('ASYNCIFY')
75827587
self.do_core_test('test_emscripten_scan_registers.cpp')
@@ -8742,9 +8747,9 @@ def setUp(self):
87428747
# Add DEFAULT_TO_CXX=0
87438748
strict = make_run('strict', emcc_args=[], settings={'STRICT': 1})
87448749

8745-
lsan = make_run('lsan', emcc_args=['-fsanitize=leak', '--profiling', '-O2'], settings={'ALLOW_MEMORY_GROWTH': 1})
8746-
asan = make_run('asan', emcc_args=['-fsanitize=address', '--profiling', '-O2'], settings={'ALLOW_MEMORY_GROWTH': 1})
8747-
asani = make_run('asani', emcc_args=['-fsanitize=address', '--profiling', '-O2', '--pre-js', os.path.join(os.path.dirname(__file__), 'asan-no-leak.js')],
8750+
lsan = make_run('lsan', emcc_args=['-fsanitize=leak', '--profiling'], settings={'ALLOW_MEMORY_GROWTH': 1})
8751+
asan = make_run('asan', emcc_args=['-fsanitize=address', '--profiling'], settings={'ALLOW_MEMORY_GROWTH': 1})
8752+
asani = make_run('asani', emcc_args=['-fsanitize=address', '--profiling', '--pre-js', os.path.join(os.path.dirname(__file__), 'asan-no-leak.js')],
87488753
settings={'ALLOW_MEMORY_GROWTH': 1})
87498754

87508755
# Experimental modes (not tested by CI)

0 commit comments

Comments
 (0)