diff options
author | Ehsan Akhgari <ehsan.akhgari@gmail.com> | 2012-02-08 16:28:03 -0500 |
---|---|---|
committer | Ehsan Akhgari <ehsan.akhgari@gmail.com> | 2012-02-08 18:52:19 -0500 |
commit | 96dfd8be059f1657e217177a9cc3cbe5e8d9aa46 (patch) | |
tree | ff9b5cbe361238031d67636036913354e1725bcd | |
parent | 1506ae0d6dc95f9d16cd1eb7a1e3f480fbeaca24 (diff) |
Add a test for handling of multiply defined symbols
-rwxr-xr-x | tests/runner.py | 40 | ||||
-rw-r--r-- | tools/shared.py | 7 |
2 files changed, 47 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index a407dc13..a7624612 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -919,6 +919,46 @@ if 'benchmark' not in str(sys.argv) and 'sanity' not in str(sys.argv): ''' self.do_run(src, '*1 2*') + def test_multiply_defined_symbols(self): + a1 = "int f() { return 1; }" + a1_name = os.path.join(self.get_dir(), 'a1.c') + open(a1_name, 'w').write(a1) + a2 = "void x() {}" + a2_name = os.path.join(self.get_dir(), 'a2.c') + open(a2_name, 'w').write(a2) + b1 = "int f() { return 2; }" + b1_name = os.path.join(self.get_dir(), 'b1.c') + open(b1_name, 'w').write(b1) + b2 = "void y() {}" + b2_name = os.path.join(self.get_dir(), 'b2.c') + open(b2_name, 'w').write(b2) + main = r''' + #include <stdio.h> + int f(); + int main() { + printf("result: %d\n", f()); + return 0; + } + ''' + main_name = os.path.join(self.get_dir(), 'main.c') + open(main_name, 'w').write(main) + + Building.emcc(a1_name) + Building.emcc(a2_name) + Building.emcc(b1_name) + Building.emcc(b2_name) + Building.emcc(main_name) + + liba_name = os.path.join(self.get_dir(), 'liba.a') + Building.emar('cr', liba_name, [a1_name + '.o', a2_name + '.o']) + libb_name = os.path.join(self.get_dir(), 'libb.a') + Building.emar('cr', libb_name, [b1_name + '.o', b2_name + '.o']) + + all_name = os.path.join(self.get_dir(), 'all.bc') + Building.link([main_name + '.o', liba_name, libb_name], all_name) + + self.do_ll_run(all_name, 'result: 1') + def test_if(self): src = ''' #include <stdio.h> diff --git a/tools/shared.py b/tools/shared.py index 832dcb26..56a404fb 100644 --- a/tools/shared.py +++ b/tools/shared.py @@ -547,6 +547,13 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)'''.replace('$EMSCRIPTEN_ROOT', path_ assert os.path.exists(output_filename), 'emcc could not create output file' @staticmethod + def emar(action, output_filename, filenames, stdout=None, stderr=None, env=None): + try_delete(output_filename) + Popen([EMAR, action, output_filename] + filenames, stdout=stdout, stderr=stderr, env=env).communicate() + if 'c' in action: + assert os.path.exists(output_filename), 'emar could not create output file' + + @staticmethod def emscripten(filename, append_ext=True, extra_args=[]): # Allow usage of emscripten.py without warning os.environ['EMSCRIPTEN_SUPPRESS_USAGE_WARNING'] = '1' |