Closed Bug 1713957 Opened 4 years ago Closed 4 years ago

gcc error: mozilla::detail::MaybeStorage[...] is implicitly deleted because the default definition would be ill-formed

Categories

(Core :: MFBT, defect)

Firefox 89
defect

Tracking

()

RESOLVED DUPLICATE of bug 1710235

People

(Reporter: spectre, Unassigned)

References

(Regression)

Details

(Keywords: regression)

Detected in Firefox 89 with gcc 11.1.1 on Fedora, but appears to occur on trunk as well. The exact compilation error is

 9:54.84 In file included from Unified_cpp_components_gtest0.cpp:2:
 9:54.84 /home/spectre/src/mozilla-release/intl/components/gtest/TestNumberFormat.cpp: In member function ‘virtual void mozilla::intl::IntlNumberFormat_Unit_Test::TestBody()’:
 9:54.84 /home/spectre/src/mozilla-release/intl/components/gtest/TestNumberFormat.cpp:141:78: error: use of deleted function ‘mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >& mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >::operator=(mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >&&)’
 9:54.84   141 |                                       NumberFormatOptions::UnitDisplay::Long));
 9:54.84       |                                                                              ^
 9:54.84 In file included from /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/intl/NumberFormat.h:11,
 9:54.84                  from /home/spectre/src/mozilla-release/intl/components/gtest/TestNumberFormat.cpp:6,
 9:54.84                  from Unified_cpp_components_gtest0.cpp:2:
 9:54.84 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/Maybe.h:348:55: note: ‘mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >& mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >::operator=(mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >&&)’ is implicitly deleted because the default definition would be ill-formed:
 9:54.84   348 | class MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS Maybe
 9:54.84       |                                                       ^~~~~
 9:54.84 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/Maybe.h:348:55: error: use of deleted function ‘mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>& mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::operator=(mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>&&)’
 9:54.84 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/Maybe.h:274:8: note: ‘mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>& mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::operator=(mozilla::detail::MaybeStorage<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>&&)’ is implicitly deleted because the default definition would be ill-formed:
 9:54.84   274 | struct MaybeStorage<T, true> : MaybeStorageBase<T> {
 9:54.84       |        ^~~~~~~~~~~~~~~~~~~~~
 9:54.84 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/Maybe.h:274:8: error: use of deleted function ‘mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>& mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::operator=(mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>&&)’
 9:54.84 In file included from /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/Maybe.h:20,
 9:54.84                  from /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/intl/NumberFormat.h:11,
 9:54.85                  from /home/spectre/src/mozilla-release/intl/components/gtest/TestNumberFormat.cpp:6,
 9:54.85                  from Unified_cpp_components_gtest0.cpp:2:
 9:54.85 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/MaybeStorageBase.h:61:8: note: ‘mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>& mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::operator=(mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>&&)’ is implicitly deleted because the default definition would be ill-formed:
 9:54.85    61 | struct MaybeStorageBase<T, true> {
 9:54.85       |        ^~~~~~~~~~~~~~~~~~~~~~~~~
 9:54.85 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/MaybeStorageBase.h:61:8: error: use of deleted function ‘mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union& mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union::operator=(mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union&&)’
 9:54.85 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/MaybeStorageBase.h:65:9: note: ‘mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union& mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union::operator=(mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union&&)’ is implicitly deleted because the default definition would be ill-formed:
 9:54.85    65 |   union Union {
 9:54.85       |         ^~~~~
 9:54.85 /home/spectre/src/mozilla-release/obj-powerpc64le-unknown-linux-gnu/dist/include/mozilla/MaybeStorageBase.h:73:15: error: union member ‘mozilla::detail::MaybeStorageBase<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>, true>::Union::val’ with non-trivial ‘std::pair<_T1, _T2>& std::pair<_T1, _T2>::operator=(typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type) [with _T1 = std::basic_string_view<char>; _T2 = mozilla::intl::NumberFormatOptions::UnitDisplay; typename std::conditional<std::__and_<std::is_move_assignable<_Tp>, std::is_move_assignable<_T2> >::value, std::pair<_T1, _T2>&&, std::__nonesuch&&>::type = std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay>&&]’
 9:54.85    73 |     NonConstT val;
 9:54.85       |               ^~~
 9:54.85 In file included from Unified_cpp_components_gtest0.cpp:2:
 9:54.85 /home/spectre/src/mozilla-release/intl/components/gtest/TestNumberFormat.cpp:148:78: error: use of deleted function ‘mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >& mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >::operator=(mozilla::Maybe<std::pair<std::basic_string_view<char>, mozilla::intl::NumberFormatOptions::UnitDisplay> >&&)’
 9:54.85   148 |                                       NumberFormatOptions::UnitDisplay::Long));
 9:54.85       |                                                                              ^
 9:55.14 gmake[4]: *** [/home/spectre/src/mozilla-release/config/rules.mk:676: Unified_cpp_components_gtest0.o] Error 1
 9:55.14 gmake[3]: *** [/home/spectre/src/mozilla-release/config/recurse.mk:72: intl/components/gtest/target-objects] Error 2
 9:55.14 gmake[3]: *** Waiting for unfinished jobs....

Provisionally marking as a regression from bug 1700336.

I can reproduce with gcc 11.1 from Debian experimental, but not with a custom build from the releases/gcc-11 branch, nor with the gcc-snapshot package from Debian experimental (which is GCC trunk as of 2021-05-27). Closing as a probable bug in GCC itself, maybe related to bug 1710235.

Status: NEW → RESOLVED
Closed: 4 years ago
Resolution: --- → INVALID

I agree, I think this is another symptom of the same bug. Duping.

Resolution: INVALID → DUPLICATE
Has Regression Range: --- → yes
Keywords: regression
You need to log in before you can comment on or make changes to this bug.