[Bug 1983852] [NEW] `forming offset [32, 36] is out of the bounds` error on arm64 with precompiled headers

Michał Sawicz 1983852 at bugs.launchpad.net
Mon Aug 8 10:21:43 UTC 2022


Public bug reported:

When the gcc 12 toolchain appeared in proposed, Mir stopped building on
arm64 on kinetic:

https://launchpad.net/~mir-
team/+archive/ubuntu/dev/+packages?field.name_filter=mir&field.status_filter=&field.series_filter=kinetic

The error seems to be a compiler issue:

```
[ 90%] Building CXX object tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o
cd /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests && /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DEGL_NO_X11 -DGTEST_VERSION_MAJOR=1 -DGTEST_VERSION_MINOR=12 -DGTEST_VERSION_PATCH=1 -DLTTNG_UST_HAVE_SDT_INTEGRATION -DMESA_EGL_NO_X11_HEADERS -DMIR_BUILD_PLATFORM_EGLSTREAM_KMS -DMIR_BUILD_PLATFORM_GBM_KMS -DMIR_BUILD_PLATFORM_X11 -DMIR_DRMMODEADDFB_HAS_CONST_SIGNATURE -DMIR_SERVER_GRAPHICS_PLATFORM_ABI_STRING=\"20\" -DMIR_VERSION_MAJOR=2 -DMIR_VERSION_MICRO=0 -DMIR_VERSION_MINOR=8 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Dmir_unit_tests_EXPORTS -I/usr/src/googletest/googlemock/include -I/<<PKGBUILDDIR>>/include/miral -I/<<PKGBUILDDIR>>/src/include/server -I/usr/include/uuid -I/<<PKGBUILDDIR>>/include/test -I/<<PKGBUILDDIR>>/include/renderer -I/<<PKGBUILDDIR>>/include/renderers/gl -I/<<PKGBUILDDIR>>/tests/include -I/<<PKGBUILDDIR>> -I/usr/include/libdrm -I/usr/include/umockdev-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -I/<<PKGBUILDDIR>>/include/renderers/sw -I/<<PKGBUILDDIR>>/src/include/cookie -I/<<PKGBUILDDIR>>/src/include/platform -I/<<PKGBUILDDIR>>/src/include/client -I/<<PKGBUILDDIR>>/src/include/common -I/<<PKGBUILDDIR>>/src/include/gl -I/<<PKGBUILDDIR>>/src/platforms/common/client -I/<<PKGBUILDDIR>>/src/platforms/common/server -I/usr/include/gio-unix-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/<<PKGBUILDDIR>>/build-arm64/src/platform/graphics -I/<<PKGBUILDDIR>>/include/platform -I/<<PKGBUILDDIR>>/include/wayland -I/<<PKGBUILDDIR>>/build-arm64/src/wayland -I/<<PKGBUILDDIR>>/include/core -I/<<PKGBUILDDIR>>/include/common -I/<<PKGBUILDDIR>>/include/cookie -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -g -Wall -fno-strict-aliasing -pedantic -Wnon-virtual-dtor -Wextra -fPIC -Werror -Wno-mismatched-tags -Wno-psabi -flto -ffat-lto-objects -Wno-error=null-dereference -Wno-error=overloaded-virtual -Wno-sign-compare -Wno-error=maybe-uninitialized -fno-lto -Dregister= -Wno-error=infinite-recursion -std=c++20 -Winvalid-pch -include /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests/CMakeFiles/mir_unit_tests.dir/cmake_pch.hxx -MD -MT tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -MF CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o.d -o CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -c /<<PKGBUILDDIR>>/tests/unit-tests/input/test_config_changer.cpp
In file included from /usr/include/c++/12/ios:40,
                 from /usr/include/c++/12/ostream:38,
                 from /usr/include/c++/12/bits/unique_ptr.h:41,
                 from /usr/include/c++/12/memory:76,
                 from /usr/src/googletest/googlemock/include/gmock/gmock-actions.h:139,
                 from /usr/src/googletest/googlemock/include/gmock/gmock.h:56,
                 from /<<PKGBUILDDIR>>/build-arm64/tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/cmake_pch.hxx:5,
                 from <command-line>:
In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
    inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
    inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
/usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 36] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
  431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
      |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
In file included from /usr/src/googletest/googlemock/include/gmock/gmock-function-mocker.h:43,
                 from /usr/src/googletest/googlemock/include/gmock/gmock.h:58:
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:63: note: ‘<anonymous>’ declared here
 1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
      |                                        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
    inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
    inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
/usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 38] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
  431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
      |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:69: note: ‘<anonymous>’ declared here
 1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
      |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
    inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
    inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
/usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 53] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
  431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
      |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:76: note: ‘<anonymous>’ declared here
 1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
      |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
 1279 |                                   call + ")");
      |                                   ~~~~
In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
    inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
    inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
    inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
/usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 54] is out of the bounds [0, 32] of object ‘source_text’ with type ‘const std::string’ {aka ‘const std::__cxx11::basic_string<char>’} [-Werror=array-bounds]
  431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
      |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
/usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23: note: ‘source_text’ declared here
 1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
      |                       ^~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[3]: *** [tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/build.make:192: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/test_input_device_hub.cpp.o] Error 1
make[3]: Leaving directory '/<<PKGBUILDDIR>>/build-arm64'
make[2]: *** [CMakeFiles/Makefile2:4768: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....
```

I'm working on getting a small reproducer, but so far I've confirmed
disabling precompiled headers makes the issue go away.

ProblemType: Bug
DistroRelease: Ubuntu 22.10
Package: g++-12 12.1.0-5ubuntu1
ProcVersionSignature: User Name 5.15.0-43.46-generic 5.15.39
Uname: Linux 5.15.0-43-generic aarch64
NonfreeKernelModules: tls binfmt_misc veth unix_diag nft_masq nft_chain_nat bridge stp llc zfs zunicode zzstd zlua zcommon znvpair zavl icp spl ebtable_filter ebtables ip6table_raw ip6table_mangle ip6table_nat ip6table_filter ip6_tables iptable_raw iptable_mangle iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter bpfilter nf_tables nfnetlink nls_iso8859_1 sch_fq_codel dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua ipmi_devintf ipmi_msghandler drm efi_pstore ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor xor_neon raid6_pq libcrc32c raid1 raid0 multipath linear crct10dif_ce virtio_net net_failover failover virtio_blk aes_neon_bs aes_neon_blk crypto_simd cryptd
ApportVersion: 2.22.0-0ubuntu4
Architecture: arm64
CasperMD5CheckResult: unknown
Date: Mon Aug  8 10:16:17 2022
ProcEnviron:
 TERM=screen-256color
 PATH=(custom, no user)
 LANG=C.UTF-8
 SHELL=/bin/bash
SourcePackage: gcc-12
UpgradeStatus: No upgrade log present (probably fresh install)

** Affects: gcc-12 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: apport-bug arm64 kinetic

** Description changed:

  When the gcc 12 toolchain appeared in proposed, Mir stopped building on
- arm64:
+ arm64 on kinetic:
  
  https://launchpad.net/~mir-
  team/+archive/ubuntu/dev/+packages?field.name_filter=mir&field.status_filter=&field.series_filter=kinetic
  
  The error seems to be a compiler issue:
  
  ```
  [ 90%] Building CXX object tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o
  cd /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests && /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DEGL_NO_X11 -DGTEST_VERSION_MAJOR=1 -DGTEST_VERSION_MINOR=12 -DGTEST_VERSION_PATCH=1 -DLTTNG_UST_HAVE_SDT_INTEGRATION -DMESA_EGL_NO_X11_HEADERS -DMIR_BUILD_PLATFORM_EGLSTREAM_KMS -DMIR_BUILD_PLATFORM_GBM_KMS -DMIR_BUILD_PLATFORM_X11 -DMIR_DRMMODEADDFB_HAS_CONST_SIGNATURE -DMIR_SERVER_GRAPHICS_PLATFORM_ABI_STRING=\"20\" -DMIR_VERSION_MAJOR=2 -DMIR_VERSION_MICRO=0 -DMIR_VERSION_MINOR=8 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Dmir_unit_tests_EXPORTS -I/usr/src/googletest/googlemock/include -I/<<PKGBUILDDIR>>/include/miral -I/<<PKGBUILDDIR>>/src/include/server -I/usr/include/uuid -I/<<PKGBUILDDIR>>/include/test -I/<<PKGBUILDDIR>>/include/renderer -I/<<PKGBUILDDIR>>/include/renderers/gl -I/<<PKGBUILDDIR>>/tests/include -I/<<PKGBUILDDIR>> -I/usr/include/libdrm -I/usr/include/umockdev-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -I/<<PKGBUILDDIR>>/include/renderers/sw -I/<<PKGBUILDDIR>>/src/include/cookie -I/<<PKGBUILDDIR>>/src/include/platform -I/<<PKGBUILDDIR>>/src/include/client -I/<<PKGBUILDDIR>>/src/include/common -I/<<PKGBUILDDIR>>/src/include/gl -I/<<PKGBUILDDIR>>/src/platforms/common/client -I/<<PKGBUILDDIR>>/src/platforms/common/server -I/usr/include/gio-unix-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/<<PKGBUILDDIR>>/build-arm64/src/platform/graphics -I/<<PKGBUILDDIR>>/include/platform -I/<<PKGBUILDDIR>>/include/wayland -I/<<PKGBUILDDIR>>/build-arm64/src/wayland -I/<<PKGBUILDDIR>>/include/core -I/<<PKGBUILDDIR>>/include/common -I/<<PKGBUILDDIR>>/include/cookie -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -g -Wall -fno-strict-aliasing -pedantic -Wnon-virtual-dtor -Wextra -fPIC -Werror -Wno-mismatched-tags -Wno-psabi -flto -ffat-lto-objects -Wno-error=null-dereference -Wno-error=overloaded-virtual -Wno-sign-compare -Wno-error=maybe-uninitialized -fno-lto -Dregister= -Wno-error=infinite-recursion -std=c++20 -Winvalid-pch -include /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests/CMakeFiles/mir_unit_tests.dir/cmake_pch.hxx -MD -MT tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -MF CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o.d -o CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -c /<<PKGBUILDDIR>>/tests/unit-tests/input/test_config_changer.cpp
  In file included from /usr/include/c++/12/ios:40,
-                  from /usr/include/c++/12/ostream:38,
-                  from /usr/include/c++/12/bits/unique_ptr.h:41,
-                  from /usr/include/c++/12/memory:76,
-                  from /usr/src/googletest/googlemock/include/gmock/gmock-actions.h:139,
-                  from /usr/src/googletest/googlemock/include/gmock/gmock.h:56,
-                  from /<<PKGBUILDDIR>>/build-arm64/tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/cmake_pch.hxx:5,
-                  from <command-line>:
+                  from /usr/include/c++/12/ostream:38,
+                  from /usr/include/c++/12/bits/unique_ptr.h:41,
+                  from /usr/include/c++/12/memory:76,
+                  from /usr/src/googletest/googlemock/include/gmock/gmock-actions.h:139,
+                  from /usr/src/googletest/googlemock/include/gmock/gmock.h:56,
+                  from /<<PKGBUILDDIR>>/build-arm64/tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/cmake_pch.hxx:5,
+                  from <command-line>:
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
-     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
-     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
+     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
+     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 36] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
-   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
-       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
+   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  In file included from /usr/src/googletest/googlemock/include/gmock/gmock-function-mocker.h:43,
-                  from /usr/src/googletest/googlemock/include/gmock/gmock.h:58:
+                  from /usr/src/googletest/googlemock/include/gmock/gmock.h:58:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:63: note: ‘<anonymous>’ declared here
-  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
-       |                                        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
+  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
+       |                                        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
-     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
-     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
+     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
+     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 38] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
-   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
-       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
+   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:69: note: ‘<anonymous>’ declared here
-  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
-       |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
+  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
+       |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
-     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
-     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
+     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
+     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 53] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
-   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
-       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
+   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:76: note: ‘<anonymous>’ declared here
-  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
-       |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
-  1279 |                                   call + ")");
-       |                                   ~~~~                                      
+  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
+       |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
+  1279 |                                   call + ")");
+       |                                   ~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
-     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
-     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
-     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
+     inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
+     inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
+     inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 54] is out of the bounds [0, 32] of object ‘source_text’ with type ‘const std::string’ {aka ‘const std::__cxx11::basic_string<char>’} [-Werror=array-bounds]
-   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
-       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
+   431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+       |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23: note: ‘source_text’ declared here
-  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
-       |                       ^~~~~~~~~~~
+  1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
+       |                       ^~~~~~~~~~~
  cc1plus: all warnings being treated as errors
  make[3]: *** [tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/build.make:192: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/test_input_device_hub.cpp.o] Error 1
  make[3]: Leaving directory '/<<PKGBUILDDIR>>/build-arm64'
  make[2]: *** [CMakeFiles/Makefile2:4768: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/all] Error 2
  make[2]: *** Waiting for unfinished jobs....
  ```
  
  I'm working on getting a small reproducer, but so far I've confirmed
  disabling precompiled headers makes the issue go away.
  
  ProblemType: Bug
  DistroRelease: Ubuntu 22.10
  Package: g++-12 12.1.0-5ubuntu1
  ProcVersionSignature: User Name 5.15.0-43.46-generic 5.15.39
  Uname: Linux 5.15.0-43-generic aarch64
  NonfreeKernelModules: tls binfmt_misc veth unix_diag nft_masq nft_chain_nat bridge stp llc zfs zunicode zzstd zlua zcommon znvpair zavl icp spl ebtable_filter ebtables ip6table_raw ip6table_mangle ip6table_nat ip6table_filter ip6_tables iptable_raw iptable_mangle iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter bpfilter nf_tables nfnetlink nls_iso8859_1 sch_fq_codel dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua ipmi_devintf ipmi_msghandler drm efi_pstore ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor xor_neon raid6_pq libcrc32c raid1 raid0 multipath linear crct10dif_ce virtio_net net_failover failover virtio_blk aes_neon_bs aes_neon_blk crypto_simd cryptd
  ApportVersion: 2.22.0-0ubuntu4
  Architecture: arm64
  CasperMD5CheckResult: unknown
  Date: Mon Aug  8 10:16:17 2022
  ProcEnviron:
-  TERM=screen-256color
-  PATH=(custom, no user)
-  LANG=C.UTF-8
-  SHELL=/bin/bash
+  TERM=screen-256color
+  PATH=(custom, no user)
+  LANG=C.UTF-8
+  SHELL=/bin/bash
  SourcePackage: gcc-12
  UpgradeStatus: No upgrade log present (probably fresh install)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-12 in Ubuntu.
https://bugs.launchpad.net/bugs/1983852

Title:
  `forming offset [32, 36] is out of the bounds` error on arm64 with
  precompiled headers

Status in gcc-12 package in Ubuntu:
  New

Bug description:
  When the gcc 12 toolchain appeared in proposed, Mir stopped building
  on arm64 on kinetic:

  https://launchpad.net/~mir-
  team/+archive/ubuntu/dev/+packages?field.name_filter=mir&field.status_filter=&field.series_filter=kinetic

  The error seems to be a compiler issue:

  ```
  [ 90%] Building CXX object tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o
  cd /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests && /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DEGL_NO_X11 -DGTEST_VERSION_MAJOR=1 -DGTEST_VERSION_MINOR=12 -DGTEST_VERSION_PATCH=1 -DLTTNG_UST_HAVE_SDT_INTEGRATION -DMESA_EGL_NO_X11_HEADERS -DMIR_BUILD_PLATFORM_EGLSTREAM_KMS -DMIR_BUILD_PLATFORM_GBM_KMS -DMIR_BUILD_PLATFORM_X11 -DMIR_DRMMODEADDFB_HAS_CONST_SIGNATURE -DMIR_SERVER_GRAPHICS_PLATFORM_ABI_STRING=\"20\" -DMIR_VERSION_MAJOR=2 -DMIR_VERSION_MICRO=0 -DMIR_VERSION_MINOR=8 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Dmir_unit_tests_EXPORTS -I/usr/src/googletest/googlemock/include -I/<<PKGBUILDDIR>>/include/miral -I/<<PKGBUILDDIR>>/src/include/server -I/usr/include/uuid -I/<<PKGBUILDDIR>>/include/test -I/<<PKGBUILDDIR>>/include/renderer -I/<<PKGBUILDDIR>>/include/renderers/gl -I/<<PKGBUILDDIR>>/tests/include -I/<<PKGBUILDDIR>> -I/usr/include/libdrm -I/usr/include/umockdev-1.0 -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -I/<<PKGBUILDDIR>>/include/renderers/sw -I/<<PKGBUILDDIR>>/src/include/cookie -I/<<PKGBUILDDIR>>/src/include/platform -I/<<PKGBUILDDIR>>/src/include/client -I/<<PKGBUILDDIR>>/src/include/common -I/<<PKGBUILDDIR>>/src/include/gl -I/<<PKGBUILDDIR>>/src/platforms/common/client -I/<<PKGBUILDDIR>>/src/platforms/common/server -I/usr/include/gio-unix-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/<<PKGBUILDDIR>>/build-arm64/src/platform/graphics -I/<<PKGBUILDDIR>>/include/platform -I/<<PKGBUILDDIR>>/include/wayland -I/<<PKGBUILDDIR>>/build-arm64/src/wayland -I/<<PKGBUILDDIR>>/include/core -I/<<PKGBUILDDIR>>/include/common -I/<<PKGBUILDDIR>>/include/cookie -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -g -Wall -fno-strict-aliasing -pedantic -Wnon-virtual-dtor -Wextra -fPIC -Werror -Wno-mismatched-tags -Wno-psabi -flto -ffat-lto-objects -Wno-error=null-dereference -Wno-error=overloaded-virtual -Wno-sign-compare -Wno-error=maybe-uninitialized -fno-lto -Dregister= -Wno-error=infinite-recursion -std=c++20 -Winvalid-pch -include /<<PKGBUILDDIR>>/build-arm64/tests/unit-tests/CMakeFiles/mir_unit_tests.dir/cmake_pch.hxx -MD -MT tests/unit-tests/CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -MF CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o.d -o CMakeFiles/mir_unit_tests.dir/input/test_config_changer.cpp.o -c /<<PKGBUILDDIR>>/tests/unit-tests/input/test_config_changer.cpp
  In file included from /usr/include/c++/12/ios:40,
                   from /usr/include/c++/12/ostream:38,
                   from /usr/include/c++/12/bits/unique_ptr.h:41,
                   from /usr/include/c++/12/memory:76,
                   from /usr/src/googletest/googlemock/include/gmock/gmock-actions.h:139,
                   from /usr/src/googletest/googlemock/include/gmock/gmock.h:56,
                   from /<<PKGBUILDDIR>>/build-arm64/tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/cmake_pch.hxx:5,
                   from <command-line>:
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
      inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
      inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 36] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
    431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
        |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  In file included from /usr/src/googletest/googlemock/include/gmock/gmock-function-mocker.h:43,
                   from /usr/src/googletest/googlemock/include/gmock/gmock.h:58:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:63: note: ‘<anonymous>’ declared here
   1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
        |                                        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
      inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
      inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 38] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
    431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
        |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:69: note: ‘<anonymous>’ declared here
   1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
        |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
      inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
      inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 53] is out of the bounds [0, 32] of object ‘<anonymous>’ with type ‘std::__cxx11::basic_string<char>’ [-Werror=array-bounds]
    431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
        |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:76: note: ‘<anonymous>’ declared here
   1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
        |                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
   1279 |                                   call + ")");
        |                                   ~~~~
  In static member function ‘static constexpr std::char_traits<char>::char_type* std::char_traits<char>::copy(char_type*, const char_type*, std::size_t)’,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:674:23,
      inlined from ‘constexpr std::__cxx11::basic_string<_CharT, _Traits, _Allocator> std::operator+(__cxx11::basic_string<_CharT, _Traits, _Allocator>&&, const _CharT*) [with _CharT = char; _Traits = char_traits<char>; _Alloc = allocator<char>]’ at /usr/include/c++/12/bits/basic_string.h:3554:43,
      inlined from ‘testing::internal::TypedExpectation<F>& testing::internal::MockSpec<F>::InternalExpectedAt(const char*, int, const char*, const char*) [with F = void(const std::shared_ptr<mir::input::Device>&)]’ at /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23,
      inlined from ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’ at /<<PKGBUILDDIR>>/tests/acceptance-tests/test_input_device_hub.cpp:73:5:
  /usr/include/c++/12/bits/char_traits.h:431:56: error: ‘void* __builtin_memcpy(void*, const void*, long unsigned int)’ forming offset [32, 54] is out of the bounds [0, 32] of object ‘source_text’ with type ‘const std::string’ {aka ‘const std::__cxx11::basic_string<char>’} [-Werror=array-bounds]
    431 |         return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
        |                                        ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h: In member function ‘virtual void TestInputDeviceHub_notifies_input_device_observer_about_available_devices_Test::TestBody()’:
  /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:1278:23: note: ‘source_text’ declared here
   1278 |     const std::string source_text(std::string("EXPECT_CALL(") + obj + ", " +
        |                       ^~~~~~~~~~~
  cc1plus: all warnings being treated as errors
  make[3]: *** [tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/build.make:192: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/test_input_device_hub.cpp.o] Error 1
  make[3]: Leaving directory '/<<PKGBUILDDIR>>/build-arm64'
  make[2]: *** [CMakeFiles/Makefile2:4768: tests/acceptance-tests/CMakeFiles/mir_acceptance_tests.dir/all] Error 2
  make[2]: *** Waiting for unfinished jobs....
  ```

  I'm working on getting a small reproducer, but so far I've confirmed
  disabling precompiled headers makes the issue go away.

  ProblemType: Bug
  DistroRelease: Ubuntu 22.10
  Package: g++-12 12.1.0-5ubuntu1
  ProcVersionSignature: User Name 5.15.0-43.46-generic 5.15.39
  Uname: Linux 5.15.0-43-generic aarch64
  NonfreeKernelModules: tls binfmt_misc veth unix_diag nft_masq nft_chain_nat bridge stp llc zfs zunicode zzstd zlua zcommon znvpair zavl icp spl ebtable_filter ebtables ip6table_raw ip6table_mangle ip6table_nat ip6table_filter ip6_tables iptable_raw iptable_mangle iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_filter bpfilter nf_tables nfnetlink nls_iso8859_1 sch_fq_codel dm_multipath scsi_dh_rdac scsi_dh_emc scsi_dh_alua ipmi_devintf ipmi_msghandler drm efi_pstore ip_tables x_tables autofs4 btrfs blake2b_generic zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor xor_neon raid6_pq libcrc32c raid1 raid0 multipath linear crct10dif_ce virtio_net net_failover failover virtio_blk aes_neon_bs aes_neon_blk crypto_simd cryptd
  ApportVersion: 2.22.0-0ubuntu4
  Architecture: arm64
  CasperMD5CheckResult: unknown
  Date: Mon Aug  8 10:16:17 2022
  ProcEnviron:
   TERM=screen-256color
   PATH=(custom, no user)
   LANG=C.UTF-8
   SHELL=/bin/bash
  SourcePackage: gcc-12
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-12/+bug/1983852/+subscriptions




More information about the foundations-bugs mailing list