File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed
src/tools/miri/tests/pass/shims Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
2
+
3
+ static COUNT : AtomicUsize = AtomicUsize :: new ( 0 ) ;
4
+
5
+ unsafe extern "C" fn ctor ( ) {
6
+ COUNT . fetch_add ( 1 , Ordering :: Relaxed ) ;
7
+ }
8
+
9
+ macro_rules! ctor {
10
+ ( $ident: ident = $ctor: ident) => {
11
+ #[ cfg_attr(
12
+ all( any(
13
+ target_os = "linux" ,
14
+ target_os = "android" ,
15
+ target_os = "dragonfly" ,
16
+ target_os = "freebsd" ,
17
+ target_os = "haiku" ,
18
+ target_os = "illumos" ,
19
+ target_os = "netbsd" ,
20
+ target_os = "openbsd" ,
21
+ target_os = "solaris" ,
22
+ target_os = "none" ,
23
+ target_family = "wasm" ,
24
+ ) ) ,
25
+ link_section = ".init_array"
26
+ ) ]
27
+ #[ cfg_attr( windows, link_section = ".CRT$XCU" ) ]
28
+ #[ cfg_attr(
29
+ any( target_os = "macos" , target_os = "ios" ) ,
30
+ link_section = "__DATA,__mod_init_func"
31
+ ) ]
32
+ #[ used]
33
+ static $ident: unsafe extern "C" fn ( ) = $ctor;
34
+ } ;
35
+ }
36
+
37
+ ctor ! { CTOR1 = ctor }
38
+ ctor ! { CTOR2 = ctor }
39
+ ctor ! { CTOR3 = ctor }
40
+
41
+ fn main ( ) {
42
+ assert_eq ! ( COUNT . load( Ordering :: Relaxed ) , 3 , "ctors did not run" ) ;
43
+ }
You can’t perform that action at this time.
0 commit comments