diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5638dceeb..61374eb26 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -326,6 +326,15 @@ jobs: ./a.out ../../../build/c3c compile-run test.c3 -L . -l add -z -Wl,-rpath=. + - name: Compile and run staticlib-test + run: | + cd resources/examples/staticlib-test + ../../../build/c3c -vv static-lib add.c3 + mv add.a libadd.a + cc test.c -L. -ladd + ./a.out + ../../../build/c3c compile-run test.c3 -L . -l add + - name: Compile run unit tests run: | cd test diff --git a/resources/examples/staticlib-test/add.c3 b/resources/examples/staticlib-test/add.c3 new file mode 100644 index 000000000..d00c61d02 --- /dev/null +++ b/resources/examples/staticlib-test/add.c3 @@ -0,0 +1,19 @@ +module add; +import std; +struct Foo(Printable) +{ + int a; +} + +fn usz! Foo.to_format(&self, Formatter* f) @dynamic +{ + return f.printf("Foo[%d]", self.a); +} + +fn int add(int a, int b) @export("adder") +{ + io::printn("In adder"); + Foo x = { a }; + io::printfn("Print foo: %s", x); + return a + b; +} \ No newline at end of file diff --git a/resources/examples/staticlib-test/test.c b/resources/examples/staticlib-test/test.c new file mode 100644 index 000000000..8d088dc2b --- /dev/null +++ b/resources/examples/staticlib-test/test.c @@ -0,0 +1,8 @@ +#include +extern int adder(int a, int b); + +int main() +{ + printf("%d\n", adder(1, 4)); + return 0; +} \ No newline at end of file diff --git a/resources/examples/staticlib-test/test.c3 b/resources/examples/staticlib-test/test.c3 new file mode 100644 index 000000000..f7b3de9fe --- /dev/null +++ b/resources/examples/staticlib-test/test.c3 @@ -0,0 +1,9 @@ +module add; +import std; +extern fn int adder(int a, int b); + +fn int main() +{ + io::printn(adder(1, 4)); + return 0; +} \ No newline at end of file diff --git a/test/test_suite/initialize/initialize_finalize.c3t b/test/test_suite/initialize/initialize_finalize.c3t index 22b3334d6..f7e4a9254 100644 --- a/test/test_suite/initialize/initialize_finalize.c3t +++ b/test/test_suite/initialize/initialize_finalize.c3t @@ -60,8 +60,7 @@ entry: call void @puts(ptr @.str.4) ret void } - -define void @.__c3_atexit_test.shutdown() { +define weak void @.__c3_atexit_test.shutdown() comdat { entry: call void @atexit(ptr @test.shutdown) ret void