Skip to content

[libc++] Remove _LIBCPP_HAS_NO_FGETPOS_FSETPOS #72073

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

Merged
merged 1 commit into from
Nov 13, 2023

Conversation

ldionne
Copy link
Member

@ldionne ldionne commented Nov 13, 2023

Instead of using individual macros to turn off missing C library features, we use the using_if_exists attribute now. This patch removes the _LIBCPP_HAS_NO_FGETPOS_FSETPOS macro used to workaround missing fgetpos and fsetpos on older versions of Android -- using_if_exists should take care of those in the headers and we should add appropriate XFAILs to the tests instead of using TEST_HAS_NO_FGETPOS_FSETPOS.

Instead of using individual macros to turn off missing C library features,
we use the using_if_exists attribute now. This patch removes the
_LIBCPP_HAS_NO_FGETPOS_FSETPOS macro used to workaround missing
fgetpos and fsetpos on older versions of Android -- using_if_exists
should take care of those in the headers and we should add appropriate
XFAILs to the tests instead of using TEST_HAS_NO_FGETPOS_FSETPOS.
@ldionne ldionne requested a review from a team as a code owner November 13, 2023 01:45
@llvmbot llvmbot added the libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi. label Nov 13, 2023
@llvmbot
Copy link
Member

llvmbot commented Nov 13, 2023

@llvm/pr-subscribers-libcxx

Author: Louis Dionne (ldionne)

Changes

Instead of using individual macros to turn off missing C library features, we use the using_if_exists attribute now. This patch removes the _LIBCPP_HAS_NO_FGETPOS_FSETPOS macro used to workaround missing fgetpos and fsetpos on older versions of Android -- using_if_exists should take care of those in the headers and we should add appropriate XFAILs to the tests instead of using TEST_HAS_NO_FGETPOS_FSETPOS.


Full diff: https://github.com/llvm/llvm-project/pull/72073.diff

6 Files Affected:

  • (modified) libcxx/include/__config (-7)
  • (modified) libcxx/include/cstdio (-4)
  • (removed) libcxx/test/libcxx/depr/depr.c.headers/no_fgetpos_fsetpos.verify.cpp (-20)
  • (modified) libcxx/test/std/depr/depr.c.headers/stdio_h.compile.pass.cpp (-4)
  • (modified) libcxx/test/std/input.output/file.streams/c.files/cstdio.pass.cpp (-4)
  • (modified) libcxx/test/support/test_macros.h (-4)
diff --git a/libcxx/include/__config b/libcxx/include/__config
index 4412deb930cb45b..1b30de33e5c4498 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -1344,13 +1344,6 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
 #    define _LIBCPP_FOPEN_CLOEXEC_MODE
 #  endif
 
-// Support for _FILE_OFFSET_BITS=64 landed gradually in Android, so the full set
-// of functions used in cstdio may not be available for low API levels when
-// using 64-bit file offsets on LP32.
-#  if defined(__BIONIC__) && defined(__USE_FILE_OFFSET64) && __ANDROID_API__ < 24
-#    define _LIBCPP_HAS_NO_FGETPOS_FSETPOS
-#  endif
-
 #  if __has_attribute(__init_priority__)
 #    define _LIBCPP_INIT_PRIORITY_MAX __attribute__((__init_priority__(100)))
 #  else
diff --git a/libcxx/include/cstdio b/libcxx/include/cstdio
index 221b0b314cf9848..b1b0ff8d3503939 100644
--- a/libcxx/include/cstdio
+++ b/libcxx/include/cstdio
@@ -141,13 +141,9 @@ using ::putc _LIBCPP_USING_IF_EXISTS;
 using ::ungetc _LIBCPP_USING_IF_EXISTS;
 using ::fread _LIBCPP_USING_IF_EXISTS;
 using ::fwrite _LIBCPP_USING_IF_EXISTS;
-#ifndef _LIBCPP_HAS_NO_FGETPOS_FSETPOS
 using ::fgetpos _LIBCPP_USING_IF_EXISTS;
-#endif
 using ::fseek _LIBCPP_USING_IF_EXISTS;
-#ifndef _LIBCPP_HAS_NO_FGETPOS_FSETPOS
 using ::fsetpos _LIBCPP_USING_IF_EXISTS;
-#endif
 using ::ftell _LIBCPP_USING_IF_EXISTS;
 using ::rewind _LIBCPP_USING_IF_EXISTS;
 using ::clearerr _LIBCPP_USING_IF_EXISTS;
diff --git a/libcxx/test/libcxx/depr/depr.c.headers/no_fgetpos_fsetpos.verify.cpp b/libcxx/test/libcxx/depr/depr.c.headers/no_fgetpos_fsetpos.verify.cpp
deleted file mode 100644
index 1aaf953e4e7d453..000000000000000
--- a/libcxx/test/libcxx/depr/depr.c.headers/no_fgetpos_fsetpos.verify.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++03
-
-#include <cstdio>
-
-using U = decltype(::fgetpos);
-using V = decltype(::fsetpos);
-#ifdef _LIBCPP_HAS_NO_FGETPOS_FSETPOS
-// expected-error@-3 {{no member named 'fgetpos' in the global namespace}}
-// expected-error@-3 {{no member named 'fsetpos' in the global namespace}}
-#else
-// expected-no-diagnostics
-#endif
diff --git a/libcxx/test/std/depr/depr.c.headers/stdio_h.compile.pass.cpp b/libcxx/test/std/depr/depr.c.headers/stdio_h.compile.pass.cpp
index 27a97627cee38d5..55731c857ecfcef 100644
--- a/libcxx/test/std/depr/depr.c.headers/stdio_h.compile.pass.cpp
+++ b/libcxx/test/std/depr/depr.c.headers/stdio_h.compile.pass.cpp
@@ -161,13 +161,9 @@ ASSERT_SAME_TYPE(int,    decltype(puts("")));
 ASSERT_SAME_TYPE(int,    decltype(ungetc(0,fp)));
 ASSERT_SAME_TYPE(size_t, decltype(fread((void*)0,0,0,fp)));
 ASSERT_SAME_TYPE(size_t, decltype(fwrite((const void*)arr,1,0,fp)));
-#ifndef TEST_HAS_NO_FGETPOS_FSETPOS
 ASSERT_SAME_TYPE(int,    decltype(fgetpos(fp, &fpos)));
-#endif
 ASSERT_SAME_TYPE(int,    decltype(fseek(fp, 0,0)));
-#ifndef TEST_HAS_NO_FGETPOS_FSETPOS
 ASSERT_SAME_TYPE(int,    decltype(fsetpos(fp, &fpos)));
-#endif
 ASSERT_SAME_TYPE(long,   decltype(ftell(fp)));
 ASSERT_SAME_TYPE(void,   decltype(rewind(fp)));
 ASSERT_SAME_TYPE(void,   decltype(clearerr(fp)));
diff --git a/libcxx/test/std/input.output/file.streams/c.files/cstdio.pass.cpp b/libcxx/test/std/input.output/file.streams/c.files/cstdio.pass.cpp
index d18af90fec1c3ac..66ab56f0958a2d2 100644
--- a/libcxx/test/std/input.output/file.streams/c.files/cstdio.pass.cpp
+++ b/libcxx/test/std/input.output/file.streams/c.files/cstdio.pass.cpp
@@ -126,13 +126,9 @@ int main(int, char**)
     static_assert((std::is_same<decltype(std::ungetc(0,fp)), int>::value), "");
     static_assert((std::is_same<decltype(std::fread((void*)0,0,0,fp)), std::size_t>::value), "");
     static_assert((std::is_same<decltype(std::fwrite(vp,0,0,fp)), std::size_t>::value), "");
-#ifndef TEST_HAS_NO_FGETPOS_FSETPOS
     static_assert((std::is_same<decltype(std::fgetpos(fp, &fpos)), int>::value), "");
-#endif
     static_assert((std::is_same<decltype(std::fseek(fp, 0,0)), int>::value), "");
-#ifndef TEST_HAS_NO_FGETPOS_FSETPOS
     static_assert((std::is_same<decltype(std::fsetpos(fp, &fpos)), int>::value), "");
-#endif
     static_assert((std::is_same<decltype(std::ftell(fp)), long>::value), "");
     static_assert((std::is_same<decltype(std::rewind(fp)), void>::value), "");
     static_assert((std::is_same<decltype(std::clearerr(fp)), void>::value), "");
diff --git a/libcxx/test/support/test_macros.h b/libcxx/test/support/test_macros.h
index 80cf600c858e122..252e82ef0410553 100644
--- a/libcxx/test/support/test_macros.h
+++ b/libcxx/test/support/test_macros.h
@@ -390,10 +390,6 @@ inline void DoNotOptimize(Tp const& value) {
 #  define TEST_HAS_NO_FILESYSTEM
 #endif
 
-#if defined(_LIBCPP_HAS_NO_FGETPOS_FSETPOS)
-#  define TEST_HAS_NO_FGETPOS_FSETPOS
-#endif
-
 #if defined(_LIBCPP_HAS_NO_C8RTOMB_MBRTOC8)
 #  define TEST_HAS_NO_C8RTOMB_MBRTOC8
 #endif

@philnik777 philnik777 merged commit e734bc5 into llvm:main Nov 13, 2023
@ldionne ldionne deleted the review/remove-fgetpos-fsetpos branch November 14, 2023 23:00
zahiraam pushed a commit to zahiraam/llvm-project that referenced this pull request Nov 20, 2023
Instead of using individual macros to turn off missing C library
features, we use the using_if_exists attribute now. This patch removes
the _LIBCPP_HAS_NO_FGETPOS_FSETPOS macro used to workaround missing
fgetpos and fsetpos on older versions of Android -- using_if_exists
should take care of those in the headers and we should add appropriate
XFAILs to the tests instead of using TEST_HAS_NO_FGETPOS_FSETPOS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
libc++ libc++ C++ Standard Library. Not GNU libstdc++. Not libc++abi.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants