aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-04-29 17:14:08 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-04-29 17:14:08 -0700
commit60960a6a1f5137239af6b11d91d1ca668f54f5f1 (patch)
tree76bac93f97480cc84b780070985e7bce0092131b /tests
parentd6ea75e7f22a5efdfe689ed65e5b1cb0806762f2 (diff)
do not get confused by local vars that alias names of library functions, and are used as function pointers
Diffstat (limited to 'tests')
-rwxr-xr-xtests/runner.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py
index f9f46f10..de3c72de 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -3336,6 +3336,36 @@ Exiting setjmp function, level: 0, prev_jmp: -1
'''
self.do_run(src, '*0x1*')
+ def test_funcptr_namecollide(self):
+ src = r'''
+ #include <stdio.h>
+
+ void do_call(void (*puts)(const char *), const char *str);
+
+ void do_print(const char *str) {
+ if (!str) do_call(NULL, "delusion");
+ if ((int)str == -1) do_print(str+10);
+ puts("====");
+ puts(str);
+ puts("====");
+ }
+
+ void do_call(void (*puts)(const char *), const char *str) {
+ if (!str) do_print("confusion");
+ if ((int)str == -1) do_call(NULL, str-10);
+ (*puts)(str);
+ }
+
+ int main(int argc, char **argv)
+ {
+ for (int i = 0; i < argc; i++) {
+ do_call(i != 10 ? do_print : NULL, i != 15 ? "waka waka" : NULL);
+ }
+ return 0;
+ }
+ '''
+ self.do_run(src, 'waka', force_c=True)
+
def test_emptyclass(self):
if self.emcc_args is None: return self.skip('requires emcc')
src = '''