protobuf
protobuf copied to clipboard
ruby gem for v27.2 fails to build with gcc 14
What version of protobuf and what language are you using? Version: v27.2 https://github.com/protocolbuffers/protobuf/commit/63def39e881afa496502d9c410f4ea948e59490d Language: Ruby What operating system (Linux, Windows, ...) and version? Arch Linux rolling What runtime / compiler are you using (e.g., python version or gcc version)
$ gcc --version
gcc (GCC) 14.1.1 20240522
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ruby --version
ruby 3.2.4 (2024-04-23 revision af471c0e01) [x86_64-linux]
What did you do? Steps to reproduce the behavior:
$ curl -o protobuf-27.2.tar.gz https://github.com/protocolbuffers/protobuf/archive/v27.2/protobuf-27.2.tar.gz
$ cd protobuf-27.2/ruby
$ rake
What did you expect to see The extension for the ruby protobuf gem build without error. What did you see instead? The build failing due to the compiler detecting an incompatible pointer type conversion
compiling ../../../../ext/google/protobuf_c/shared_message.c
../../../../ext/google/protobuf_c/defs.c: In function ‘MethodDescriptor_initialize’:
../../../../ext/google/protobuf_c/defs.c:1513:19: error: assignment to ‘const upb_MethodDef *’ from incompatible pointer type ‘const upb_ServiceDef *’ [-Wincompatible-pointer-types]
1513 | self->methoddef = (const upb_ServiceDef*)NUM2ULL(ptr);
| ^
make: *** [Makefile:247: defs.o] Error 1
make: *** Waiting for unfinished jobs....
rake aborted!
Make sure you include information that can help us debug (full error message, exception listing, stack trace, logs).
$ rake
rm -f lib/google/protobuf/any_pb.rb lib/google/protobuf/api_pb.rb lib/google/protobuf/descriptor_pb.rb lib/google/protobuf/duration_pb.rb lib/google/protobuf/empty_pb.rb lib/google/protobuf/field_mask_pb.rb lib/google/protobuf/source_context_pb.rb lib/google/protobuf/struct_pb.rb lib/google/protobuf/timestamp_pb.rb lib/google/protobuf/type_pb.rb lib/google/protobuf/wrappers_pb.rb tests/basic_test_pb.rb tests/basic_test_features_pb.rb tests/basic_test_proto2_pb.rb tests/generated_code_pb.rb tests/generated_code_proto2_pb.rb tests/generated_code_editions_pb.rb tests/multi_level_nesting_test_pb.rb tests/repeated_field_test_pb.rb tests/service_test_pb.rb tests/stress_pb.rb tests/test_import_pb.rb tests/test_import_proto2_pb.rb tests/test_ruby_package_pb.rb tests/test_ruby_package_proto2_pb.rb
rm -f google-protobuf-*gem
rm -f Gemfile.lock
rm -rf pkg
rm -rf tmp
protoc -I../src --ruby_out=lib ../src/google/protobuf/any.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/api.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/descriptor.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/duration.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/empty.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/field_mask.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/source_context.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/struct.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/timestamp.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/type.proto
protoc -I../src --ruby_out=lib ../src/google/protobuf/wrappers.proto
protoc -I../src -I./tests --ruby_out=tests tests/basic_test.proto
protoc -I../src -I./tests --ruby_out=tests tests/basic_test_features.proto
protoc -I../src -I./tests --ruby_out=tests tests/basic_test_proto2.proto
protoc -I../src -I./tests --ruby_out=tests tests/generated_code.proto
protoc -I../src -I./tests --ruby_out=tests tests/generated_code_proto2.proto
protoc -I../src -I./tests --ruby_out=tests tests/generated_code_editions.proto
protoc -I../src -I./tests --ruby_out=tests tests/multi_level_nesting_test.proto
protoc -I../src -I./tests --ruby_out=tests tests/repeated_field_test.proto
protoc -I../src -I./tests --ruby_out=tests tests/service_test.proto
protoc -I../src -I./tests --ruby_out=tests tests/stress.proto
protoc -I../src -I./tests --ruby_out=tests tests/test_import.proto
protoc -I../src -I./tests --ruby_out=tests tests/test_import_proto2.proto
protoc -I../src -I./tests --ruby_out=tests tests/test_ruby_package.proto
protoc -I../src -I./tests --ruby_out=tests tests/test_ruby_package_proto2.proto
/usr/bin/ruby -I. ../../../../ext/google/protobuf_c/extconf.rb
mkdir -p tmp/x86_64-linux/protobuf_c/3.2.4
cd tmp/x86_64-linux/protobuf_c/3.2.4
creating Makefile
/usr/bin/make
cd -
cd tmp/x86_64-linux/protobuf_c/3.2.4
compiling ../../../../ext/google/protobuf_c/protobuf.c
compiling ../../../../ext/google/protobuf_c/defs.c
compiling ../../../../ext/google/protobuf_c/convert.c
compiling ../../../../ext/google/protobuf_c/message.c
compiling ../../../../ext/google/protobuf_c/repeated_field.c
compiling ../../../../ext/google/protobuf_c/map.c
compiling ../../../../ext/google/protobuf_c/ruby-upb.c
compiling ../../../../ext/google/protobuf_c/wrap_memcpy.c
compiling ../../../../ext/google/protobuf_c/third_party/utf8_range/utf8_range.c
compiling ../../../../ext/google/protobuf_c/shared_convert.c
compiling ../../../../ext/google/protobuf_c/shared_message.c
../../../../ext/google/protobuf_c/defs.c: In function ‘MethodDescriptor_initialize’:
../../../../ext/google/protobuf_c/defs.c:1513:19: error: assignment to ‘const upb_MethodDef *’ from incompatible pointer type ‘const upb_ServiceDef *’ [-Wincompatible-pointer-types]
1513 | self->methoddef = (const upb_ServiceDef*)NUM2ULL(ptr);
| ^
make: *** [Makefile:247: defs.o] Error 1
make: *** Waiting for unfinished jobs....
rake aborted!
Command failed with status (2): [/usr/bin/make...]
Tasks: TOP => default => build => compile => compile:x86_64-linux => compile:protobuf_c:x86_64-linux => copy:protobuf_c:x86_64-linux:3.2.4 => tmp/x86_64-linux/protobuf_c/3.2.4/protobuf_c.so
(See full trace by running task with --trace)