emscripten-core / emscripten-core/emscripten
boost/simple_segregated_storage won't work (but I can't replicate the failure)
- Dominant language
- C++
- Stars
- 27.6k
- Forks
- 3.6k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 105
Description
Please include the following in your bug report:
**Version of emscripten/emsdk:**
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.61-git
clang version 19.0.0git
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/emscripten/3.1.61/libexec/llvm/bin
**Failing command line in full:**
If this is compile or link-time failure please include the full failing command
along with its entire output. => it's not
**Full link command and output with `-v` appended:**
Even for runtime issues it helps a lot if you can include the full link command.
Adding `-v` to the link command will show all of the sub-commands run which
can help us diagnose your issue.
`brew --prefix emscripten`/bin/em++ -v build/cookbook/gui/direct_manipulation/simplest/simplest.o -o build/cookbook/gui/direct_manipulation/simplest/simplest_app.html -s USE_SDL=2 -pthread -gsource-map -s USE_SDL=2 -s FULL_ES3 -s MIN_WEBGL_VERSION=2 -s MAX_WEBGL_VERSION=2 -s ASSERTIONS=2 -s NO_DISABLE_EXCEPTION_CATCHING -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s PTHREAD_POOL_SIZE=5 -L../../misc/emscripten/local-install/lib -s USE_SDL=2 -pthread -gsource-map -s USE_SDL=2 -s FULL_ES3 -s MIN_WEBGL_VERSION=2 -s MAX_WEBGL_VERSION=2 -s ASSERTIONS=2 -s NO_DISABLE_EXCEPTION_CATCHING -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s PTHREAD_POOL_SIZE=5 -L../../misc/emscripten/local-install/lib -L../djnn-cpp/build/lib -ldjnn-utils -ldjnn-gui -ldjnn-display -ldjnn-base -ldjnn-exec_env -ldjnn-core
/opt/homebrew/Cellar/emscripten/3.1.61/libexec/llvm/bin/clang --version
/opt/homebrew/Cellar/emscripten/3.1.61/libexec/llvm/bin/wasm-ld -o build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm build/cookbook/gui/direct_manipulation/simplest/simplest.o -L../../misc/emscripten/local-install/lib -L../../misc/emscripten/local-install/lib -L../djnn-cpp/build/lib ../djnn-cpp/build/lib/libdjnn-utils.a ../djnn-cpp/build/lib/libdjnn-gui.a ../djnn-cpp/build/lib/libdjnn-display.a ../djnn-cpp/build/lib/libdjnn-base.a ../djnn-cpp/build/lib/libdjnn-exec_env.a ../djnn-cpp/build/lib/libdjnn-core.a -L/opt/homebrew/Cellar/emscripten/3.1.61/libexec/cache/sysroot/lib/wasm32-emscripten /opt/homebrew/Cellar/emscripten/3.1.61/libexec/cache/sysroot/lib/wasm32-emscripten/libSDL2-mt.a /opt/homebrew/Cellar/emscripten/3.1.61/libexec/cache/sysroot/lib/wasm32-emscripten/crtbegin.o -lGL-mt-webgl2-full_es3-getprocaddr -lal -lhtml5 -lbulkmemory -lstubs-debug -lnoexit -lc-mt-debug -ldlmalloc-mt-debug -lcompiler_rt-mt -lc++-mt -lc++abi-debug-mt -lsockets-mt -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /var/folders/_y/mk1ljg908xj95w0059blfnxr0000gp/T/tmpld89c5idlibemscripten_js_symbols.so --import-memory --shared-memory --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=_emscripten_thread_free_data --export=_emscripten_thread_crashed --export=emscripten_main_runtime_thread_id --export=emscripten_main_thread_process_queued_calls --export=_emscripten_run_on_main_thread_js --export=emscripten_stack_set_limits --export=__get_temp_ret --export=__set_temp_ret --export=__cxa_is_pointer_type --export=__cxa_can_catch --export=__cxa_increment_exception_refcount --export=__cxa_decrement_exception_refcount --export=setThrew --export=__cxa_free_exception --export=__wasm_call_ctors --export=_emscripten_tls_init --export=_emscripten_thread_init --export=_emscripten_stack_restore --export=_emscripten_thread_exit --export=__get_exception_message --export=free --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-memory=16777216 --no-entry --stack-first --table-base=1
"/opt/homebrew/opt/python@3.12/bin/python3.12" -E /opt/homebrew/Cellar/emscripten/3.1.61/libexec/tools/wasm-sourcemap.py build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm --dwarfdump=/opt/homebrew/Cellar/emscripten/3.1.61/libexec/llvm/bin/llvm-dwarfdump -o build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm.map --basepath=/Users/conversy/recherche/istar/code/djnn/smala/build/cookbook/gui/direct_manipulation/simplest
/opt/homebrew/Cellar/emscripten/3.1.61/libexec/llvm/bin/llvm-objcopy build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm --remove-section=.debug* --remove-section=producers
/opt/homebrew/Cellar/emscripten/3.1.61/libexec/binaryen/bin/wasm-emscripten-finalize -g --dyncalls-i64 --pass-arg=legalize-js-interface-exported-helpers --check-stack-overflow --dwarf --output-source-map-url=simplest_app.wasm.map build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm -o build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm --detect-features --input-source-map=build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm.map --output-source-map=build/cookbook/gui/direct_manipulation/simplest/simplest_app.wasm.map
/opt/homebrew/opt/node/bin/node /opt/homebrew/Cellar/emscripten/3.1.61/libexec/src/compiler.mjs /var/folders/_y/mk1ljg908xj95w0059blfnxr0000gp/T/tmpzgzr1wi6.json
/opt/homebrew/opt/node/bin/node /opt/homebrew/Cellar/emscripten/3.1.61/libexec/tools/preprocessor.mjs /var/folders/_y/mk1ljg908xj95w0059blfnxr0000gp/T/emscripten_temp_ke3ux0zh/settings.js shell.html
Note: Where possible, please avoid attaching screen shots of code or console
logs. Instead, please include them as text so that they may be copied /
searched. To make code blocks more readable and syntax highlighted, please
escape them with three backticks before and after, like this:
This function: https://github.com/boostorg/pool/blob/ec7da07ed13e0c61e50d945b574a12ae7ec83cf4/include/boost/pool/simple_segregated_storage.hpp#L91
seems to *sometimes* fail with emscripten.
```
static void * & nextof(void * const ptr)
{ //! The return value is just *ptr cast to the appropriate type. ptr must not be 0. (For the sake of code readability :)
//! As an example, let us assume that we want to truncate the free list after the first chunk.
//! That is, we want to set *first to 0; this will result in a free list with only one entry.
//! The normal way to do this is to first cast first to a pointer to a pointer to void,
//! and then dereference and assign (*static_cast(first) = 0;).
//! This can be done more easily through the use of this convenience function (nextof(first) = 0;).
//! \returns dereferenced pointer.
return *(static_cast(ptr));
}
```
The problem is: I can't replicate the failure with this simple program (which is a simple adaptation of my real code):
```#define BOOST_PREVENT_MACRO_SUBSTITUTION
//#define BOOST_POOL_VALIDATE
#include
#include
//char cmap [256 * (2 * sizeof(float))];
float pool [256 * 2];
unsigned int
allocate_coords_plain(boost::simple_segregated_storage& alloc, size_t num)
{
if (num%4) num += 4-num%4; // align to 4
//auto cmap = pool;
char* const cmap = (char*) pool;
auto mem = (char*) alloc.malloc_n(num/4, 4 * (2 * sizeof(float)));
assert(mem >= cmap);
unsigned int result = (mem - cmap) / (2 * sizeof(float));
return result;
}
int main()
{
boost::simple_segregated_storage alloc;
alloc.add_ordered_block((float*)pool, 256 * (2 * sizeof(float)), 4 * (2 * sizeof(float)));
for (size_t i=0; i<16; ++i) {
auto mem = allocate_coords_plain (alloc, 4);
printf("%d\n", mem);
}
return 0;
}
```
This simple program works with emscripten.
In my real code, it returns `0`.
Does someone know of any possible reason why this code would fail?
Best,
Stéphane
Contributor guide
Assessment
This issue has not been assessed yet.