summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-02-20 16:33:29 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-02-20 16:33:29 -0800
commitdce46c9c2a9382070e81a2fd16747dea2c5c54c5 (patch)
tree602fb15ce8700dd8fb1cbeee4b63e5bd40883177
parentc9d030fc29a8f623f75fb287d0ad3ec17860b422 (diff)
build base type_info class with libcxxabi, fixes #862
-rwxr-xr-xemcc2
-rw-r--r--system/lib/libcxxabi/symbols1
-rwxr-xr-xtests/runner.py17
3 files changed, 19 insertions, 1 deletions
diff --git a/emcc b/emcc
index 6f38b32b..98edd68f 100755
--- a/emcc
+++ b/emcc
@@ -1036,7 +1036,7 @@ try:
def create_libcxxabi():
if DEBUG: print >> sys.stderr, 'emcc: building libcxxabi for cache'
os = []
- for src in ['private_typeinfo.cpp']:
+ for src in ['private_typeinfo.cpp', 'typeinfo.cpp']:
o = in_temp(src + '.o')
execute([shared.PYTHON, shared.EMXX, shared.path_from_root('system', 'lib', 'libcxxabi', 'src', src), '-o', o], stdout=stdout, stderr=stderr)
os.append(o)
diff --git a/system/lib/libcxxabi/symbols b/system/lib/libcxxabi/symbols
index 8ef205ba..cc22a81b 100644
--- a/system/lib/libcxxabi/symbols
+++ b/system/lib/libcxxabi/symbols
@@ -10,3 +10,4 @@
D _ZTVN10__cxxabiv121__vmi_class_type_infoE
D _ZTVN10__cxxabiv123__fundamental_type_infoE
D _ZTVN10__cxxabiv129__pointer_to_member_type_infoE
+ D _ZTSSt9type_info
diff --git a/tests/runner.py b/tests/runner.py
index 89bc3d32..4c42bb6e 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -2845,6 +2845,23 @@ Exiting setjmp function, level: 0, prev_jmp: -1
'''
self.do_run(src, 'a1: 0\na2: 0\na3: 1\nb1: 0\nb2: 1\nb3: 1\nc1: 1\nc2: 1\nc3: 1\n')
+ def test_dynamic_cast_2(self):
+ if self.emcc_args is None: return self.skip('need libcxxabi')
+
+ src = r'''
+ #include <stdio.h>
+ #include <typeinfo>
+
+ class Class {};
+
+ int main() {
+ const Class* dp = dynamic_cast<const Class*>(&typeid(Class));
+ // should return dp == NULL,
+ printf("pointer: %p\n", dp);
+ }
+ '''
+ self.do_run(src, "pointer: (nil)")
+
def test_funcptr(self):
src = '''
#include <stdio.h>