Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BOOST_NO_CTYPE_FUNCTIONS and BSD OS's #382

Open
brad0 opened this issue Jul 2, 2021 · 15 comments
Open

BOOST_NO_CTYPE_FUNCTIONS and BSD OS's #382

brad0 opened this issue Jul 2, 2021 · 15 comments

Comments

@brad0
Copy link
Contributor

brad0 commented Jul 2, 2021

While looking at include/boost/config/platform/bsd.hpp and updating the OpenBSD bits I noticed this
bit of the header.

//
// The BSD <ctype.h> has macros only, no functions:
//
#if !defined(__OpenBSD__) || defined(__DragonFly__)
#  define BOOST_NO_CTYPE_FUNCTIONS
#endif

I was wondering if this needed any further changes for the current state, but looking at each respective
ctype.h header for the BSD's I am not sure if this should be set or not. Could someone who is familiar
with this area comment after taking a look at the headers? I have provided URLs below,

https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/ctype.h
https://raw.githubusercontent.com/freebsd/freebsd-src/main/include/ctype.h
http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/include/ctype.h?rev=1.35&only_with_tag=MAIN
http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/include/ctype.h?rev=1.25

@jzmaddock
Copy link
Collaborator

@Kojoley
Copy link
Contributor

Kojoley commented Jul 4, 2021

Test case is here: https://github.com/boostorg/config/blob/develop/test/boost_no_ctype_functions.ipp

I think the test case is invalid, it takes addresses of non-addressable standard library functions
[namespace.constraints]/6

@jzmaddock
Copy link
Collaborator

I'm not sure when that constraint was added, but it's not in C++11.

The point is that these should be real functions and not macros as they originally were on BSD.

@Kojoley
Copy link
Contributor

Kojoley commented Jul 5, 2021

I'm not sure when that constraint was added, but it's not in C++11.

It is C++20, P0551.

The point is that these should be real functions and not macros as they originally were on BSD.

Converting the test to C must be the simplest solution. IIRC doing (isalpha)('x') should done the job too.

@jzmaddock
Copy link
Collaborator

The test case has to be C++, I'll change it, now that C++20 has apparently broken it.

@jzmaddock
Copy link
Collaborator

Test case corrected for C++20 in develop.

@jzmaddock
Copy link
Collaborator

Can you check the revised test case on BSD?

sstsai added a commit to sstsai/sonda that referenced this issue Dec 15, 2021
e108255ff Merge branch 'develop'
fc4e48a91 Merge pull request #411 from boostorg/msvc_2022
0c21be040 Correct two phase lookup config for msvc-14.3.
77df5deb6 Configuration update for msvc-2022.
ad40eb581 Merge pull request #410 from sdarwin/meta
e12a9c522 Update metadata
0b62f7d5a Merge branch 'develop'
037a9b4d2 Merge pull request #409 from boostorg/vs2022_ci
1aa177da0 Change VS cxxstd=20 to cxxstd=latest
64bf41929 Add Visual Studio 2022 runner.
57f06834e Merge pull request #405 from ohhmm/develop
528db2c58 Merge pull request #408 from boostorg/atomic_macros
7cc7f9400 Update for present, but broken <concepts> on latest MacOS clang.
35c4a13e6 Print out <atomic> macros.
b12d44fc7 Disable __int128 on CUDA device code.
1e5f50939 Add first nvcc github action. (#407)
2fdfd43e2 Fix for clang CUDA generation, fixes boostorg/config#297
f34bcff86 Add VC143 toolset
8f05b6457 Merge branch 'develop'
85292621e Add emscripten testing and support. (#403)
0d95a7405 Merge pull request #398 from boostorg/issue336
163599973 Update nodiscard attribute: It's not supported on functions pre-c++11 even if __has_cpp_attribute indicates it is supported. Also update test case. Fixes boostorg/config#336.
fac8ba93c Merge pull request #397 from boostorg/codecvt
88866861d MSVC update that handled deprecation of <codecvt> and availability of <stop_token>. See also boostorg/config#391.
f1b2746fb Merge pull request #395 from boostorg/mclow-patch-3
8df65862c Fix typo
01f00de73 Bump version to 1.78.0
47614564e Merge pull request #393 from boostorg/issue392
76d4eaf4b Patch for noinline attribute on the HIP compiler. Fixes boostorg/config#392.
c3de80c2e Merge pull request #387 from boostorg/issue382
a8bdf6ae2 Merge pull request #388 from boostorg/gcc4-4-fixes
42cff9687 Try and fix gcc-4.4 -fno-rtti failure.
73557f776 Correct boost_no_ctype_functions.ipp for C++20. See boostorg/config#382.
cfc6545ce Merge pull request #385 from boostorg/pr/boost-clang-version
eb3a0a98a Merge pull request #380 from xantares/mingw_tls
b80c25f47 Print __apple_build_version__ in config_info
8595667b3 Fix spelling of __APPLE__
a5b2dbdcf Merge pull request #384 from boostorg/pr/detail-workaround-guard
f1b4a51ce Merge pull request #383 from boostorg/pr/clang-major-workaround
098ca4a3c Document BOOST_CLANG_VERSION
0148ea5ea Print BOOST_CLANG, BOOST_CLANG_VERSION in config_info
1e63c7729 Define BOOST_CLANG_VERSION_WORKAROUND_GUARD
f6fdfb929 Define BOOST_CLANG_VERSION
e52aa5865 Update detail/workaround.hpp include guard
9e8099384 Define __clang_major___WORKAROUND_GUARD
98c3ac815 Allow thread_local on mingw with gcc>=11

git-subtree-dir: extern/boost/config
git-subtree-split: e108255ffb5d2557ed3398b3fc575a2e9fd434cc
@brad0
Copy link
Contributor Author

brad0 commented Sep 16, 2022

Sorry I forgot about this. How do I go about running the test individually or the whole test suite?

@Kojoley
Copy link
Contributor

Kojoley commented Sep 16, 2022

From the root of Boost, where bootstrap.sh is located: b2 libs/config/test to run the whole test suite of the Boost.Config library and b2 libs/config/test//name_of_the_test to run a test named name_of_the_test of the Boost.Config library.

@Kojoley
Copy link
Contributor

Kojoley commented Sep 16, 2022

Actually, it seems that I am wrong and you need to do b2 libs/config/test/all to run the test suit that includes that test, and b2 libs/config/test/all//BOOST_NO_CTYPE_FUNCTIONS to run the test only,

@jzmaddock is it done intentionally? I am asking because I do not see those test to run on https://www.boost.org/development/tests/develop/developer/config.html

@brad0
Copy link
Contributor Author

brad0 commented Sep 17, 2022

Boost 1.80

humpty$ b2 libs/config/test/all//BOOST_NO_CTYPE_FUNCTIONS
Performing configuration checks

    - default address-model    : 64-bit (cached) [1]
    - default architecture     : x86 (cached) [1]

[1] clang-13
...found 130 targets...
...updating 19 targets...
clang-linux.compile.c++ bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.o
libs/config/test/all/../no_ctype_functions_fail.cpp:27:2: error: "this file should not compile"
#error "this file should not compile"
 ^
libs/config/test/all/../no_ctype_functions_fail.cpp:32:11: error: use of undeclared identifier 'boost_no_ctype_functions'
   return boost_no_ctype_functions::test();
          ^
2 errors generated.
(failed-as-expected) bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.o
**passed** bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.test
clang-linux.compile.c++ bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.o
clang-linux.link bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass
testing.capture-output bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.run
**passed** bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.test
...updated 19 targets...

From the source dir after running a build of Boost itself.

@Kojoley
Copy link
Contributor

Kojoley commented Sep 17, 2022

Boost 1.80

humpty$ b2 libs/config/test/all//BOOST_NO_CTYPE_FUNCTIONS
Performing configuration checks

    - default address-model    : 64-bit (cached) [1]
    - default architecture     : x86 (cached) [1]

[1] clang-13
...found 130 targets...
...updating 19 targets...
clang-linux.compile.c++ bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.o
libs/config/test/all/../no_ctype_functions_fail.cpp:27:2: error: "this file should not compile"
#error "this file should not compile"
 ^
libs/config/test/all/../no_ctype_functions_fail.cpp:32:11: error: use of undeclared identifier 'boost_no_ctype_functions'
   return boost_no_ctype_functions::test();
          ^
2 errors generated.
(failed-as-expected) bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.o
**passed** bin.v2/libs/config/test/all/no_ctype_functions_fail.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_fail.test
clang-linux.compile.c++ bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.o
clang-linux.link bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass
testing.capture-output bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.run
**passed** bin.v2/libs/config/test/all/no_ctype_functions_pass.test/clang-linux-13/debug/threading-multi/visibility-hidden/no_ctype_functions_pass.test
...updated 19 targets...

This means that the macro state is correct for your platform.

From the source dir after running a build of Boost itself.

Building Boost manually is not necessary in case of running tests, b2 would do that automatically when needed.

@brad0
Copy link
Contributor Author

brad0 commented Sep 17, 2022

Building Boost manually is not necessary in case of running tests, b2 would do that automatically when needed.

I only did that because when I initiated the command to run the test it looked as if it was going to run a full build. When I did the same command after doing a build it didn't behave in the same manner, but it did run the test.

@jzmaddock
Copy link
Collaborator

The tests under /all/ are useful sometimes, but need to be taken with a pinch of salt also.

I would:

cd libs/config/test
../../../b2 config_test

Then make any changes you might think are required and re-run and see what if anything breaks ;)

@Kojoley
Copy link
Contributor

Kojoley commented Sep 17, 2022

The tests under /all/ are useful sometimes, but need to be taken with a pinch of salt also.

I personally fixed wrong defines in config that lived for a long time and could be detected much earlier if these were running.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants