@@ -3839,16 +3839,56 @@ def test_js_internal_deps(self):
38393839 },
38403840});
38413841''')
3842- create_file('src.cpp ', r'''
3842+ create_file('src.c ', r'''
38433843#include <stdio.h>
3844- extern "C" int jslibfunc();
3844+ int jslibfunc();
38453845int main() {
38463846 printf("c calling: %d\n", jslibfunc());
38473847}
38483848''')
3849- err = self.run_process([EMXX , 'src.cpp ', '--js-library', 'lib.js'], stderr=PIPE).stderr
3849+ err = self.run_process([EMCC , 'src.c ', '--js-library', 'lib.js'], stderr=PIPE).stderr
38503850 self.assertContained("warning: user library symbol 'jslibfunc' depends on internal symbol '$callRuntimeCallbacks'", err)
38513851
3852+ def test_js_lib_sig_mismatch(self):
3853+ create_file('lib.js', r'''
3854+ mergeInto(LibraryManager.library, {
3855+ jslibfunc__sig: 'ii',
3856+ jslibfunc: function(x) {},
3857+ });
3858+
3859+ mergeInto(LibraryManager.library, {
3860+ jslibfunc__sig: 'dd',
3861+ jslibfunc: function(x) {},
3862+ });
3863+
3864+ ''')
3865+ create_file('src.c', r'''
3866+ #include <stdio.h>
3867+ int jslibfunc();
3868+ int main() {
3869+ printf("c calling: %d\n", jslibfunc());
3870+ }
3871+ ''')
3872+ err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
3873+ self.assertContained('lib.js: Signature redefinition for: jslibfunc__sig. (old=ii vs new=dd)', err)
3874+
3875+ def test_js_lib_invalid_deps(self):
3876+ create_file('lib.js', r'''
3877+ mergeInto(LibraryManager.library, {
3878+ jslibfunc__deps: 'hello',
3879+ jslibfunc: function(x) {},
3880+ });
3881+ ''')
3882+ create_file('src.c', r'''
3883+ #include <stdio.h>
3884+ int jslibfunc();
3885+ int main() {
3886+ printf("c calling: %d\n", jslibfunc());
3887+ }
3888+ ''')
3889+ err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
3890+ self.assertContained('lib.js: JS library directive jslibfunc__deps=hello is of type string, but it should be an array', err)
3891+
38523892 def test_EMCC_BUILD_DIR(self):
38533893 # EMCC_BUILD_DIR env var contains the dir we were building in, when running the js compiler (e.g. when
38543894 # running a js library). We force the cwd to be src/ for technical reasons, so this lets you find out
0 commit comments