Skip to content

Commit 79cae37

Browse files
committed
transpile: tests: add fn_attrs.c from tests/unit as a snapshot test, too
This comments out the `__APPLE__`-specific behavior so that the snapshot remains platform-independent. We're mostly interested in testing the other attributes, so this should be fine for now. This tests that `271228774` is working as intended.
1 parent 3d3b282 commit 79cae37

4 files changed

Lines changed: 194 additions & 0 deletions

File tree

c2rust-transpile/tests/snapshots.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,11 @@ fn test_factorial() {
331331
transpile("factorial.c").run();
332332
}
333333

334+
#[test]
335+
fn test_fn_attrs() {
336+
transpile("fn_attrs.c").run();
337+
}
338+
334339
#[test]
335340
fn test_gotos() {
336341
transpile("gotos.c").run();
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
static __attribute__((always_inline)) void always_inline_static(void) {}
2+
static __attribute__((__noinline__)) void noinline_static(void) {}
3+
static void inline inline_static(void) {}
4+
// __inline__ can be used in place of inline for ISO C89 compatibility
5+
static void __inline__ alt_kw_inline_static(void) {}
6+
static void inline __attribute__((__gnu_inline__)) gnu_inline_static(void) {}
7+
static void __attribute__((used, __cold__)) cold_used_attrs(void) {}
8+
void __attribute__((__always_inline__)) always_inline_nonstatic(void) {}
9+
void inline __attribute__((gnu_inline)) gnu_inline_nonstatic(void) {}
10+
void __attribute__((noinline)) noinline_nonstatic(void) {}
11+
void inline inline_nonstatic(void) {}
12+
void __inline__ alt_kw_inline_nonstatic(void) {}
13+
extern void gnu_inline_non_canonical_definition_extern(void);
14+
extern void inline inline_extern(void) {}
15+
extern void __inline__ alt_kw_inline_extern(void) {}
16+
extern void inline __attribute__((always_inline)) always_inline_extern(void) {}
17+
extern void inline __attribute__((__gnu_inline__)) gnu_inline_extern(void) {}
18+
extern void inline __attribute__((gnu_inline, always_inline)) always_inline_gnu_inline_extern(void) {}
19+
extern void inline __attribute__((gnu_inline)) gnu_inline_non_canonical_definition_extern(void) {}
20+
21+
// Skipped to keep this a platform-independent test.
22+
// #ifndef __APPLE__
23+
// // aliases are not allowed on darwin
24+
// void __attribute__((alias("inline_extern"))) aliased_fn(void);
25+
// #endif // __APPLE__
26+
27+
void ensure_use(void) {
28+
always_inline_static();
29+
always_inline_nonstatic();
30+
gnu_inline_nonstatic();
31+
inline_static();
32+
alt_kw_inline_static();
33+
noinline_static();
34+
inline_nonstatic();
35+
alt_kw_inline_nonstatic();
36+
gnu_inline_static();
37+
inline_extern();
38+
alt_kw_inline_extern();
39+
always_inline_extern();
40+
gnu_inline_extern();
41+
always_inline_gnu_inline_extern();
42+
gnu_inline_non_canonical_definition_extern();
43+
44+
// #ifndef __APPLE__
45+
// aliased_fn();
46+
// #endif // __APPLE__
47+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
source: c2rust-transpile/tests/snapshots.rs
3+
expression: cat tests/snapshots/fn_attrs.2021.rs
4+
---
5+
#![allow(
6+
dead_code,
7+
non_camel_case_types,
8+
non_snake_case,
9+
non_upper_case_globals,
10+
unused_assignments,
11+
unused_mut
12+
)]
13+
#![feature(linkage)]
14+
#[inline(always)]
15+
unsafe extern "C" fn always_inline_static() {}
16+
#[inline(never)]
17+
unsafe extern "C" fn noinline_static() {}
18+
#[inline]
19+
unsafe extern "C" fn inline_static() {}
20+
#[inline]
21+
unsafe extern "C" fn alt_kw_inline_static() {}
22+
#[inline]
23+
unsafe extern "C" fn gnu_inline_static() {}
24+
#[cold]
25+
unsafe extern "C" fn cold_used_attrs() {}
26+
#[inline(always)]
27+
unsafe extern "C" fn always_inline_nonstatic() {}
28+
#[inline]
29+
unsafe extern "C" fn gnu_inline_nonstatic() {}
30+
#[no_mangle]
31+
#[inline(never)]
32+
pub unsafe extern "C" fn noinline_nonstatic() {}
33+
#[inline]
34+
unsafe extern "C" fn inline_nonstatic() {}
35+
#[inline]
36+
unsafe extern "C" fn alt_kw_inline_nonstatic() {}
37+
#[no_mangle]
38+
#[inline]
39+
#[linkage = "external"]
40+
pub unsafe extern "C" fn inline_extern() {}
41+
#[no_mangle]
42+
#[inline]
43+
#[linkage = "external"]
44+
pub unsafe extern "C" fn alt_kw_inline_extern() {}
45+
#[no_mangle]
46+
#[inline(always)]
47+
pub unsafe extern "C" fn always_inline_extern() {}
48+
#[inline]
49+
unsafe extern "C" fn gnu_inline_extern() {}
50+
#[inline(always)]
51+
unsafe extern "C" fn always_inline_gnu_inline_extern() {}
52+
#[inline]
53+
unsafe extern "C" fn gnu_inline_non_canonical_definition_extern() {}
54+
#[no_mangle]
55+
pub unsafe extern "C" fn ensure_use() {
56+
always_inline_static();
57+
always_inline_nonstatic();
58+
gnu_inline_nonstatic();
59+
inline_static();
60+
alt_kw_inline_static();
61+
noinline_static();
62+
inline_nonstatic();
63+
alt_kw_inline_nonstatic();
64+
gnu_inline_static();
65+
inline_extern();
66+
alt_kw_inline_extern();
67+
always_inline_extern();
68+
gnu_inline_extern();
69+
always_inline_gnu_inline_extern();
70+
gnu_inline_non_canonical_definition_extern();
71+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
source: c2rust-transpile/tests/snapshots.rs
3+
expression: cat tests/snapshots/fn_attrs.2024.rs
4+
---
5+
#![allow(
6+
dead_code,
7+
non_camel_case_types,
8+
non_snake_case,
9+
non_upper_case_globals,
10+
unused_assignments,
11+
unused_mut
12+
)]
13+
#![feature(linkage)]
14+
#[inline(always)]
15+
unsafe extern "C" fn always_inline_static() {}
16+
#[inline(never)]
17+
unsafe extern "C" fn noinline_static() {}
18+
#[inline]
19+
unsafe extern "C" fn inline_static() {}
20+
#[inline]
21+
unsafe extern "C" fn alt_kw_inline_static() {}
22+
#[inline]
23+
unsafe extern "C" fn gnu_inline_static() {}
24+
#[cold]
25+
unsafe extern "C" fn cold_used_attrs() {}
26+
#[inline(always)]
27+
unsafe extern "C" fn always_inline_nonstatic() {}
28+
#[inline]
29+
unsafe extern "C" fn gnu_inline_nonstatic() {}
30+
#[unsafe(no_mangle)]
31+
#[inline(never)]
32+
pub unsafe extern "C" fn noinline_nonstatic() {}
33+
#[inline]
34+
unsafe extern "C" fn inline_nonstatic() {}
35+
#[inline]
36+
unsafe extern "C" fn alt_kw_inline_nonstatic() {}
37+
#[unsafe(no_mangle)]
38+
#[inline]
39+
#[linkage = "external"]
40+
pub unsafe extern "C" fn inline_extern() {}
41+
#[unsafe(no_mangle)]
42+
#[inline]
43+
#[linkage = "external"]
44+
pub unsafe extern "C" fn alt_kw_inline_extern() {}
45+
#[unsafe(no_mangle)]
46+
#[inline(always)]
47+
pub unsafe extern "C" fn always_inline_extern() {}
48+
#[inline]
49+
unsafe extern "C" fn gnu_inline_extern() {}
50+
#[inline(always)]
51+
unsafe extern "C" fn always_inline_gnu_inline_extern() {}
52+
#[inline]
53+
unsafe extern "C" fn gnu_inline_non_canonical_definition_extern() {}
54+
#[unsafe(no_mangle)]
55+
pub unsafe extern "C" fn ensure_use() {
56+
always_inline_static();
57+
always_inline_nonstatic();
58+
gnu_inline_nonstatic();
59+
inline_static();
60+
alt_kw_inline_static();
61+
noinline_static();
62+
inline_nonstatic();
63+
alt_kw_inline_nonstatic();
64+
gnu_inline_static();
65+
inline_extern();
66+
alt_kw_inline_extern();
67+
always_inline_extern();
68+
gnu_inline_extern();
69+
always_inline_gnu_inline_extern();
70+
gnu_inline_non_canonical_definition_extern();
71+
}

0 commit comments

Comments
 (0)