'#pragma GCC system_header' changes vs. 'ignore' for 'std::tr1::tie'

Jonathan Wakely jwakely@redhat.com
Tue Oct 1 09:41:57 GMT 2024


On Tue, 1 Oct 2024 at 07:53, Thomas Schwinge <tschwinge@baylibre.com> wrote:
>
> Hi!
>
> When building libstdc++-v3 with '--enable-werror', the build currently fails:
>
>     [...]
>     In file included from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/functional:42,
>                      from ../../../../../source-gcc/libstdc++-v3/src/c++98/hash_tr1.cc:27:
>     [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/tuple:426:21: error: ‘std::tr1::{anonymous}::ignore’ defined but not used [-Werror=unused-variable]
>       426 |     _Swallow_assign ignore;
>           |                     ^~~~~~
>     cc1plus: all warnings being treated as errors
>     make[5]: *** [Makefile:658: hash_tr1.lo] Error 1
>     [...]
>     In file included from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/functional:42,
>                      from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/ext/rope:61,
>                      from ../../../../../source-gcc/libstdc++-v3/src/c++98/ext-inst.cc:29:
>     [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/tuple:426:21: error: ‘std::tr1::{anonymous}::ignore’ defined but not used [-Werror=unused-variable]
>       426 |     _Swallow_assign ignore;
>           |                     ^~~~~~
>     cc1plus: all warnings being treated as errors
>     make[5]: *** [Makefile:658: ext-inst.lo] Error 1
>     make[5]: Target 'all' not remade because of errors.
>     make[5]: Leaving directory '[...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/src/c++98'
>     [...]
>     In file included from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/functional:42,
>                      from ../../../../../source-gcc/libstdc++-v3/src/c++11/cxx11-hash_tr1.cc:32:
>     [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/tuple:426:21: error: ‘std::tr1::{anonymous}::ignore’ defined but not used [-Werror=unused-variable]
>       426 |     _Swallow_assign ignore;
>           |                     ^~~~~~
>     cc1plus: all warnings being treated as errors
>     make[5]: *** [Makefile:681: cxx11-hash_tr1.lo] Error 1
>     make[5]: Target 'all' not remade because of errors.
>     make[5]: Leaving directory '[...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/src/c++11'
>     [...]
>
> Should we just mute this specific '-Wunused-variable', or (if that makes
> any sense) apply to 'tr1/tuple' changes similar to the 'std/tuple' onces
> of commit 1489e281b549af8a76a415556c07e147df933a44
> 'libstdc++: Implement P2968R2 "Making std::ignore a first-class object"'?
> Doing just:
>
>     --- libstdc++-v3/include/tr1/tuple
>     +++ libstdc++-v3/include/tr1/tuple
>     @@ -409,22 +409,6 @@ namespace tr1
>          {
>            return tuple<_Elements&...>(__args...);
>          }
>     -
>     -  // A class (and instance) which can be used in 'tie' when an element
>     -  // of a tuple is not required
>     -  struct _Swallow_assign
>     -  {
>     -    template<class _Tp>
>     -      _Swallow_assign&
>     -      operator=(const _Tp&)
>     -      { return *this; }
>     -  };
>     -
>     -  // TODO: Put this in some kind of shared file.
>     -  namespace
>     -  {
>     -    _Swallow_assign ignore;
>     -  } // anonymous namespace
>      }
>
>      _GLIBCXX_END_NAMESPACE_VERSION
>
> ... is not sufficient:
>
>     [-PASS:-]{+FAIL:+} tr1/6_containers/headers/tuple/types_std_tr1.cc  -std=gnu++17 (test for excess errors)
>
>     [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/headers/tuple/types_std_tr1.cc:24: error: 'ignore' has not been declared in 'std::tr1'

Right, removing it isn't an option, it's a required API defined in the ISO TR.


>
>     [-PASS:-]{+FAIL:+} tr1/6_containers/tuple/cons/big_tuples.cc  -std=gnu++17 (test for excess errors)
>     [-PASS:-]{+UNRESOLVED:+} tr1/6_containers/tuple/cons/big_tuples.cc  -std=gnu++17 [-execution test-]{+compilation failed to produce executable+}
>
>     [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc: In function 'int main()':
>     [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc:85: error: 'ignore' was not declared in this scope; did you mean 'std::ignore'?
>     In file included from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_pair.h:62,
>                      from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/utility:71,
>                      from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/tuple:44,
>                      from [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/cons/big_tuples.cc:22:
>     [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/utility.h:309: note: 'std::ignore' declared here
>
>     [-PASS:-]{+FAIL:+} tr1/6_containers/tuple/creation_functions/tie2.cc  -std=gnu++17 (test for excess errors)
>     [-PASS:-]{+UNRESOLVED:+} tr1/6_containers/tuple/creation_functions/tie2.cc  -std=gnu++17 [-execution test-]{+compilation failed to produce executable+}
>
>     [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc: In function 'int main()':
>     [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc:32: error: 'ignore' was not declared in this scope; did you mean 'std::ignore'?
>     In file included from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_pair.h:62,
>                      from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/utility:71,
>                      from [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/tr1/tuple:44,
>                      from [...]/source-gcc/libstdc++-v3/testsuite/tr1/6_containers/tuple/creation_functions/tie2.cc:20:
>     [...]/build-gcc/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/utility.h:309: note: 'std::ignore' declared here
>
>
> Grüße
>  Thomas
>



More information about the Libstdc++ mailing list