@@ -466,7 +466,7 @@ fn start(_argc: int, _argv: *const *const u8) -> int {
466
466
// provided by libstd.
467
467
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
468
468
#[lang = "eh_personality"] extern fn eh_personality() {}
469
- #[lang = "fail_fmt "] fn fail_fmt() -> ! { loop {} }
469
+ #[lang = "sized "] trait Sized { }
470
470
# // fn main() {} tricked you, rustdoc!
471
471
```
472
472
@@ -489,28 +489,32 @@ pub extern fn main(argc: int, argv: *const *const u8) -> int {
489
489
490
490
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
491
491
#[lang = "eh_personality"] extern fn eh_personality() {}
492
- #[lang = "fail_fmt "] fn fail_fmt() -> ! { loop {} }
492
+ #[lang = "sized "] trait Sized { }
493
493
# // fn main() {} tricked you, rustdoc!
494
494
```
495
495
496
496
497
497
The compiler currently makes a few assumptions about symbols which are available
498
498
in the executable to call. Normally these functions are provided by the standard
499
- library , but without it you must define your own.
499
+ xlibrary , but without it you must define your own.
500
500
501
- The first of these three functions, ` stack_exhausted ` , is invoked whenever stack
501
+ The first of these two functions, ` stack_exhausted ` , is invoked whenever stack
502
502
overflow is detected. This function has a number of restrictions about how it
503
503
can be called and what it must do, but if the stack limit register is not being
504
504
maintained then a task always has an "infinite stack" and this function
505
505
shouldn't get triggered.
506
506
507
- The second of these three functions, ` eh_personality ` , is used by the
508
- failure mechanisms of the compiler. This is often mapped to GCC's
509
- personality function (see the
510
- [ libstd implementation] ( std/rt/unwind/index.html ) for more
511
- information), but crates which do not trigger failure can be assured
512
- that this function is never called. The final function, ` fail_fmt ` , is
513
- also used by the failure mechanisms of the compiler.
507
+ The second of these two functions, ` eh_personality ` , is used by the failure
508
+ mechanisms of the compiler. This is often mapped to GCC's personality function
509
+ (see the [ libstd implementation] ( std/rt/unwind/index.html ) for more
510
+ information), but crates which do not trigger failure can be assured that this
511
+ function is never called.
512
+
513
+ The final item in the example is a trait called ` Sized ` . This a trait
514
+ that represents data of a known static size: it is integral to the
515
+ Rust type system, and so the compiler expects the standard library to
516
+ provide it. Since you are not using the standard library, you have to
517
+ provide it yourself.
514
518
515
519
## Using libcore
516
520
@@ -569,8 +573,8 @@ pub extern fn dot_product(a: *const u32, a_len: u32,
569
573
return ret;
570
574
}
571
575
572
- #[lang = "fail_fmt "]
573
- extern fn fail_fmt (args: &core::fmt::Arguments,
576
+ #[lang = "begin_unwind "]
577
+ extern fn begin_unwind (args: &core::fmt::Arguments,
574
578
file: &str,
575
579
line: uint) -> ! {
576
580
loop {}
@@ -583,8 +587,8 @@ extern fn fail_fmt(args: &core::fmt::Arguments,
583
587
```
584
588
585
589
Note that there is one extra lang item here which differs from the examples
586
- above, ` fail_fmt ` . This must be defined by consumers of libcore because the
587
- core library declares failure, but it does not define it. The ` fail_fmt `
590
+ above, ` begin_unwind ` . This must be defined by consumers of libcore because the
591
+ core library declares failure, but it does not define it. The ` begin_unwind `
588
592
lang item is this crate's definition of failure, and it must be guaranteed to
589
593
never return.
590
594
@@ -690,7 +694,7 @@ fn main(argc: int, argv: *const *const u8) -> int {
690
694
691
695
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
692
696
#[lang = "eh_personality"] extern fn eh_personality() {}
693
- #[lang = "fail_fmt "] fn fail_fmt() -> ! { loop {} }
697
+ #[lang = "sized "] trait Sized { }
694
698
```
695
699
696
700
Note the use of ` abort ` : the ` exchange_malloc ` lang item is assumed to
@@ -702,7 +706,7 @@ Other features provided by lang items include:
702
706
` == ` , ` < ` , dereferencing (` * ` ) and ` + ` (etc.) operators are all
703
707
marked with lang items; those specific four are ` eq ` , ` ord ` ,
704
708
` deref ` , and ` add ` respectively.
705
- - stack unwinding and general failure; the ` eh_personality ` , ` fail `
709
+ - stack unwinding and general failure; the ` eh_personality ` , ` fail_ `
706
710
and ` fail_bounds_checks ` lang items.
707
711
- the traits in ` std::kinds ` used to indicate types that satisfy
708
712
various kinds; lang items ` send ` , ` sync ` and ` copy ` .
0 commit comments