aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccgen.c3
-rw-r--r--tests/tcctest.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/tccgen.c b/tccgen.c
index da39d36..0c3b50f 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5592,6 +5592,9 @@ ST_FUNC void decl(int l)
extern */
sym = external_sym(v, &type, r, asm_label);
+ if (type.t & VT_WEAK)
+ sym->type.t |= VT_WEAK;
+
if (ad.alias_target) {
Section tsec;
Elf32_Sym *esym;
diff --git a/tests/tcctest.c b/tests/tcctest.c
index bd1b975..fc2b9ed 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -2370,6 +2370,10 @@ extern __typeof(dummy) weak_dummy1 __attribute__((weak, alias("dummy")));
extern __typeof(dummy) __attribute__((weak, alias("dummy"))) weak_dummy2;
extern __attribute__((weak, alias("dummy"))) __typeof(dummy) weak_dummy3;
+int some_lib_func(void);
+int dummy_impl_of_slf(void) { return 444; }
+int some_lib_func(void) __attribute__((weak, alias("dummy_impl_of_slf")));
+
void __attribute__((weak)) weak_test(void)
{
printf("weak_f1=%d\n", weak_f1 ? weak_f1() : 123);