Skip to content

Commit 98767da

Browse files
committed
Add more tests for weak linking
1 parent ff75baa commit 98767da

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

tests/core/test_dylink_weak_main.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,33 @@
11
#include <stdio.h>
2+
#include <assert.h>
23

3-
void side();
4+
void side_print_foo();
5+
int side_get_foo();
6+
void* side_get_foo_addr();
7+
8+
int side_get_bar();
9+
void* side_get_bar_addr();
410

511
__attribute__((weak)) int foo() {
612
return 42;
713
}
814

15+
__attribute__((weak)) int bar = 43;
16+
917
int main(int argc, char const *argv[]) {
1018
printf("main foo() -> %d\n", foo());
11-
side();
19+
side_print_foo();
20+
21+
// Check that addresses match
22+
assert(&foo == side_get_foo_addr());
23+
assert(&bar == side_get_bar_addr());
24+
25+
// Check that main-moduled defined symbols take precedence.
26+
assert(bar == 43);
27+
assert(side_get_bar() == 43);
28+
29+
assert(foo() == 42);
30+
assert(side_get_foo() == 42);
31+
1232
return 0;
1333
}

tests/core/test_dylink_weak_side.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,30 @@
11
#include <stdio.h>
22

33
extern int foo();
4+
extern int bar;
45

56
__attribute__((weak)) int foo() {
67
return 99;
78
}
89

9-
void side() {
10+
__attribute__((weak)) int bar = 100;
11+
12+
void side_print_foo() {
1013
printf("side foo() -> %d\n", foo());
1114
}
15+
16+
int side_get_foo() {
17+
return foo();
18+
}
19+
20+
void* side_get_foo_addr() {
21+
return &foo;
22+
}
23+
24+
int side_get_bar() {
25+
return bar;
26+
}
27+
28+
void* side_get_bar_addr() {
29+
return &bar;
30+
}

tests/test_core.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3780,7 +3780,7 @@ def test_dylink_static_funcpointer_float(self):
37803780
header='typedef float (*floatfunc)(float);', force_c=True)
37813781

37823782
@needs_dylink
3783-
def test_missing_signatures(self):
3783+
def test_dylink_missing_signatures(self):
37843784
create_file('test_sig.c', r'''#include <emscripten.h>
37853785
int main() {
37863786
return 0 == ( (long)&emscripten_run_script_string +
@@ -4567,7 +4567,6 @@ def test_dylink_argv_argc(self):
45674567
expected='3 hello world!',
45684568
need_reverse=False)
45694569

4570-
@disabled('https://github.com/emscripten-core/emscripten/issues/13773')
45714570
def test_dylink_weak(self):
45724571
# Verify that weakly symbols can be defined in both side module and main
45734572
# module

0 commit comments

Comments
 (0)