I had the exact same issue (Failed to run llvm optimizations) with Emscripten 1.34.1. Fortunately, upgrading to 1.34.6 solved it.
On Wednesday, August 26, 2015 at 7:18:54 PM UTC-4, [email protected] wrote: > > Sorry for the delay, My colleague submitted a simplified source file and > bug report for this issue at > https://github.com/kripken/emscripten/issues/3718. > > Thanks, > > David > > On Wednesday, July 22, 2015 at 11:05:37 AM UTC-7, Alon Zakai wrote: >> >> Oh, sorry, I missed the stack trace before. >> >> Ok, then we must have some code generation issue where we emit a highly >> recursive structure, probably unnecessarily. I understand you can't share >> your source code, but if you can create a new standalone example showing a >> similar issue - wrapping library functions, as you mention, I'm just not >> sure how you are doing that, but if I saw it, the problem for us to fix >> might be obvious. >> >> On Wed, Jul 22, 2015 at 10:57 AM, <[email protected]> wrote: >> >>> Hmm, well the stack trace is what I mentioned previously. Is there >>> anything specific that would help you to track down the problem? I am >>> unfortunately unable to provide source code or equivalent since the library >>> is closed source. >>> >>> Here is some additional information about my recent experience with >>> these problems. >>> >>> 1. I was wrapping each exposed library function using a function >>> pointers which would each be added to a map from string -> function >>> pointer. When I increase the number of such functions + size of the map the >>> memory usage of optimizer goes up exponentially. (a little over half the >>> map took 5 GB of memory and the full map took over 30 GB of memory and >>> failed to complete) >>> 2. When I switch to using a map of strings -> int and make a large >>> switch statement containing the wrapper implementations this problem no >>> longer occurs. (although the memory usage of optimizer,exe does go up to >>> about 11 GB and it still takes about 10 minutes to finish) >>> >>> Thanks, >>> >>> David >>> >>> On Monday, July 13, 2015 at 11:44:37 AM UTC-7, Alon Zakai wrote: >>>> >>>> When juj gets back I hope he can look at why we are building a 32-bit >>>> executable there. >>>> >>>> Meanwhile, is there any chance you can find the stack trace that causes >>>> the error? Increasing the stack size is a workaround, but it would be good >>>> to fix the underlying issue. >>>> >>>> >>>> On Thu, Jul 9, 2015 at 5:54 PM, <[email protected]> wrote: >>>> >>>>> All right, I was finally able to get around the errors with the >>>>> optimizer. I did the following: >>>>> >>>>> 1. Changed Optimizer project to build 64-bit executable. (despite >>>>> being under the folder incoming_64bit_optimizer it builds a 32-bit >>>>> executable on windows!) >>>>> 2. Greatly increased stack size. >>>>> 3. Rebuilt the optimizer executable >>>>> >>>>> The whole emcc process still takes about 8 minutes to run on my >>>>> library, but at least it can actually complete the process. >>>>> >>>>> David >>>>> >>>>> On Tuesday, July 7, 2015 at 6:43:22 PM UTC-7, [email protected] >>>>> wrote: >>>>>> >>>>>> Thanks for the tips. I was able to get around the issues that I was >>>>>> encountering when using just the latest build. >>>>>> >>>>>> However, I still encounter the Optimizer stack overflow crash. Here >>>>>> is a partial call stack: >>>>>> >>>>>> msvcr120.dll!6544a5d6() >>>>>> [Frames below may be incorrect and/or missing, no symbols loaded >>>>>> for msvcr120.dll] >>>>>> msvcr120.dll!654605db() >>>>>> msvcr120.dll!654b9bf0() >>>>>> msvcr120.dll!654b9c8d() >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::Frag::Frag(char * >>>>>> src=0x0cdffdc9) Line 231 + 0xe bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40448) Line 290 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseExpression(cashew::Parser<Ref,ValueBuilder>::ExpressionElement >>>>>> >>>>>> initial={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40448) >>>>>> Line >>>>>> 726 C++ >>>>>> > optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x1cf4e3dc) Line 301 + 0x28 bytes >>>>>> C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseExpression(cashew::Parser<Ref,ValueBuilder>::ExpressionElement >>>>>> >>>>>> initial={...}, char * & src=0x20202020, const char * seps=0x00b40448) >>>>>> Line >>>>>> 726 C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x00000002, const char * seps=0x00b40448) Line 304 + 0x37 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterParen(char >>>>>> * & src=0x0cdffdc9) Line 590 C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 304 + 0x18 bytes >>>>>> C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseExpression(cashew::Parser<Ref,ValueBuilder>::ExpressionElement >>>>>> >>>>>> initial={...}, char * & src=0x20202020, const char * seps=0x00b40478) >>>>>> Line >>>>>> 726 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterIdent(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x1cf4e37c) >>>>>> Line >>>>>> 539 C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 300 + 0x18 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x0cdffdc9, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseIf(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 420 + 0x27 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 334 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x0cdffdc9, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseDo(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 434 + 0x26 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 335 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x00000002, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseIf(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 420 + 0x27 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 334 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x0cdffdc9, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseDo(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 434 + 0x26 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 335 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> >>>>>> >>>>>> Prior to that the following stack is repeated. (probably infinitely >>>>>> although depending on how the parser is written it could just be a very >>>>>> large stack) >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x00000002, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseIf(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 420 + 0x27 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 334 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBlock(char * >>>>>> & src=0x0cdffdc9, Ref block={...}, const char * seps=0x00b40478, >>>>>> cashew::IString keywordSep1={...}, cashew::IString keywordSep2={...}) >>>>>> Line >>>>>> 806 + 0x33 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseBracketedBlock(char >>>>>> * & src=0x0cdffdc9, Ref block={...}) Line 819 C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseDo(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 434 + 0x26 bytes C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterKeyword(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 335 + 0x18 bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 293 + 0x13 bytes >>>>>> C++ >>>>>> >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseAfterIdent(cashew::Parser<Ref,ValueBuilder>::Frag >>>>>> >>>>>> & frag={...}, char * & src=0x0cdffdc9, const char * seps=0x00b40478) >>>>>> Line >>>>>> 533 + 0xf bytes C++ >>>>>> optimizer.exe!cashew::Parser<Ref,ValueBuilder>::parseElement(char >>>>>> * & src=0x0cdffdc9, const char * seps=0x00b40478) Line 300 + 0x18 bytes >>>>>> C++ >>>>>> >>>>>> I will investigate to see if I can get any other information tomorrow. >>>>>> >>>>>> Thanks, >>>>>> >>>>>> David >>>>>> >>>>>> On Tuesday, July 7, 2015 at 1:18:20 PM UTC-7, Alon Zakai wrote: >>>>>>> >>>>>>> That looks like a different error. It is caused by the repos not >>>>>>> being in sync - you need latest incoming on all 3 repos, see >>>>>>> >>>>>>> >>>>>>> http://kripken.github.io/emscripten-site/docs/building_from_source/building_fastcomp_manually_from_source.html#branches >>>>>>> >>>>>>> On Tue, Jul 7, 2015 at 12:55 PM, <[email protected]> wrote: >>>>>>> >>>>>>>> I still get the same error using Emscripten in the incoming branch >>>>>>>> and can't even run the samples without getting errors. This is my >>>>>>>> output >>>>>>>> trying to run test_hello_world: >>>>>>>> >>>>>>>> E:\Program Files\Emscripten\emscripten\incoming>python >>>>>>>> tests/runner.py test_hell >>>>>>>> o_world >>>>>>>> test_hello_world (test_core.default) ... (checking sanity from test >>>>>>>> runner) >>>>>>>> INFO root: (Emscripten: Running sanity checks) >>>>>>>> FAIL >>>>>>>> >>>>>>>> >>>>>>>> ====================================================================== >>>>>>>> FAIL: test_hello_world (test_core.default) >>>>>>>> >>>>>>>> ---------------------------------------------------------------------- >>>>>>>> Traceback (most recent call last): >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tests\test_core.py", lin >>>>>>>> e 18, in test_hello_world >>>>>>>> self.do_run_from_file(src, output) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tests\runner.py", line 4 >>>>>>>> 79, in do_run_from_file >>>>>>>> includes, force_c, build_ll_hook, extra_emscripten_args) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tests\runner.py", line 4 >>>>>>>> 91, in do_run >>>>>>>> build_ll_hook=build_ll_hook, >>>>>>>> extra_emscripten_args=extra_emscripten_args, po >>>>>>>> st_build=post_build) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tests\runner.py", line 2 >>>>>>>> 57, in build >>>>>>>> assert os.path.exists(filename + '.o.js'), 'Source compilation >>>>>>>> error: ' + ou >>>>>>>> tput >>>>>>>> AssertionError: Source compilation error: Traceback (most recent >>>>>>>> call last): >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\emscripten.py", line 106 >>>>>>>> 7, in <module> >>>>>>>> _main(environ=os.environ) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\emscripten.py", line 105 >>>>>>>> 7, in _main >>>>>>>> temp_files.run_and_clean(lambda: main( >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tools\tempfiles.py", lin >>>>>>>> e 39, in run_and_clean >>>>>>>> return func() >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\emscripten.py", line 106 >>>>>>>> 3, in <lambda> >>>>>>>> DEBUG_CACHE=DEBUG_CACHE, >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\emscripten.py", line 964 >>>>>>>> , in main >>>>>>>> temp_files=temp_files, DEBUG=DEBUG, DEBUG_CACHE=DEBUG_CACHE) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\emscripten.py", line 183 >>>>>>>> , in emscript >>>>>>>> settings['MAX_GLOBAL_ALIGN'] = metadata['maxGlobalAlign'] >>>>>>>> KeyError: 'maxGlobalAlign' >>>>>>>> Traceback (most recent call last): >>>>>>>> File "E:\Program Files\Emscripten\emscripten\incoming\emcc", line >>>>>>>> 1294, in <mo >>>>>>>> dule> >>>>>>>> final = shared.Building.emscripten(final, append_ext=False, >>>>>>>> extra_args=extra >>>>>>>> _args) >>>>>>>> File "E:\Program >>>>>>>> Files\Emscripten\emscripten\incoming\tools\shared.py", line 1 >>>>>>>> 535, in emscripten >>>>>>>> assert os.path.exists(filename + '.o.js'), 'Emscripten failed >>>>>>>> to generate .j >>>>>>>> s' >>>>>>>> AssertionError: Emscripten failed to generate .js >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> ---------------------------------------------------------------------- >>>>>>>> Ran 1 test in 1.128s >>>>>>>> >>>>>>>> FAILED (failures=1) >>>>>>>> >>>>>>>> Any ideas? >>>>>>>> >>>>>>>> Thanks, >>>>>>>> >>>>>>>> David >>>>>>>> >>>>>>>> >>>>>>>> On Monday, July 6, 2015 at 8:29:59 PM UTC-7, Alon Zakai wrote: >>>>>>>>> >>>>>>>>> Is that the latest on the incoming branch? There was a recent fix >>>>>>>>> there for something that looks like your issue. >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Jul 6, 2015 at 6:43 PM, <[email protected]> wrote: >>>>>>>>> >>>>>>>>>> When I try using the latest Emscripten version 1.34.1 I get the >>>>>>>>>> following error: >>>>>>>>>> >>>>>>>>>> Traceback (most recent call last): >>>>>>>>>> File "E:\Program Files\Emscripten\emscripten\1.34.1\\emcc", >>>>>>>>>> line 1260, in <mod >>>>>>>>>> ule> >>>>>>>>>> shared.Building.llvm_opt(final, link_opts) >>>>>>>>>> File "E:\Program >>>>>>>>>> Files\Emscripten\emscripten\1.34.1\tools\shared.py", line 142 >>>>>>>>>> 9, in llvm_opt >>>>>>>>>> assert os.path.exists(target), 'Failed to run llvm >>>>>>>>>> optimizations: ' + output >>>>>>>>>> >>>>>>>>>> AssertionError: Failed to run llvm optimizations: >>>>>>>>>> >>>>>>>>>> Any help would be much appreciated. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> >>>>>>>>>> David >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> -- >>>>> >>>>> >>>> >>> >> -- 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.
