Some code landed recently that was related to that, can try on very latest
incoming (on all 3 repos) to see if it helps. If not, the best solution is
to refactor the source code to avoid using that feature.

- Alon


On Fri, Nov 7, 2014 at 11:37 AM, Colin Gordon <[email protected]>
wrote:

>  I assumed I could compile simple programs, since I had done so quite
> recently, but apparently not.  After some more digging I discovered that
> the issue was a misconfigured emscripten install — I had multiple copies of
> the portable SDK around, and was trying to use one of them with the other
> activated.  I can now build, and run the following:
>
>  #include<gc.h>
> #include <stdio.h>
>
>  int main() {
>     GC_INIT();
>     printf("Successfully init'ed GC\n");
>     for (int i = 0; i < 100; i++) {
>         void* v = GC_malloc(1024*1024*1);
>     }
>     GC_gcollect();
>     printf("Successfully alloc'ed a lot of memory, and forced
> collection\n");
>     return 0;
> }
>
>  With
>
>  emcc -I $OUTPUT/lib/libgc.dylib boehm.c -s NO_EXIT_RUNTIME=1
>
>  But now I’m stuck on a new compiler crash for the code I’m actually
> trying to compile, which uses uses variadic struct arguments, and the
> workaround suggested here
> <http://kripken.github.io/emscripten-site/docs/getting_started/FAQ.html#why-do-i-get-error-cannot-compile-this-aggregate-va-arg-expression-yet-and-it-says-compiler-frontend-failed-to-generate-llvm-bitcode-halting-afterwards>
> yields:
>
>  $ emcc -I $OUTPUT/include/ $OUTPUT/lib/libgc.dylib boehm.c -s
> NO_EXIT_RUNTIME=1
> boehm.c:11:25: error: cannot compile this aggregate va_arg expression yet
>         printf("%d\n", (va_arg(ap, t)).f);
>                         ^~~~~~~~~~~~~
> .../emsdk/emscripten/1.25.0/system/include/libc/stdarg.h:15:25: note:
>       expanded from macro 'va_arg'
> #define va_arg(v,l)     __builtin_va_arg(v,l)
>                         ^~~~~~~~~~~~~~~~~~~~~
> 1 error generated.
> ERROR    root: compiler frontend failed to generate LLVM bitcode, halting
> $ EMCC_LLVM_TARGET=i386-pc-linux-gnu emcc -I $OUTPUT/include/
> $OUTPUT/lib/libgc.dylib boehm.c -s NO_EXIT_RUNTIME=1
> Exception in thread Thread-3:
> Traceback (most recent call last):
>   File
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",
> line 808, in __bootstrap_inner
>     self.run()
>   File
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py",
> line 761, in run
>     self.__target(*self.__args, **self.__kwargs)
>   File
> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py",
> line 376, in _handle_results
>     task = get()
> TypeError: ('__init__() takes at least 3 arguments (1 given)', <class
> 'subprocess.CalledProcessError'>, ())
>
>  ^\Quit: 3
> $
>
>  I have to use ^\ to kill it, or I just get a long stack trace from a
> keyboard interrupt
>
>  The test code to produce the error above is:
>
>  #include<gc.h>
> #include <stdio.h>
> #include<stdarg.h>
>
>  typedef struct { int f; } t;
>
>  void many_ts(int count, ...) {
>     va_list ap;
>     int i = 0;
>     for (i = 0; i < count; i++) {
>         printf("%d\n", (va_arg(ap, t)).f);
>     }
> }
>
>  int main() {
>     GC_INIT();
>     printf("Successfully init'ed GC\n");
>     for (int i = 0; i < 100; i++) {
>         void* v = GC_malloc(1024*1024*1);
>     }
>     GC_gcollect();
>     printf("Successfully alloc'ed a lot of memory, and forced
> collection\n");
>     return 0;
> }
>
>  I also tried without the GC code and libraries, and the same crash
> occurs:
>
>  #include <stdio.h>
> #include<stdarg.h>
>
>  typedef struct { int f; } t;
>
>  void many_ts(int count, ...) {
>     va_list ap;
>     int i = 0;
>     for (i = 0; i < count; i++) {
>         printf("%d\n", (va_arg(ap, t)).f);
>     }
> }
>
>  int main() {
>     printf("hello\n");
>     return 0;
> }
>
>  for
> $ EMCC_LLVM_TARGET=i386-pc-linux-gnu emcc testhello.c -s NO_EXIT_RUNTIME=1
>
>  Is there another known workaround for structs as variadic arguments?  Or
> do I need to rewrite the code to pass non-aggregates to the variadic
> functions?
>
>  Thanks,
> Colin
>
>
>   From: Alon Zakai <[email protected]>
> Reply-To: "[email protected]" <
> [email protected]>
> Date: Thursday, November 6, 2014 at 4:49 PM
> To: "[email protected]" <
> [email protected]>
> Subject: Re: Trouble with emscripten support in official Boehm GC?
>
>   Is this Boehm specific? Can you build a trivial hello world?
>
>  - Alon
>
>
> On Thu, Nov 6, 2014 at 2:15 PM, Colin Gordon <[email protected]>
> wrote:
>
>>  Hi everyone,
>>
>>  I’ve been trying to build the trunk version of the Boehm GC using
>> emscripten, which now appears to be an officially supported platform based
>> on some of the change sets from the last few months (some work was
>> upstreamed from Unity).  Has anyone had success in doing this?  I’ve
>> managed to produce a compiled library of LLVM bit code with the emscripten
>> target triple, but attempting to link even a trivial program against it
>> causes emcc to crash.
>>
>>  I’ve asked about this on the Boehm GC mailing list with no luck.
>>
>>  I modified the standard Boehm build instructions according to standard
>> emscripten practice and based on the changes to the GC library itself:
>>
>>  autoreconf -vif
>> automake --add-missing
>> emconfigure ./configure --prefix=$OUTPUT --without-threads
>> --disable-threads __EMSCRIPTEN__=1 EMSCRIPTEN=1
>> emmake make
>> make install
>>
>>  This produces an LLVM bitcode file in $OUTPUT/lib/libgc.dylib (OS X
>> 10.9.5) which, when disassembled, appears to contain the relevant symbols,
>> code, and the target triple asmjs-unknown-emscripten.  But linking even a
>> minimal program against this cases emcc (from the portable SDK, I’ve tried
>> 1.22 and 1.25) to fail.
>>
>>  Example program:
>>
>>  #include<gc.h>
>> int main() {
>>     GC_INIT(); // Initialize the GC allocator
>>     return 0;
>> }
>>
>>  Compiled via:
>> emcc –g –I $OUTPUT/include –L$(OUTPUT)/lib –lgc boehm.c
>>
>>  Produces:
>>  fs.js:427
>>   return binding.open(pathModule._makeLong(path), stringToFlags(flags),
>> mode);
>>                  ^
>> Error: ENOENT, no such file or directory '--'
>>     at Object.fs.openSync (fs.js:427:18)
>>     at Object.fs.readFileSync (fs.js:284:15)
>>     at read (.../external/emsdk/emscripten/1.22.0/src/compiler.js:57:34)
>>     at Object.<anonymous>
>> (.../external/emsdk/emscripten/1.22.0/src/compiler.js:145:29)
>>     at Module._compile (module.js:456:26)
>>     at Object.Module._extensions..js (module.js:474:10)
>>     at Module.load (module.js:356:32)
>>     at Function.Module._load (module.js:312:12)
>>     at Function.Module.runMain (module.js:497:10)
>>     at startup (node.js:119:16)
>> Traceback (most recent call last):
>>   File ".../external/emsdk/emscripten/1.22.0/emscripten.py", line 1490,
>> in <module>
>>     _main(environ=os.environ)
>>   File ".../external/emsdk/emscripten/1.22.0/emscripten.py", line 1478,
>> in _main
>>     temp_files.run_and_clean(lambda: main(
>>   File ".../external/emsdk/emscripten/1.22.0/tools/tempfiles.py", line
>> 39, in run_and_clean
>>     return func()
>>   File ".../external/emsdk/emscripten/1.22.0/emscripten.py", line 1486,
>> in <lambda>
>>     DEBUG_CACHE=DEBUG_CACHE,
>>   File ".../external/emsdk/emscripten/1.22.0/emscripten.py", line 1373,
>> in main
>>     jcache=jcache, temp_files=temp_files, DEBUG=DEBUG,
>> DEBUG_CACHE=DEBUG_CACHE)
>>   File ".../external/emsdk/emscripten/1.22.0/emscripten.py", line 861, in
>> emscript_fast
>>     cwd=path_from_root('src'), error_limit=300)
>>   File ".../external/emsdk/emscripten/1.22.0/tools/jsrun.py", line 43, in
>> run_js
>>     raise Exception('Expected the command ' + str(command) + ' to finish
>> with return code ' + str(assert_returncode) + ', but it returned with code
>> ' + str(proc.returncode) + ' instead! Output: ' + str(ret)[:error_limit])
>> Exception: Expected the command
>> ['.../external/emsdk/node/0.10.18_64bit/bin/node',
>> '.../external/emsdk/emscripten/1.22.0/src/compiler.js', '--',
>> '/var/folders/nx/_cvrfktd5cs5h3ktk6v3z310qn9lg1/T/tmp6TBpfX.txt', ';',
>> 'glue'] to finish with return code 0, but it returned with code 8 instead!
>> Output:
>> Traceback (most recent call last):
>>   File "external/emsdk/emscripten/1.22.0/emcc", line 1642, in <module>
>>     final = shared.Building.emscripten(final, append_ext=False,
>> extra_args=extra_args)
>>   File ".../external/emsdk/emscripten/1.22.0/tools/shared.py", line 1464,
>> in emscripten
>>     assert os.path.exists(filename + '.o.js'), 'Emscripten failed to
>> generate .js'
>> AssertionError: Emscripten failed to generate .js
>>
>>  A very similar stack trace showed up in another recent mail to this
>> list (
>> https://groups.google.com/forum/#!topic/emscripten-discuss/Wn6YnoHu9XQ).
>>
>>  Has anyone had more success than this?  Am I missing another
>> emscripten-specific build tweak?
>>
>>  Thanks in advance,
>> Colin
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to