This revision was automatically updated to reflect the committed changes. Closed by commit rGa9797d7d2d78: [C2x] Implement the `unreachable` macro for WG14 N2826 (authored by aaron.ballman).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D143430/new/ https://reviews.llvm.org/D143430 Files: clang/docs/ReleaseNotes.rst clang/lib/Headers/stddef.h clang/test/C/C2x/n2826.c clang/www/c_status.html Index: clang/www/c_status.html =================================================================== --- clang/www/c_status.html +++ clang/www/c_status.html @@ -1028,7 +1028,7 @@ <tr> <td>Add annotations for unreachable control flow v2</td> <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2826.pdf">N2826</a></td> - <td class="none" align="center">No</td> + <td class="unreleased" align="center">Clang 17</td> </tr> <tr> <td>Unicode Sequences More Than 21 Bits are a Constraint Violation r0</td> Index: clang/test/C/C2x/n2826.c =================================================================== --- /dev/null +++ clang/test/C/C2x/n2826.c @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -ffreestanding -emit-llvm -o - -std=c2x %s | FileCheck %s +// RUN: %clang_cc1 -ffreestanding -std=c17 -verify %s + +/* WG14 N2826: Clang 17 + * Add annotations for unreachable control flow v2 + */ +#include <stddef.h> + +enum E { + Zero, + One, + Two, +}; + +int test(enum E e) { + switch (e) { + case Zero: return 0; + case One: return 1; + case Two: return 2; + } + unreachable(); // expected-error {{call to undeclared function 'unreachable'}} +} + +// CHECK: switch i32 %0, label %[[EPILOG:.+]] [ +// CHECK: [[EPILOG]]: +// CHECK-NEXT: unreachable Index: clang/lib/Headers/stddef.h =================================================================== --- clang/lib/Headers/stddef.h +++ clang/lib/Headers/stddef.h @@ -103,6 +103,11 @@ typedef typeof(nullptr) nullptr_t; #endif /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L */ +#if defined(__need_STDDEF_H_misc) && defined(__STDC_VERSION__) && \ + __STDC_VERSION__ >= 202000L +#define unreachable() __builtin_unreachable() +#endif /* defined(__need_STDDEF_H_misc) && >= C23 */ + #if defined(__need_STDDEF_H_misc) #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ (defined(__cplusplus) && __cplusplus >= 201103L) Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -124,6 +124,8 @@ C2x Feature Support ------------------- +- Implemented the ``unreachable`` macro in freestanding ``<stddef.h>`` for + `WG14 N2826 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2826.pdf>`_ C++ Language Changes in Clang -----------------------------
Index: clang/www/c_status.html =================================================================== --- clang/www/c_status.html +++ clang/www/c_status.html @@ -1028,7 +1028,7 @@ <tr> <td>Add annotations for unreachable control flow v2</td> <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2826.pdf">N2826</a></td> - <td class="none" align="center">No</td> + <td class="unreleased" align="center">Clang 17</td> </tr> <tr> <td>Unicode Sequences More Than 21 Bits are a Constraint Violation r0</td> Index: clang/test/C/C2x/n2826.c =================================================================== --- /dev/null +++ clang/test/C/C2x/n2826.c @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -ffreestanding -emit-llvm -o - -std=c2x %s | FileCheck %s +// RUN: %clang_cc1 -ffreestanding -std=c17 -verify %s + +/* WG14 N2826: Clang 17 + * Add annotations for unreachable control flow v2 + */ +#include <stddef.h> + +enum E { + Zero, + One, + Two, +}; + +int test(enum E e) { + switch (e) { + case Zero: return 0; + case One: return 1; + case Two: return 2; + } + unreachable(); // expected-error {{call to undeclared function 'unreachable'}} +} + +// CHECK: switch i32 %0, label %[[EPILOG:.+]] [ +// CHECK: [[EPILOG]]: +// CHECK-NEXT: unreachable Index: clang/lib/Headers/stddef.h =================================================================== --- clang/lib/Headers/stddef.h +++ clang/lib/Headers/stddef.h @@ -103,6 +103,11 @@ typedef typeof(nullptr) nullptr_t; #endif /* defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L */ +#if defined(__need_STDDEF_H_misc) && defined(__STDC_VERSION__) && \ + __STDC_VERSION__ >= 202000L +#define unreachable() __builtin_unreachable() +#endif /* defined(__need_STDDEF_H_misc) && >= C23 */ + #if defined(__need_STDDEF_H_misc) #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ (defined(__cplusplus) && __cplusplus >= 201103L) Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -124,6 +124,8 @@ C2x Feature Support ------------------- +- Implemented the ``unreachable`` macro in freestanding ``<stddef.h>`` for + `WG14 N2826 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2826.pdf>`_ C++ Language Changes in Clang -----------------------------
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits