[libcxx-commits] [libcxx] 2cea1ba - [libc++] Remove libc++'s own <setjmp.h> header (#68806)

via libcxx-commits libcxx-commits at lists.llvm.org
Thu Oct 12 16:59:09 PDT 2023


Author: Louis Dionne
Date: 2023-10-12T16:59:04-07:00
New Revision: 2cea1babefbb726b00573c4cb5c89dc47664dc17

URL: https://github.com/llvm/llvm-project/commit/2cea1babefbb726b00573c4cb5c89dc47664dc17
DIFF: https://github.com/llvm/llvm-project/commit/2cea1babefbb726b00573c4cb5c89dc47664dc17.diff

LOG: [libc++] Remove libc++'s own <setjmp.h> header (#68806)

It doesn't seem to do anything useful beyond what the C library header
is doing, so there's no purpose in having one.

Added: 
    

Modified: 
    libcxx/include/CMakeLists.txt
    libcxx/include/__std_clang_module
    libcxx/include/csetjmp
    libcxx/include/module.modulemap.in
    libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp
    libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp
    libcxx/utils/data/ignore_format.txt

Removed: 
    libcxx/include/setjmp.h


################################################################################
diff  --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt
index 4d98b8eed1afd65..9b03430a87d8338 100644
--- a/libcxx/include/CMakeLists.txt
+++ b/libcxx/include/CMakeLists.txt
@@ -977,7 +977,6 @@ set(files
   scoped_allocator
   semaphore
   set
-  setjmp.h
   shared_mutex
   source_location
   span

diff  --git a/libcxx/include/__std_clang_module b/libcxx/include/__std_clang_module
index 2644ea98b4907f7..e2e9e85ffc7d8d6 100644
--- a/libcxx/include/__std_clang_module
+++ b/libcxx/include/__std_clang_module
@@ -169,7 +169,6 @@
 #  include <semaphore>
 #endif
 #include <set>
-#include <setjmp.h>
 #if !defined(_LIBCPP_HAS_NO_THREADS)
 #  include <shared_mutex>
 #endif

diff  --git a/libcxx/include/csetjmp b/libcxx/include/csetjmp
index 4c64e8327e3f0ce..d219c8e6cb22506 100644
--- a/libcxx/include/csetjmp
+++ b/libcxx/include/csetjmp
@@ -35,14 +35,6 @@ void longjmp(jmp_buf env, int val);
 
 #include <setjmp.h>
 
-#ifndef _LIBCPP_SETJMP_H
-#   error <csetjmp> tried including <setjmp.h> but didn't find libc++'s <setjmp.h> header. \
-          This usually means that your header search paths are not configured properly. \
-          The header search paths should contain the C++ Standard Library headers before \
-          any C Standard Library, and you are probably using compiler flags that make that \
-          not be the case.
-#endif
-
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
 #endif

diff  --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in
index 09184af2732c83f..3e5a8a391b6e69c 100644
--- a/libcxx/include/module.modulemap.in
+++ b/libcxx/include/module.modulemap.in
@@ -456,10 +456,7 @@ module std_math_h [system] {
   header "math.h"
   export *
 }
-module std_setjmp_h [system] {
-  header "setjmp.h"
-  export *
-}
+// <setjmp.h> provided by C library.
 // <signal.h> provided by C library.
 // FIXME: <stdalign.h> is missing.
 // <stdarg.h> provided by compiler.

diff  --git a/libcxx/include/setjmp.h b/libcxx/include/setjmp.h
deleted file mode 100644
index f4a2bbcb0bd392c..000000000000000
--- a/libcxx/include/setjmp.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP_SETJMP_H
-#define _LIBCPP_SETJMP_H
-
-/*
-    setjmp.h synopsis
-
-Macros:
-
-    setjmp
-
-Types:
-
-    jmp_buf
-
-void longjmp(jmp_buf env, int val);
-
-*/
-
-#include <__config>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-#  pragma GCC system_header
-#endif
-
-#if __has_include_next(<setjmp.h>)
-#  include_next <setjmp.h>
-#endif
-
-#ifdef __cplusplus
-
-#ifndef setjmp
-#define setjmp(env) setjmp(env)
-#endif
-
-#endif // __cplusplus
-
-#endif // _LIBCPP_SETJMP_H

diff  --git a/libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp b/libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp
index 7a49a85510202bf..eaaeecbeb70ec87 100644
--- a/libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp
+++ b/libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp
@@ -7,14 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 // test <setjmp.h>
+//
+// Even though <setjmp.h> is not provided by libc++, we still test that
+// using it with libc++ on the search path will work.
 
 #include <setjmp.h>
 
 #include "test_macros.h"
 
-#ifndef setjmp
-#error setjmp not defined
-#endif
-
 jmp_buf jb;
 ASSERT_SAME_TYPE(void, decltype(longjmp(jb, 0)));
+
+void f() { setjmp(jb); }

diff  --git a/libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp b/libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp
index 0e3d8f69e99c2c3..d6d32c371b9e5ca 100644
--- a/libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp
+++ b/libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp
@@ -9,20 +9,28 @@
 // test <csetjmp>
 
 #include <csetjmp>
+#include <cassert>
 #include <type_traits>
 
-#include "test_macros.h"
+int main(int, char**) {
+  std::jmp_buf jb;
 
-#ifndef setjmp
-#error setjmp not defined
-#endif
+  switch (setjmp(jb)) {
+  // First time we set the buffer, the function should return 0
+  case 0:
+    break;
 
-int main(int, char**)
-{
-    std::jmp_buf jb;
-    ((void)jb); // Prevent unused warning
-    static_assert((std::is_same<decltype(std::longjmp(jb, 0)), void>::value),
-                  "std::is_same<decltype(std::longjmp(jb, 0)), void>::value");
+  // If it returned 42, then we're coming from the std::longjmp call below
+  case 42:
+    return 0;
 
-  return 0;
+  // Otherwise, something is wrong
+  default:
+    return 1;
+  }
+
+  std::longjmp(jb, 42);
+  static_assert(std::is_same<decltype(std::longjmp(jb, 0)), void>::value, "");
+
+  return 1;
 }

diff  --git a/libcxx/utils/data/ignore_format.txt b/libcxx/utils/data/ignore_format.txt
index 34ab4004ece37b4..e4f56b00c758343 100644
--- a/libcxx/utils/data/ignore_format.txt
+++ b/libcxx/utils/data/ignore_format.txt
@@ -418,7 +418,6 @@ libcxx/include/regex
 libcxx/include/scoped_allocator
 libcxx/include/semaphore
 libcxx/include/set
-libcxx/include/setjmp.h
 libcxx/include/span
 libcxx/include/__split_buffer
 libcxx/include/sstream
@@ -2725,7 +2724,6 @@ libcxx/test/std/depr/depr.c.headers/inttypes_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/limits_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/locale_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
-libcxx/test/std/depr/depr.c.headers/setjmp_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/signal_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/stdarg_h.compile.pass.cpp
 libcxx/test/std/depr/depr.c.headers/stdbool_h.compile.pass.cpp
@@ -3941,7 +3939,6 @@ libcxx/test/std/language.support/support.rtti/bad.typeid/bad_typeid.pass.cpp
 libcxx/test/std/language.support/support.rtti/type.info/type_info.equal.pass.cpp
 libcxx/test/std/language.support/support.rtti/type.info/type_info_hash.pass.cpp
 libcxx/test/std/language.support/support.rtti/type.info/type_info.pass.cpp
-libcxx/test/std/language.support/support.runtime/csetjmp.pass.cpp
 libcxx/test/std/language.support/support.runtime/csignal.pass.cpp
 libcxx/test/std/language.support/support.runtime/cstdarg.pass.cpp
 libcxx/test/std/language.support/support.runtime/cstdbool.pass.cpp


        


More information about the libcxx-commits mailing list