Skip to content

Commit 4894081

Browse files
committed
Remove libc_const_extern_fn
This originally existed for MSRV support, then became a necessary hack to support the old ctest's inability to parse `const fn`. The new ctest doesn't have this limitation, so remove the config. Additionally, switch from the `*` kleene to `?` since that is possible now.
1 parent cac66e6 commit 4894081

File tree

2 files changed

+38
-111
lines changed

2 files changed

+38
-111
lines changed

build.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ const ALLOWED_CFGS: &[&str] = &[
1717
"gnu_file_offset_bits64",
1818
// Corresponds to `_TIME_BITS=64` in glibc
1919
"gnu_time_bits64",
20-
// FIXME(ctest): this config shouldn't be needed but ctest can't parse `const extern fn`
21-
"libc_const_extern_fn",
2220
"libc_deny_warnings",
2321
"libc_ctest",
2422
// Corresponds to `__USE_TIME_BITS64` in UAPI
@@ -144,9 +142,6 @@ fn main() {
144142
set_cfg("libc_deny_warnings");
145143
}
146144

147-
// Set unconditionally when ctest is not being invoked.
148-
set_cfg("libc_const_extern_fn");
149-
150145
// Since Rust 1.80, configuration that isn't recognized by default needs to be provided to
151146
// avoid warnings.
152147
if rustc_minor_ver >= 80 {

src/macros.rs

Lines changed: 38 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -292,114 +292,46 @@ macro_rules! c_enum {
292292
(@ty) => { $crate::prelude::CEnumRepr };
293293
}
294294

295-
// This is a pretty horrible hack to allow us to conditionally mark some functions as 'const',
296-
// without requiring users of this macro to care "libc_const_extern_fn".
297-
//
298-
// When 'libc_const_extern_fn' is enabled, we emit the captured 'const' keyword in the expanded
299-
// function.
300-
//
301-
// When 'libc_const_extern_fn' is disabled, we always emit a plain 'pub unsafe extern fn'.
302-
// Note that the expression matched by the macro is exactly the same - this allows
303-
// users of this macro to work whether or not 'libc_const_extern_fn' is enabled
304-
//
305-
// Unfortunately, we need to duplicate most of this macro between the 'cfg_if' blocks.
306-
// This is because 'const unsafe extern fn' won't even parse on older compilers,
307-
// so we need to avoid emitting it at all of 'libc_const_extern_fn'.
308-
//
309-
// Specifically, moving the 'cfg_if' into the macro body will *not* work. Doing so would cause the
310-
// '#[cfg(libc_const_extern_fn)]' to be emitted into user code. The 'cfg' gate will not stop Rust
311-
// from trying to parse the 'pub const unsafe extern fn', so users would get a compiler error even
312-
// when the 'libc_const_extern_fn' feature is disabled.
313-
314-
// FIXME(ctest): ctest can't handle `const extern` functions, we should be able to remove this
315-
// cfg completely.
316-
// FIXME(ctest): ctest can't handle `$(,)?` so we use `$(,)*` which isn't quite correct.
317-
cfg_if! {
318-
if #[cfg(libc_const_extern_fn)] {
319-
/// Define an `unsafe` function that is const as long as `libc_const_extern_fn` is enabled.
320-
macro_rules! f {
321-
($(
322-
$(#[$attr:meta])*
323-
pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
324-
$body:block
325-
)*) => ($(
326-
#[inline]
327-
$(#[$attr])*
328-
pub $($constness)* unsafe extern "C" fn $i($($arg: $argty),*) -> $ret
329-
$body
330-
)*)
331-
}
332-
333-
/// Define a safe function that is const as long as `libc_const_extern_fn` is enabled.
334-
macro_rules! safe_f {
335-
($(
336-
$(#[$attr:meta])*
337-
pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
338-
$body:block
339-
)*) => ($(
340-
#[inline]
341-
$(#[$attr])*
342-
pub $($constness)* extern "C" fn $i($($arg: $argty),*) -> $ret
343-
$body
344-
)*)
345-
}
346-
347-
/// A nonpublic function that is const as long as `libc_const_extern_fn` is enabled.
348-
macro_rules! const_fn {
349-
($(
350-
$(#[$attr:meta])*
351-
$({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
352-
$body:block
353-
)*) => ($(
354-
#[inline]
355-
$(#[$attr])*
356-
$($constness)* fn $i($($arg: $argty),*) -> $ret
357-
$body
358-
)*)
359-
}
360-
} else {
361-
/// Define an `unsafe` function that is const as long as `libc_const_extern_fn` is enabled.
362-
macro_rules! f {
363-
($(
364-
$(#[$attr:meta])*
365-
pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
366-
$body:block
367-
)*) => ($(
368-
#[inline]
369-
$(#[$attr])*
370-
pub unsafe extern "C" fn $i($($arg: $argty),*) -> $ret
371-
$body
372-
)*)
373-
}
295+
/// Define a `unsafe` function.
296+
macro_rules! f {
297+
($(
298+
$(#[$attr:meta])*
299+
pub $({$constness:ident})? fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
300+
$body:block
301+
)*) => ($(
302+
#[inline]
303+
$(#[$attr])*
304+
pub $($constness)? unsafe extern "C" fn $i($($arg: $argty),*) -> $ret
305+
$body
306+
)*)
307+
}
374308

375-
/// Define a safe function that is const as long as `libc_const_extern_fn` is enabled.
376-
macro_rules! safe_f {
377-
($(
378-
$(#[$attr:meta])*
379-
pub $({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
380-
$body:block
381-
)*) => ($(
382-
#[inline]
383-
$(#[$attr])*
384-
pub extern "C" fn $i($($arg: $argty),*) -> $ret
385-
$body
386-
)*)
387-
}
309+
/// Define a safe function.
310+
macro_rules! safe_f {
311+
($(
312+
$(#[$attr:meta])*
313+
pub $({$constness:ident})? fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
314+
$body:block
315+
)*) => ($(
316+
#[inline]
317+
$(#[$attr])*
318+
pub $($constness)? extern "C" fn $i($($arg: $argty),*) -> $ret
319+
$body
320+
)*)
321+
}
388322

389-
/// A nonpublic function that is const as long as `libc_const_extern_fn` is enabled.
390-
macro_rules! const_fn {
391-
($(
392-
$(#[$attr:meta])*
393-
$({$constness:ident})* fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
394-
$body:block
395-
)*) => ($(
396-
#[inline]
397-
$(#[$attr])*
398-
fn $i($($arg: $argty),*) -> $ret
399-
$body
400-
)*)
401-
}
402-
}
323+
/// Define a nonpublic function.
324+
macro_rules! const_fn {
325+
($(
326+
$(#[$attr:meta])*
327+
$({$constness:ident})? fn $i:ident($($arg:ident: $argty:ty),* $(,)*) -> $ret:ty
328+
$body:block
329+
)*) => ($(
330+
#[inline]
331+
$(#[$attr])*
332+
$($constness)? fn $i($($arg: $argty),*) -> $ret
333+
$body
334+
)*)
403335
}
404336

405337
macro_rules! __item {

0 commit comments

Comments
 (0)