Apple clang v12: "implicit conversion loses integer precision"
zethon opened this issue · comments
Trying to compile on MacOS with Clang 12 gives the following error:
$> cmake --build . -- -j 18
[4/5] Building CXX object CMakeFiles/aws-lambda-runtime.dir/src/backward.cpp.o
FAILED: CMakeFiles/aws-lambda-runtime.dir/src/backward.cpp.o
/Library/Developer/CommandLineTools/usr/bin/c++ -DAWS_LAMBDA_LOG=0 -I../include -O3 -DNDEBUG -flto=thin -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk -mmacosx-version-min=10.15 -fno-exceptions -fno-rtti -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -Werror -Wconversion -Wno-sign-conversion -std=gnu++11 -MD -MT CMakeFiles/aws-lambda-runtime.dir/src/backward.cpp.o -MF CMakeFiles/aws-lambda-runtime.dir/src/backward.cpp.o.d -o CMakeFiles/aws-lambda-runtime.dir/src/backward.cpp.o -c ../src/backward.cpp
In file included from ../src/backward.cpp:26:
../src/backward.h:3269:57: error: implicit conversion loses integer precision: 'size_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
_symbols.reset(backtrace_symbols(st.begin(), st.size()));
~~~~~~~~~~~~~~~~~ ~~~^~~~~~
../src/backward.h:3844:19: note: in instantiation of function template specialization 'backward::TraceResolverDarwinImpl<backward::trace_resolver_tag::backtrace_symbol>::load_stacktrace<backward::StackTrace>' requested here
_resolver.load_stacktrace(st);
^
../src/backward.h:3801:9: note: in instantiation of function template specialization 'backward::Printer::print_stacktrace<backward::StackTrace>' requested here
print_stacktrace(st, os, colorize);
^
../src/backward.h:4055:17: note: in instantiation of function template specialization 'backward::Printer::print<backward::StackTrace>' requested here
printer.print(st, stderr);
^
1 error generated.
ninja: build stopped: subcommand failed.
Changing line 3269 to:
_symbols.reset(backtrace_symbols(st.begin(), static_cast<int>(st.size())));
fixes the error.
I've merged #111 which should resolve this
This will be an error if you ever turn on the old-style cast warning (which probably should be turned on).