Rust: рдПрд▓рдПрд▓рд╡реАрдПрдо рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХреНрд░реИрд╢ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рд╕рд┐рддре░ 2015  ┬╖  97рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рд░, рдмреАрдЯрд╛ рдФрд░ рд░рд╛рддреНрд░рд┐ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

enum Null {}

fn foo() -> Null { loop { } }

fn create_null() -> Null {
    let n = foo();

    let mut i = 0;
    while i < 100 { i += 1; }
    return n;
}

fn use_null(n: Null) -> ! {
    match n { }
}


fn main() {
    use_null(create_null());
}

https://play.rust-lang.org/?gist=1f99432e4f2dccdf7d7e&version=stable

рдпрд╣ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдПрдХ рд▓реВрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдЬреНрдЮрд╛рдд рдерд╛: https://github.com/simnalamburt/snippets/blob/12e73f45f3/rust/infinite.rsред
рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд╕реА рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдЕрдВрддрд╣реАрди рдЫреЛрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдХреЛрдИ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ match рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдерд┐рдпрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред

A-LLVM C-bug E-medium I-needs-decision I-unsound ЁЯТе P-medium T-compiler WG-embedded

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рднреА рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреЛрдб рдЧреЛрд▓реНрдл рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

pub fn main() {
   (|| loop {})()
}

Https://github.com/rust-lang/rust/pull/59546 рдореЗрдВ -Z insert-sideeffect рдЬрдВрдЧ рд╡рд╛рд▓рд╛ рдЭрдВрдбрд╛, рдпрд╣ рд▓реВрдк рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ :)

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ:

main:
  ud2

рдЙрдкрд░рд╛рдВрдд:

main:
.LBB0_1:
  jmp .LBB0_1

рд╕рднреА 97 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб рдХрд╛ LLVM IR рд╣реИ

; Function Attrs: noreturn nounwind readnone uwtable
define internal void @_ZN4main20h5ec738167109b800UaaE() unnamed_addr #0 {
entry-block:
  unreachable
}

рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдореБрдЦреНрдп рдзрд╛рд░рдгрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рдирд┐рд░реНрдЬрди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдкрдХрдбрд╝ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд╣реЛрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдВрдЧ- lang / rfcs # 1216 рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрдВрдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ LLVM рдХреЛ рдХрднреА рднреА рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдирд╛ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (IIUIC рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдпрд╛ рдЖрдВрддрд░рд┐рдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ LLVM рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ: http://lists.llvm.org/pipermail/llvm-dev/2015-July/088095.html

triage: I- рдирд╛рдорд╛рдВрдХрд┐рдд

рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ! рдпрджрд┐ LLVM рдХреЗ рдкрд╛рд╕ "рд╣рд╛рдВ, рдпрд╣ рд▓реВрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирдВрдд рд╣реИ" рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рддрдм рд╣рдореЗрдВ рдмрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрд╕реНрдЯреНрд░реАрдо рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдмреИрдардирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЛ рджреВрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЙрдирдХреЗ рдЕрдВрджрд░ unsafe {asm!("" :::: "volatile")} рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдпрд╣ llvm.noop.sideeffect рдЖрдВрддрд░рд┐рдХ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ LLVM рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрднреА рднреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбрд╛рдпрд╡рд░реНрдЬрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди / рд▓реВрдкреНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрджрд┐ рдЦрд╛рд▓реА рдирд┐рд░реНрдЬрди рдорд╛рди рд╣реИрдВ рддреЛ рдЦрд╛рд▓реА рдЧреИрд░-рдЖрд╢рд╛рд╡рд╛рджреА рд▓реВрдк (рдпрд╛рдиреА loop { unsafe { asm!("" :::: "volatile") } } ) рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЧреБрдВрдЬрд╛рдЗрд╢ред
рдпрджрд┐ LLVM рдЙрд╕ рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рдЪрд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЕрдм рдФрд░ рд╡рд┐рдЪрд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рд▓реВрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЕрднреА рднреА рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред
"рднрд╛рдЧреНрдпрд╢рд╛рд▓реА" рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рдбрд╛рдЗрд╡рд░реНрдЬрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ, рдРрд╕реЗ рд▓реВрдк рдХреЛ рдбреАрд╕реАрдИ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ # 18785 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ? рдпреВрдмреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрд▓рд┐рдХ рдХрд╛рд░рдг рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реБрдХрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реИ рдЗрд╕реЗ рджреВрд░ред

@geofft

рдпрд╣ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред

рд╣рд╛рдВ, рдРрд╕рд╛ рд╣реА рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рдФрд░ рдиреАрдЪреЗ рд░рдЦрддреЗ рд╣реБрдП, рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ undef рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ (рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд) рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

: +1:

рдХреНрд░реИрд╢, рдпрд╛, рд╕рдВрднрд╡рддрдГ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рд╣рд╛рд░реНрджрд┐рдХ https://play.rust-lang.org/?gist=15a325a795244192bdce&version=stable

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЬрдм рддрдХ рдХреЛрдИ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред :) рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рдЖрдХреНрд░рд╛рдордХ рди рд╣реЛред рдЕрдиреНрдпрдерд╛, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд░реВрд╕реНрдд рдореЗрдВ рдПрдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:

  1. рдкрд╛рд╢ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛
  2. рд▓реВрдк рдХреЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рд╣реЛрдВрдЧреЗ (I / O рдСрдкрд░реЗрд╢рди рдЖрджрд┐, рдореИрдВ рдареАрдХ рд╕реЗ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ C рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

рдпрд╛ рддреЛ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

triage: рдкреА-рдореАрдбрд┐рдпрдо

рд╣рдо рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╣рдорд╛рд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рд┐рдЯ рдХрд┐рдпрд╛ рд╣реИ)ред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд┐рдЫрдбрд╝реЗрдкрди рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдореБрджреНрджреЗ рдирд╣реАрдВ рд╣реИрдВред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдЪрд░реНрдЪрд╛ рд╕реЗ рдЙрджреНрдзрд░рдг:

 The implementation may assume that any thread will eventually do one of the following:
   - terminate
   - make a call to a library I/O function
   - access or modify a volatile object, or
   - perform a synchronization operation or an atomic operation

 [Note: This is intended to allow compiler transformations such as removal of empty loops, even
  when termination cannot be proven. тАФ end note ]

@dotdash рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрджреНрдзреГрдд рдЕрдВрд╢ C ++ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╕реЗ рдЖрддрд╛ рд╣реИ; рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ "рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╕реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ" рдХрд╛ рдЙрддреНрддрд░ рд╣реИ (рдорд╛рдирдХ рд╕рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рднреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЧрдИ рд╣реИ: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1528 .htm)ред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреНрд░рдо рд╣реИред https://llvm.org/bugs/show_bug.cgi?id=24078 рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ LLVM IR рдореЗрдВ рдЕрдирдВрдд рд▓реВрдк рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХрд╛ рдХреЛрдИ рд╕рдЯреАрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдпрд╣ C ++ рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рдореИрдВ рдХреЗрд╡рд▓ https://groups.google.com/forum/# тАЛтАЛ.topic/llvm-dev/j2vlIECKkdE рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ) рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕рдордп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ C / C ++ рд╕реНрдкреЗрдХреНрд╕ рдХреЛ рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдзрд╛рдЧреЗ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕реА ++ рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ (рдпрд╛рдиреА рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП), рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдХреБрдЫ рдЬрд┐рдирдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдпреЛрдЧрджрд╛рди рд╣реИ) рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рд░реБрдЪрд┐ рджрд┐рдЦрд╛рдИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред

@ ranma42 рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЙрджреНрдзреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЬрдВрдЧ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЫреЛрд░реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдзреНрд╡рдирд┐ рдореБрджреНрджрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЯреИрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, @ ranma42 рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╕рд░рдгреА рд╕реАрдорд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рд▓рд┐рдВрдХ

@bluss

рдиреАрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдЧрд▓рдд-рдХреЛрдб рдХреЗ рдореБрджреНрджреЗ рдЬреЛ рдХрд┐ рдзреНрд╡рдирд┐ рдХреЗ рдореБрджреНрджреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢) I-wrong рдЯреИрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

рддреЛ рдмрд╕ рдкреВрд░реНрд╡ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

  • рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LLVM рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
  • рдЬрд╣рд╛рдВ рднреА рдЕрдирдВрдд рд▓реВрдк рдпрд╛ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ (# 18785) рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣рд╛рдВ рдиреЛ-рдСрдк рдПрд╕рдПрд╕рдПрдо рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкреЗрд╢ рдХрд░реЗрдВред

рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЦрд░рд╛рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рд╣рдж рддрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╣рд╛рдВ рднреА рд╣рдо рдЦреБрдж рдХреЛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдпрд╣ рднреА рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ LLVM рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдмрд╛рдВрдзрддрд╛ рд╣реИ - рдпрд╛рдиреА, рдХреЗрд╡рд▓ рдкрд░рд┐рдЪрдп рдЕрдЧрд░ рд╣рдо рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ LLVM рдПрдХ рдЕрдирдВрдд рд▓реВрдк / рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди (рдХ) рдЯреНрд░реИрдХрд┐рдВрдЧ LLVM (b) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо, рдореЗрд░реЗ рдкрд╛рд╕ рд╕реЗ рдЧрд╣рд░рд╛ рдЬреНрдЮрд╛рди рд╣реИред

рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LLVM рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрдЧ рдХреНрдпрд╛ рд╣реИ?

рд╕рд╛рдЗрдб-рдиреЛрдЯ: while true {} рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдЯ рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдиреЛрдЯ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕реАред рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рддрд░реНрдХ рдЕрдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреНрд▓реИрдВрдЧ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред

void foo() { while (1) { } }

void create_null() {
        foo();

        int i = 0;
        while (i < 100) { i += 1; }
}

__attribute__((noreturn))
void use_null() {
        __builtin_unreachable();
}


int main() {
        create_null();
        use_null();
}

рдпрд╣ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ; рдпрд╣ C11 рдорд╛рдирдХ рдХреЗ рддрд╣рдд рдЕрдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ :

An iteration statement whose controlling expression is not a constant
expression, [note 156] that performs no  input/output  operations,
does  not  access  volatile  objects,  and  performs  no synchronization or
atomic operations in its body, controlling expression, or (in the case of
a for statement) its expression-3, may be   assumed   by   the
implementation to terminate. [note 157]

156: An omitted controlling expression is replaced by a nonzero constant,
     which is a constant expression.
157: This  is  intended  to  allow  compiler  transformations  such  as
     removal  of  empty  loops  even  when termination cannot be proven. 

"рдЬрд┐рдирдХреА рдирд┐рдпрдВрддреНрд░рдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╕реНрдерд┐рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ" рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - while (1) { } , 1 рдПрдХ рдирд┐рд░рдВрддрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХреНрдпрд╛ рд▓реВрдк рд╣рдЯрд╛рдиреЗ рд╕реЗ рдХреЛрдИ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдмрд╕ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ?

@ubsan

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдмрдЧрдЬрд╝рд┐рд▓рд╛ рдпрд╛ рдЙрд╕ рднрд░реЗ рд╣реБрдП рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдвреВрдВрдвреА? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ C ++ рдореЗрдВ рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХрд┐ _can_ рдХрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди C рдореЗрдВ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИрдВ (рдпрд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡реЗ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

@gnzlbg рдореИрдВ рдЕрдм рдмрдЧ рджрд░реНрдЬ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

https://llvm.org/bugs/show_bug.cgi?id=31217

# 42009 рд╕реЗ рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП: рдпрд╣ рдмрдЧ, рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрддреНрд╕рд░реНрдЬрди рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдпрд╣ рдШрдЯрд╛рддрд╛ рд╣реИ рдХрд┐ pub fn рдХреЛ рд╕рд╣реА рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдХрднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЬрд╛рд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕реЗ рдЖрдЬ рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛: https://blog.rom1v.com/2017/09/gnirehtet-rewritten-rust/rust/

рдПрдХ рд╕рд░рд▓ рдкреНрд░рдЬрдирди рдХреЗ рд╕рд╛рде: https://play.rust-lang.org/?gist=e622f8a672fbc57ecc63eb4450d2fc0a&version=stable

рдЗрд╕рдХреЗ рд▓рд┐рдП LLVM рдмрдЧ https://bugs.llvm.org/show_bug.cgi?id=965 (2006 рдореЗрдВ рдЦреЛрд▓рд╛ рдЧрдпрд╛) рд╣реИред

@ рдЬрд╝реИрдХрд╡ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЭрдВрдбрд╛ рд╣реИ: TrapUnreachable ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Options.TrapUnreachable = true; рд╕реЗ LLVMRustCreateTargetMachine рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдХрдо рд▓рд╛рдЧрдд рд╣реИ рдЬреЛ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдХреЛрдИ рдорд╛рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

@ oli-obk рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕рд┐рд░реНрдл рд▓реВрдк-рдбрд┐рд▓реАрд╢рди рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рдзрд╛рд░рдгрд╛рдУрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: (рдП) рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, (рдмреА) рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рдФрд░ (рд╕реА) рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреИрдЪ рд╣реИ: https://reviews.llvm.org/D38336

@sunfishcode , https://reviews.llvm.org/D38336 рдкрд░ рдЖрдкрдХреЗ LLVM рдкреИрдЪ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ 3 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ "рд╕реНрд╡реАрдХрд╛рд░" рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдЖрдк LLVM рдХреА рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕ рдкрд░ рдЕрдкрдбреЗрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рд╕реНрд╡реАрдХреГрддрд┐ рд╕реЗ рдкрд░реЗ рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдпрд╣ рдкреИрдЪ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рдореИрдВрдиреЗ рдСрдлрд╝рд▓рд╛рдЗрди рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ llvmdev рдзрд╛рдЧрд╛ рд╣реЛрдЧрд╛ред рдзрд╛рдЧрд╛ рдпрд╣рд╛рдБ рд╣реИ:

http://lists.llvm.org/pipermail/llvm-dev/2017-October/118558.html

рдЕрдм рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореБрдЭреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрджрд▓рд╛рд╡ рдЕрдЪреНрдЫреЗ рд╣реЛрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдореБрдЭреЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордп рд▓реЗрдВрдЧреЗред

рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ https://reviews.llvm.org/rL317729 LLVM рдореЗрдВ рдЙрддрд░рд╛ рд╣реИред рдЗрд╕ рдкреИрдЪ рдореЗрдВ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП AFAICT рд╣рдо рд╕рднреА рдХреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@zackw рдореИрдВ рдЕрдм рдХреЛрдИ рдХреЛрдб рдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ # 45,920 рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИред

@bstrie рд╣рд╛рдВ, рдкрд╣рд▓рд╛ рдХрджрдо рдЙрддрд░рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдореИрдВ

рдореИрдВ рдЗрд╕реЗ рдЕрднреА рд░рджреНрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛: https://play.rust-lang.org/?gist=529bd5ab326f7b627e559f64d514312f&version=stable

@jsgf рд╕реНрдЯрд┐рд▓

@kennytm Woops, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ https://reviews.llvm.org/rL317729 LLVM рдореЗрдВ рдЙрддрд░рд╛ рд╣реИред рдЗрд╕ рдкреИрдЪ рдореЗрдВ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП AFAICT рд╣рдо рд╕рднреА рдХреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрддрдГ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдХрдИ рдорд╣реАрдиреЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд░реНрддреА рдкреИрдЪ рд╣реБрдЖ рдпрд╛ рдЕрднреА рднреА рд╣реЛрдЧрд╛?

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрд┐рд╕ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ llvm.sideeffect рдЖрдВрддрд░рд┐рдХ рдореМрдЬреВрдж рд╣реИрдВ: рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЫреЛрд░реЛрдВ рдореЗрдВ рд░рд╕реНрдЯ рдЕрдирдиреНрдд рд▓реВрдкреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯ рд╡рд┐рдХреНрд╖рд┐рдкреНрдд рд╣реИрдВ?

рдЬреИрд╕рд╛ рдХрд┐ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ https://github.com/rust-lang/rust/issues/38136 рдФрд░ https://github.com/rust-lang/rust/issues/54214 , рдпрд╣ рдЖрдиреЗ рд╡рд╛рд▓реЗ panic_implementation рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреБрд░рд╛ рд╣реИ loop {} , рдФрд░ рдЗрд╕рд╕реЗ panic! UB рдХреА рд╕рднреА рдШрдЯрдирд╛рдПрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА unsafe рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдХреМрди рд╕рд╛ ... рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдЖрдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

pub struct Container<'f> {
    string: &'f str,
    num: usize,
}

impl<'f> From<&'f str> for Container<'f> {
    #[inline(always)]
    fn from(string: &'f str) -> Container<'f> {
        Container::from(string)
    }
}

fn main() {
    let x = Container::from("hello");
    println!("{} {}", x.string, x.num);

    let y = Container::from("hi");
    println!("{} {}", y.string, y.num);

    let z = Container::from("hello");
    println!("{} {}", z.string, z.num);
}

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд┐рд░, рдмреАрдЯрд╛ рдФрд░ рд░рд╛рдд рдХреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИ, рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣рд╛рдВ рдпрд╣ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рд╣реИ ред

@SergioBenitez рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕реЗрдЧрдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЖрдкрдХреЛ рдЗрд╕реЗ рдбреАрдмрдЧ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЕрдирдВрдд рдмрд╛рд░ рд╕реНрдЯреИрдХ рд╕реНрдкреЗрд╕ рдХреА рдЕрдирдВрдд рдорд╛рддреНрд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╕реНрдЯреИрдХ рд╕реНрдкреЗрд╕ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИред рдиреНрдпреВрдирддрдо рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг ред

рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ, LLVM рдпрд╣ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╣ рджреВрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ ( mwe )ред рдЗрд╕рдХрд╛ AFAICT рдХреЗ рд╕рд╛рде рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ https://stackoverflow.com/a/5905171/1422197 рдХреЗ рд╕рд╛рде

@gnzlbg рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВред

рдХрд╛рд░реНрдпрдХреНрд░рдо рд░рд┐рд▓реАрдЬ рдореЛрдб рдореЗрдВ segfaults рд╣реИред рд╡рд╣ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ; рдпрд╣ рдЕрдиреБрдкрдпреЛрдЧреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ - рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдФрд░ рд░рд╕реНрдЯ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдпрд╣рд╛рдВ рд╕рд╣рдорддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ - рдХрд┐ рдореИрдВ рдЬрдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЬрдВрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рдПрдХрддрд░рдлрд╛ рд╕реНрдореГрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдордзреНрдпрд╕реНрдерддрд╛ рд╕реНрдореГрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ, рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд░рд╣рд╛ рд╣реИ рднрд╛рд╖рд╛ рдХрд╛ рд╢рдмреНрджрд╛рд░реНрдеред рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдпрд╣реА рдмрд╛рдд рд╕реНрдкрд╖реНрдЯ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕реЗрдЧрдлреЙрд▓реНрдЯ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдпрд╣ рднреА рдкреНрд░рддреАрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдПрдХ _different_, рдиреЙрди-рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рд░рдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореБрджреНрджрд╛ рдХреНрдпрд╛ рд╣реИред

@gnzlbg рдЕрдЪреНрдЫрд╛, рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ ( рдпрд╣рд╛рдБ ) рд╕реЗ рджреВрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрдкрдиреЗ mwe рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдХрд░, рдпрд╣ NonZeroUsize рдХрд╛ рдПрдХ рдЕрдиреИрддрд┐рдХ рдореВрд▓реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдирд┐рдХрд▓рд╛ ... 0, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдЕрдорд╛рдиреНрдп рдорд╛рди)ред

рдФрд░ рдпрд╣реА @SergioBenitez рдиреЗ рднреА рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдПрдХ seffault рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ @SergioBenitez рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдбрд┐рдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИ?

рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдореБрдЭреЗ @SergioBenitez рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрдИ loop s рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ (рдпрд╣ рдореБрджреНрджрд╛ рдЕрдирдВрдд loop s рдХреЗ рдмрд╛рдж рдХрд╛ рд╣реИ)ред рдпрджрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ loop рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд▓рдПрд▓рд╡реАрдПрдо рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдзрд╛рдЧреЗ рдЕрдВрддрддрдГ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдбреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ segfault рдирд┐рд░рд╛рдзрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ segfault рдпрд╣ рд╕рдм рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдЯреИрдХ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж рд╕реНрдЯреИрдХ рдкреНрд░реЛрдмрд┐рдВрдЧ + рдПрдХ рдЕрдирдореИрдкреНрдб рдЧрд╛рд░реНрдб рдкреЗрдЬ) рдФрд░ рдХрд┐рд╕реА рднреА рдореЗрдореЛрд░реА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ рдЬреЛ рд╕реАрдЧрдлреЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, segfaults рд╕реНрдореГрддрд┐ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдпрд╛ рд╡рд╛рдЗрд▓реНрдб рд░рд╛рдЗрдЯреНрд╕ / рд░реАрдб рдпрд╛ рдЕрдиреНрдп рд╕рд╛рдЙрдВрдбрдиреЗрд╕ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдВрдХреЗрдд рднреА рджреЗ

@rkruppe рдореЗрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗрдЧрдлрд╝реЙрд▓реНрдЯ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереА, рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдмрд╛рдж рдореЗрдВ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЗрдореЛрд░реА рд╕реНрдерд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рдирд╛рдИ рдХреЗ рдмрд┐рдирд╛, _particular рдФрд░ рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рдкрдврд╝ / рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред

@gnzlbg рдкреНрд░реЛрдЧреНрд░рд╛рдо _does not_ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВред рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╢реВрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ; рд╕реНрдЯреИрдХ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдХрдИ рдмрд╛рд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдвреЗрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП? рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ fn foo() { foo() } , рдореЗрдВ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ LLVM рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ fn foo () {foo ()} рд╣реИ, рдореЗрдВ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ LLVM рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ рдпрд╣ рдХреБрдЫ рднреА рд╣рд▓ рдХрд░рддрд╛ рд╣реИред LLVM рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ UB рдХреЛ рд▓реВрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ Rust рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЗрд╕ рдкреВрд░реЗ рдореБрджреНрджреЗ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рд╣реИ!

Https://reviews.llvm.org/rL317729 рдХреЗ рд▓реЗрдЦрдХ рдпрд╣рд╛рдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреИрдЪ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ @llvm.sideeffect рдХреЙрд▓ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реВрдкреНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдореБрдЦ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рдПред рдпрджрд┐ рдХреЛрдИ рд╕рднреА рдЫреЛрд░реЛрдВ рдпрд╛ рдЪреАрдЬреЛрдВ рдореЗрдВ @llvm.sideeffect рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓реВрдкреНрд╕ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, рдЕрдирдЗрдВрдбрд┐рдВрдЧ, рдЗрдирд▓рд╛рдЗрди рдПрдПрд╕рдПрдо , рдЕрдиреНрдп?) рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рджреВрд╕рд░рд╛ рдкреИрдЪ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд░реВрд░реА рди рд╣реЛред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЙрд╕ рдкрд░ рдЕрдорд▓ рдХрдм рдХрд░реВрдВрдЧрд╛ред

рдХреБрдЫ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдкреНрд░рддреНрдпрд╛рд╡рд░реНрддрди

#[allow(unconditional_recursion)]
#[inline(never)]
pub fn via_recursion<T>() -> T {
    via_recursion()
}

fn main() {
    let a: String = via_recursion();
}
define internal void @_ZN10playground4main17h1daf53946e45b822E() unnamed_addr #2 personality i32 (i32, i32, i64, %"unwind::libunwind::_Unwind_Exception"*, %"unwind::libunwind::_Unwind_Context"*)* <strong i="9">@rust_eh_personality</strong> {
_ZN4core3ptr13drop_in_place17h95538e539a6968d0E.exit:
  ret void
}

рд▓реВрдк

#[inline(never)]
pub fn via_loop<T>() -> T {
    loop {}
}

fn main() {
    let b: String = via_loop();
}
define internal void @_ZN10playground4main17h1daf53946e45b822E() unnamed_addr #2 {
start:
  unreachable
}

рдореЗрдЯрд╛

рд░рд╕реНрдЯ 1.29.1, рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб рдореЗрдВ рд╕рдВрдХрд▓рди, рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЛ рджреЗрдЦрдирд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдкреБрдирд░рд╛рд╡рд░реНрддрди (рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ, рд╕реА рдПрдлрдПрдлрдЖрдИ, рдЖрджрд┐) рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╣рд░ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдкрд░ llvm.sideeffect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдпрд╣ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fn main() { main() } рдЬреИрд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рддреБрдЪреНрдЫ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЗрдВрдЯрд░рдкреНрд░реЛрдбреЗрдХреНрдЯреЛрд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред

@gnzlbg рдпрд╣ рд╕рдЪ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдХреЙрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдмрдЬрд╛рдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдкрд░ @ llvm.sideeffects рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ @SergioBenitez 'рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдореЗрдВ SEGFAULT рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рднреА, рдПрдХ рдвреЗрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдж рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ" рдпрд╛ рддреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рд╣реИ?

@RalfJung рдХреНрдпрд╛ рдЖрдкрдиреЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреА? (рдореИрдВ рдЕрдкрдиреА рдорд╢реАрдиреЛрдВ рдФрд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдмрдЧ рдХреЛ рднрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ)ред --release рдЖрдкрдХреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рднреА рдХреЛрдб рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


@sunfishcode

рдпрд╣ рд╕рдЪ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдХреЙрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдмрдЬрд╛рдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдкрд░ @ llvm.sideeffects рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдЕрдиреБрдХреВрд▓рди llvm.sideeffects рд░реЛрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ @llvm.sideeffects рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рд╣рд░ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рд▓рдЧрд╛рдирд╛ рд╕рдмрд╕реЗ рд╕реАрдзреА рдмрд╛рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдиреНрдпрдерд╛, IIUC, рдХреНрдпрд╛ @llvm.sideeffect рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ:

trait Foo {
    fn foo(&self) { self.bar() }
    fn bar(&self);
}

struct A;
impl Foo for A {
    fn bar(&self) {} // not recursive
}
struct B;
impl Foo for B {
    fn bar(&self) { self.foo() } // recursive
}

fn main() {
    let a = A;
    a.bar(); // Ok - no @llvm.sideeffect needed anywhere
    let b = B;
    b.bar(); // We need @llvm.sideeffect on this call site
    let c: &[&dyn Foo] = &[&a, &b];
    for i in c {
        i.bar(); // We need @lvm.sideeffect here too
    }
}

AFAICT, рд╣рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП @llvm.sideeffect рдЕрдВрджрд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рдпреЗ "рдЕрдиреБрдХреВрд▓рди" рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдереЗ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╣реИрдВред рдЕрдЧрд░ рд╡реЗ рд╣реЛрддреЗ, рддреЛ рднреА рдпреЗ рдЕрдиреБрдХреВрд▓рди рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рдХрд┐ рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛? (рдореИрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рдЕрдкрдиреА рдорд╢реАрдиреЛрдВ рдФрд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдмрдЧ рдХреЛ рднрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ)

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдбреАрдмрдЧ рдореЛрдб рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдпреВрдмреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рд▓рд╛рдЗрд╕реЗрдВрд╕ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдпреВрдмреА рд╣реИ, рдФрд░ рдЖрдИрдЖрд░ рдореЗрдВ рдШреВрд░рдиреЗ рд╕реЗ рдореИрдВ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред рдпрд╣ segfaults, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ segfaults рдореЗрдВ рдПрдХ stackoverflowing рдХрд╛рд░реНрдпрдХреНрд░рдо "рдЕрдиреБрдХреВрд▓рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдпреВрдмреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рд▓рд╛рдЗрд╕реЗрдВрд╕ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ segfaults рдореЗрдВ рдПрдХ stackoverflowing рдХрд╛рд░реНрдпрдХреНрд░рдо "рдЕрдиреБрдХреВрд▓рди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рд╕реА рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдПрдХ рдзрд╛рдЧреЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕, I / O, рдпрд╛ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝рд┐рдВрдЧ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдЕрдЧрд░ LLVM-IR рджреБрд░реНрдШрдЯрдирд╛ рдпрд╛ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рди рд╢рдмреНрджрд╛рд░реНрде рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реБрдЖред

рд░рд╕реНрдЯ рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдзрд╛рдЧрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдпреВрдмреА рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣реА рдПрд▓рдПрд▓рд╡реАрдПрдо-рдЖрдИрдЖрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реИред , рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрд╕ рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдирд╛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ segfaults, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред

LLVM рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП @SergioBenitez рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдо рддрдм рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ:

рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдореГрддрд┐ рд╕реНрдерд╛рди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рдереА, рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдмрд╛рдж рдореЗрдВ рдкрдврд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ:

let x = Container::from("hello");  // invalid reference created here
println!("{} {}", x.string, x.num);  // invalid reference dereferenced here

рдЬрд╣рд╛рдБ Container::from рдПрдХ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рд╡рд╣ рдХрднреА рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рддрдм рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред : рдЖрдк рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдпрд╣ рдпрд╣рд╛рдБ misoptimized рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ https://rust.godbolt.org/z/P7Snex (рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдкрд░ https://play.rust-lang.org/?gist=f00d41cc189f9f6897d429350f3781ec&version=stable&mode = рд░рд┐рд▓реАрдЬрд╝ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг = 2015) рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░рдг рдбрд┐рдмрдЧ рдмрд┐рд▓реНрдб рд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╣реА рджрд╣рд╢рдд рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди UB UB рд╣реИред

рд░рд╕реНрдЯ рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдПрдХ рдзрд╛рдЧрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдпреВрдмреА рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╣реА рдПрд▓рдПрд▓рд╡реАрдПрдо-рдЖрдИрдЖрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реИред , рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЗрд╕ рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдирд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдзреАрди рдерд╛ рдХрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рддрд░реНрдХ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрдирдВрдд рд▓реВрдк рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рди рдмрдЧ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рддрдм рдЧрд▓рдд рд╕рдордЭрд╛ред рдЧрд▓рддрдлрд╣рдореА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рддреЛ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЖрдИрдЖрд░ рдореЗрдВ рдХреБрдЫ llvm.sideffect рдЫрд┐рдбрд╝рдХрдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХреБрдЫ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реЛрдВрдЧреЗ?

рд╕реА рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдПрдХ рдзрд╛рдЧреЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕, I / O, рдпрд╛ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝рд┐рдВрдЧ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред

Btw, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ - (рдЬреИрд╕реЗ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рд╢рд░реНрдд рд╕рд╛рде рдПрдХ рдкрд╛рд╢ while (true) { /* ... */ } ) рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдХрд┐рд╕реА рднреА рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ C ++ рдореЗрдВ рдЕрд▓рдЧ рд╣реИред рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реА рдорд╛рдирдХ рдХреЛ рдпрд╣рд╛рдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдзреАрди рдерд╛ рдХрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рддрд░реНрдХ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрдирдВрдд рд▓реВрдк рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рди рдмрдЧ рдирд╣реАрдВ рд╣реИред

рдиреЙрди-рдЯрд░реНрдорд┐рдиреЗрдЯрд┐рдВрдЧ рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЧреИрд░-рдЯрд░реНрдорд┐рдиреЗрдЯрд┐рдВрдЧ LLVM-IR рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рддрд╛рдХрд┐ рдЙрддреНрдкрдиреНрди рдПрд▓рдПрд▓рд╡реАрдПрдо-рдЖрдИрдЖрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, @llvm.sideeffect , рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

@SergioBenitez рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдХреЛрдИ рднреА рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреИрд░- рд╕рдорд╛рдкреНрддрд┐рдХрд╛рд░реА рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпреЗ рджреЛ рдореБрджреНрджреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдмрдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП, рдпреЗ рджреЛ рдореБрджреНрджреЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рд╣реИрдВ:

  • рд╡рд╛рд░ рд╡рд╛рд░, рд╣рдо рд╣рд░ рдПрдХ рдЬрдВрдЧ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рди рдмрд╛рдзрд╛ ( @llvm.sideeffect ) рд▓рдЧрд╛рдиреЗ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред

  • рдореВрд▓реНрдп-рд╡рд╛рд░, рдЕрдирдВрдд loop s рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдиреБрдХреВрд▓рди рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд▓реВрдк рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ), рдФрд░ рдХрдм рдФрд░ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░, рд╕рдВрд░рдХреНрд╖рд┐рдд рдЧрд╛рд░реНрдб рдкреГрд╖реНрда, рдЖрджрд┐) рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд░рд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдзреНрд╡рдирд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдзреНрд╡рдирд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА "рдЧрд▓рдд" рд╣реЛрдЧрд╛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╡рд╛рд░ рд╡рд╛рд░, рд╣рдо рд╣рд░ рдПрдХ рдЬрдВрдЧ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдХреВрд▓рди рдмрд╛рдзрд╛ (@ llvm.sideeffect) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдХ рд▓реВрдк рдмреЙрдбреА рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ (рди рдХрд┐ рдХреЗрд╡рд▓ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ, рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рдЗрд╕ рддрд░рд╣ llvm.sideeffect рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ llvm.sideeffect рдбрд╛рд▓реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдРрд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд▓реВрдк рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рдЧреБрдгрд╛рддреНрдордХ рдЕрдВрддрд░ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдЕрдирдВрдд-рд▓реВрдк рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, llvm.sideeffect рдХреЛ loop { ... } рдФрд░ while <compile-time constant true> { ... } рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдИ break рдирд╣реАрдВ рд╣реИ

рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕реАрдЧрдлреЙрд▓реНрдЯ рдореЗрдВ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

@zackw

рдпрджрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдЕрдирдВрдд-рд▓реВрдк рдХреЗрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ llvm.sideeffect рдХреЛ рд▓реВрдк {...} рдФрд░ рдЬрдмрдХрд┐ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП{...} рдЬрд╣рд╛рдВ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд░рд╛рдо рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ, loop { if false { break; } } рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ break рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдлрд┐рд░ рднреА рд╣рдореЗрдВ llvm рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП @llvm.sideeffect рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред AFAICT рдореЗрдВ рд╣рдореЗрдВ @llvm.sideeffect рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдпрд╣ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХрд┐ рд▓реВрдк рд╣рдореЗрд╢рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@gnzlbg

loop { if false { break; } } рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд░рд╛рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрддреА рд╣реИ, рдлрд┐рд░ рднреА рд╣рдореЗрдВ llvm рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП @llvm.sideeffect рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдореНрдо, рд╣рд╛рдБ, рдпрд╣ рдкрд░реЗрд╢рд╛рдиреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ _perfect_ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИред рдПрдХ рдкрд╛рд╢ рдХреА рддрд░рд╣

while spinlock.load(Ordering::SeqCst) != 0 {}

( std::sync::atomic рдкреНрд░рд▓реЗрдЦрди рд╕реЗ) рдЖрд╕рд╛рдиреА рд╕реЗ @llvm.sideeffect рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджреЗрдЦреА рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╕реНрдерд┐рддрд┐ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдкрд░рдорд╛рдгреБ рднрд╛рд░ рдСрдкрд░реЗрд╢рди рдореЗрдВ LLVM рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмреЗрд╣рддрд░ рдЧрдгрдирд╛ рдереА , рдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ)ред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рдорд┐рдд рдкрд╛рд╢ рдХреА рддрд░рд╣,

loop {
    if /* runtime-variable condition */ { break }
    /* more stuff */
}

рднреА рдкрд░реЗрд╢рд╛рдиреА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ "рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд░рд╛рдо рдХреЗ рднрд╛рд╡" рдирд┐рдпрдо рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ _ _

loop {
    if /* provably false at compile time */ { break }
}

?

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рддрд╛рдХрд┐ рдЙрддреНрдкрдиреНрди рдПрд▓рдПрд▓рд╡реАрдПрдо-рдЖрдИрдЖрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рдП, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, @ llvm.sideeffect, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдХрд╛рдлреА рдЙрдЪрд┐рддред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдореБрджреНрджрд╛ (рд░рд╕реНрдЯ рд╕реЗрдореЗрдВрдЯрд┐рдХреНрд╕ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмреАрдЪ рдмреЗрдореЗрд▓) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рди рдХрд┐ рд▓реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

@zackw

рдпрджрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдЕрдирдВрдд-рд▓реВрдк рдХреЗрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ llvm.sideeffect рдХреЛ рд▓реВрдк {...} рдФрд░ рдЬрдмрдХрд┐ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП{...} рдЬрд╣рд╛рдВ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд░рд╛рдо рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЕрдирдВрдд рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП C ++ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рд░реБрд╕реНрдд рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ: рдЬрдВрдЧ рдореЗрдВ, C ++ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рдорд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд▓реВрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫреЛрд░реЛрдВ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рддрдиреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬрд╣рд╛рдВ рд╢рд░реАрд░ рдШрдмрд░рд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред)

рд╕реАред рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬреЛ рднреА рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХрд┐рд╕реА рднреА рд▓реВрдк рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдмрд╛рдХреА рд╕рдм рдмрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рд╛рдзрд╛рд░ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

while test_fermats_last_theorem_on_some_random_number() { }

рдЬрдВрдЧ рдореЗрдВ рдПрдХ рдареАрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ (рд▓реЗрдХрд┐рди рди рддреЛ C рдФрд░ рди рд╣реА C ++ рдореЗрдВ), рдФрд░ рдпрд╣ рдПрдХ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЗ рдмрд┐рдирд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рднреА рдЫреЛрд░реЛрдВ рдХрд╛ рд╣реЛрдирд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ рд╣рдо рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

@zackw

рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ "рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЛрдИ рдмреНрд░реЗрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди" рдирд┐рдпрдо рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдпрд╣ рди рдХреЗрд╡рд▓ if /*compile-time condition */ ред рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ ( while , match , for , ...) рдФрд░ рд░рди-рдЯрд╛рдЗрдо рдХреА рд╕реНрдерд┐рддрд┐ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рд╣реА, рд░реВрдврд╝рд┐рд╡рд╛рджреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

fn foo(x: bool) { loop { if x { break; } } }

рдЬрд╣рд╛рдВ x рдПрдХ рд░рди-рдЯрд╛рдЗрдо рд╕реНрдерд┐рддрд┐ рд╣реИред рдЕрдЧрд░ рд╣рдо рдпрд╣рд╛рдБ @llvm.sideeffect рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ foo(false) рдХрд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ foo рдХреЛ рдЭреБрдХрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░рдВрддрд░ рдкреНрд░рдЪрд╛рд░ рдФрд░ рдореГрдд рдХреЛрдб рдЙрдиреНрдореВрд▓рди рдХреЗ рд╕рд╛рде, рд▓реВрдк рдХреЛ рдПрдХ рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдЕрдирдВрдд рд▓реВрдк, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧрд▓рдд рдЕрдиреБрдХреВрд▓рди рд╣реЛрддрд╛ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ LLVM рдХреЛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА foo foo_opt рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ:

fn foo_opt(x: bool) { if x { foo(true) } else { foo(false) } }

рдЬрд╣рд╛рдБ рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдПрдБ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо @llvm.sideeffect рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рджреВрд╕рд░реА рд╢рд╛рдЦрд╛ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣реА рд╣реИ, @llvm.sideeffect рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ LLVM рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрд╕ рд▓реВрдк рдХрд╛ рдЧрд▓рдд рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╛ рддреЛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд▓реВрдк рд╣рдореЗрд╢рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рд╢рд░реНрдд рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЧрд▓рдд-рдЕрдиреБрдХреВрд▓рди рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рд▓реВрдк рдмрдВрдЯрд╡рд╛рд░реЗ / рдЫреАрд▓рдиреЗ рдЬреИрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдПрдХ рд▓реВрдк рдХреЛ рдЫреЛрд░реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП @llvm.sideeffect рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдЗрд╕ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реЗ rustc рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред (рдЕрд╕реНрд╡реАрдХрд░рдг: рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдирд╣реАрдВ рдЬрд╛рдирддрд╛)

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, LLVM рд╕реЗ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рд╕реЗ рдмрджрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛ (рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВ) рдпрд╛ рддреЛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗрд╡рд▓ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрд╕рд╛рди (рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ) рд╣реИ, рд▓реЗрдХрд┐рди рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рд▓реВрдк рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ (рдЧреИрд░-) рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИред

рджреВрд╕рд░реА рдУрд░, rustc рдХреЗрд╡рд▓ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ @llvm.sideeffect , рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ "рд╕рд┐рд░реНрдл" рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред рдФрд░ rustc рдХреЛ рд▓реВрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ (рдЧреИрд░-) рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЧреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛:

  1. рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдкрд░ @llvm.sideeffect рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реЗрдВ
  2. рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╡рд╛рд▓реЗ рдЫреЛрд░реЛрдВ рдкрд░ рдЧрд▓рдд рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд░реЗрдВ, рдФрд░ @llvm.sideeffects рд╣рдЯрд╛ рджреЗрдВ

рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЪрд░рдг 1 рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдмрд╣реБрдд рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд▓реЗ рд╣реА рдпрд╣ 2 рдмрд╛рд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдП ...

@Ekleog рдХрд┐ @sunfishcode рджреВрд╕рд░реА рдкреИрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://lists.llvm.org/pipermail/llvm-dev/2017-October/118595.html

рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдИрдЖрд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ
рдЕрдирдВрдд рд▓реВрдк, рдФрд░ рдлрд┐рд░ рд╕рдВрднрд╛рд╡рд┐рдд-рдпреВрдмреА рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП
рдЕрдЧрд░ рд╣рдо рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ @ llvm.sideeffect рдХреА рднреВрдорд┐рдХрд╛ рдереЛрдбрд╝реА рдмрди рдЬрд╛рддреА рд╣реИ
рд╕реВрдХреНрд╖реНрдо - рдпрд╣ рд╕реА рдХреА рддрд░рд╣ рдПрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛
рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд-рдпреВрдмреА рдореЗрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ
рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓реВрдкреНрд╕ред

LLVM рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдХрд▓рдХ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ "рдореИрдВ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд▓реВрдк рдХреЛ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐рдХрд╛рд░реА рд╕рд╛рдмрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рджреВрд░ рддрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХреВрдВ!" рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рд▓реВрдк рдпрд╛ рддреЛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдпрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЯреНрд╡реАрдХ рдирд╣реАрдВ рд╣реИ; рдЗрд╕реЗ рдирдИ рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХрд╛ "рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдирд╣реАрдВ рд╣реИ: рдпрджрд┐ рд╢рд░реАрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдкрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕рд░рд▓ред рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ, "рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде" рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдардВрдбрд╛ред рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╢рд╛рдЦрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рд╢рд╛рдЦрд╛рдУрдВ рд╡рд╛рд▓реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╣реЛред рдЙрдлрд╝ред

рдпрд╣ рддрдп рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореЗрд░рд╛ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рднрд╛рд╡ рд╣реИ" рдХреА рд╕реНрд╡рддрдВрддреНрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ "рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ"ред рдФрд░ рдлрд┐рд░ рдкреВрд░реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВ рдЬреЛ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдкрд╛рд╕ рд╕рд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд▓реВрдк рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рд▓реВрдкреНрд╕ рд╡реЗ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдкрд░рд┐рдорд┐рдд рд╣реИрдВ, рддрд╛рдХрд┐ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рдж рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА loop { } (рдпрд╛ рдЗрд╕реА рддрд░рд╣) рдпрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдкреБрдирд░рд╛рд╡рд░реНрддрди (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓рд┐рдВрдЯ рд╣реИ) рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╕рдордЭреМрддрд╛ @ llvm.sideeffect рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭреМрддрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирдВрдд рдкреНрд░рднрд╛рд╡рд╣реАрди рдХрддрд╛рдИ рд▓реВрдк рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЙрдкрд░рд┐ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдордЭреМрддрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЧрд▓рддреА рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдзрд╛рд░рдгрд╛ рдХрд┐ рд▓реВрдк рдпрд╛ рддреЛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдпрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХрд▓рдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдЖрдк рднреА рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рдХрднреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА рдХреА рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рдереА, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред

рдпрджрд┐ рд╢рд░реАрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рд╢рд░реАрд░ рдкрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ "рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐" рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдкреНрд░рднрд╛рд╡ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред (рд╣рд╛рд╕реНрдХреЗрд▓ рд╢реБрджреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рджреЛ рдкреНрд░рднрд╛рд╡ рд╣реИрдВ: рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдФрд░ рдЕрдкрд╡рд╛рджред)

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рд▓реВрдк {} (рдпрд╛ рд╕рдорд╛рди) рдпрд╛ рдмрд┐рдирд╛ рд╢рд░реНрдд рдкреБрдирд░рд╛рд╡рд░реНрддрди (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓рд┐рдВрдЯ рд╣реЛрддрд╛ рд╣реИ) рд▓рд┐рдЦрдиреЗ рдкрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдордЭреМрддрд╛ @ llvm.sideeffect рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭреМрддрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирдВрдд рдкреНрд░рднрд╛рд╡рд╣реАрди рдХрддрд╛рдИ рд▓реВрдк рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдмрд╛рдХреА рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЙрдкрд░рд┐ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдордЭреМрддрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЧрд▓рддреА рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЦреБрдж рдмрддрд╛рдпрд╛, рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдПрдХ "рд╕рдорд╛рдзрд╛рди" рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо рдЧрд▓рдд рд╣реЛрдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ ред рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдорд╛рд░реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреБрдЫ рднреА рдЧрд▓рдд рди рд╣реЛред рдпрд╣ рдареЛрд╕ рдЖрдзрд╛рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред


рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ "рд╕рдВрдХрд▓рдХ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ " рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреНрдпрд╛ рд╕рдВрдХрд▓рдХ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╢реБрджреНрдзрддрд╛ рдХреА рдзрд╛рд░рдгрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдЙрдирдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рдереЗред рдПрдХ рд╕рд╣реА рд╕рдВрдХрд▓рдХ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЕрд╡рдзрд┐ред рдореБрдЭреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╕реНрдЯ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдордиреЗ рдЖ рд░рд╣рд╛ рд╣реИред

рдЬрд┐рди рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рджреЗрдЦрддреЗ рд╣реБрдП (рдЕрд░реНрдерд╛рддреН, рдПрд▓рдПрд▓рд╡реАрдПрдо), рд╣рдореЗрдВ рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ llvm.sideeffect рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣рд░ рдбрд╛рдпрд╡рд░реНрдЬрди рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрд╛рд░рдВрдЯреА "рдирд┐рд╖реНрдкрд╛рджрд┐рдд" рд╣реЛ рдЬрд╛рдПред рддрдм рд╣рдо рдПрдХ рдЙрдЪрд┐рдд (рдЬреИрд╕реЗ, рдзреНрд╡рдирд┐ рдФрд░ рд╕рд╣реА) рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдП рд╣реИрдВ рдФрд░ рдЗрди рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдкрдиреА рдмрд╛рдд рдХреЛ рдФрд░ рд╕рдЯреАрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдзреНрд╡рдирд┐ рдЬрдВрдЧ рдЯреЛрдХрд░рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ pick_a_number_greater_2 рд░рд┐рдЯрд░реНрдирд┐рдВрдЧ (рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд░реВрдк рд╕реЗ) рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрдбрд╝рд╛-рдЗрдВрдЯ:

fn test_fermats_last_theorem() -> bool {
  let x = pick_a_number_greater_2();
  let y = pick_a_number_greater_2();
  let z = pick_a_number_greater_2();
  let n = pick_a_number_greater_2();
  // x^n + y^n = z^n is impossible for n > 2
  pow(x, n) + pow(y, n) != pow(z, n)
}

pub fn diverge() -> ! {
  while test_fermats_last_theorem() { }
  // This code is unreachable, as proven by Andrew Wiles
  unsafe { mem::transmute(()) }
}

рдпрджрд┐ рд╣рдо рдЙрд╕ рдбрд╛рдпрд╡рд░реНрдЬрди рд▓реВрдк рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рднреЛрд▓реЗрдкрди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реЛрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рддрдХ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ, рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рддреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, fn foo() { foo() } рд╣рдореЗрд╢рд╛ рд╕рдВрд╕рд╛рдзрди рдердХрд╛рд╡рдЯ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд░рд╕реНрдЯ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдорд╢реАрди рдореЗрдВ рдПрдХ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо (AFAIK) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕ рдХреЛрдб рдХреЛ fn foo() { loop {} } рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдз рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рд╕рдорд╛рдкреНрдд (рдпрд╛ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ, рдЬрдм рдмреНрд░рд╣реНрдорд╛рдВрдб рдЬрдо рдЬрд╛рддрд╛ рд╣реИ)ред рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рд╛рдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЯреЗрд▓-рдХреЙрд▓ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ рдХрд┐ рдПрдХ unsafe рдЖрдВрддрд░рд┐рдХ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рдпрд╛ рд╣реБрдЖ рд▓реВрдк, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, ... рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ? N1528 рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд░ рд▓реВрдкреНрд╕ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд▓реВрдк рд╕рдВрд▓рдпрди рдХреЛ рд▓рд┐рд╕реНрдЯ рдХреЛрдб рдЯреНрд░реИрд╡рд░реНрд╕рд┐рдВрдЧ рд▓рд┐рдВрдХ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдкрд░рд┐рдкрддреНрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдкрд░рд┐рдкрддреНрд░ рдирд╣реАрдВ рд╣реИ - рдЖрдзреБрдирд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд░ред

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдзреНрд╡рдирд┐ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ " llvm.sideeffect рд╣рд░ рдЬрдЧрд╣ рд╣рдо рдЗрд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдЬ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдзреНрд╡рдирд┐ рд╕рдВрдХрд▓рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдкреНрд░рддрд┐рдЧрдорди рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдФрд╕рдд рд░реВрдк рдореЗрдВ рдФрд╕рдд рд░рд╕реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдлрд┐рдХреНрд╕ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░реА рдХрд░рддрд╛ рд╣реИред рд╕рдордпред рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рд╣реИ:

  • рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рдзреНрд╡рдирд┐ рдмрдЧ (# 10184) рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд-рдкрд░рдлреЙрд░реНрдореЗрдВрд╕-рд░рд┐рдЧреНрд░реЗрд╕рд┐рдВрдЧ рдлрд╝рд┐рдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдПрдХ -Z рдлрд╝реНрд▓реИрдЧ рдХреЗ рдкреАрдЫреЗ рдХреЗ рдлрд┐рдХреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЬрдВрдЧрд▓реА рдореЗрдВ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  • рдпрджрд┐ рдкреНрд░рднрд╛рд╡ рд╡рд┐рдХреНрд╖рд┐рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╣рд╛рди, рд╣рдо рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ LLVM рд▓реЛрдЧреЛрдВ рддрдХ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ LLVM рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рд╣рдо рдкреНрд░рддрд┐рдЧрдорди рдХреЛ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдПрдХ рд╕реВрдЪрд┐рдд рдирд┐рд░реНрдгрдп рд▓реЗрдВрдЧреЗ)
  • рдпрджрд┐ рд╣рдо рд░рд┐рдЧреНрд░реЗрд╕рди рдХреЗ рдХрд╛рд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд┐рдХреНрд╕ рдХреЛ рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдо рд╕реЗ рдХрдо llvm.sideeffect рдХреЛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рдЫреЛрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: рд╡реЗ рдмрд▓реНрдХрд┐ рдЖрдо рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рд▓реЛрдЧ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЦрд░реНрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдШрдВрдЯреЛрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЕрдЬреАрдм рдореБрджреНрджреЛрдВ (# 38136, # 47537, # 54214, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдБ рдЕрдзрд┐рдХ рд╣реИ), рдЗрд╕рд▓рд┐рдП рднрд▓реЗ рд╣реА рдЗрд╕ рд╢рдорди рдзреНрд╡рдирд┐ рдмрдЧ рдкрд░ рдХреЛрдИ рдЕрд╕рд░ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдареЛрд╕ рд▓рд╛рдн рд╣реЛрдЧрд╛ рдЬрдм рд╣рдо рдЙрдЪрд┐рдд рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдмрдЧ рдареАрдХ рдХрд░реЗрдВред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦрдбрд╝рд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рддрд╛рдЬрд╛ рдкреНрд░рддрд┐рдЧрдорди рдерд╛, рддреЛ рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рддреЗрдЬрд╝реА рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдпрд╛ рдкреАрдЖрд░ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЦреБрд▓рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдмреАрдЪ, https://doc.rust-lang.org/beta/reference/behavior-considered-undefined.html рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдпрд╣ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ рдХрд┐ рдПрдХ unsafe рдЖрдВрддрд░рд┐рдХ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рджрд┐рдпрд╛ рд╣реБрдЖ рд▓реВрдк, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐, ... рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ?

std::hint::reachable_unchecked ?

рд╕рдВрдпреЛрдЧ рд╕реЗ рдореИрдВ рдПрдХ рдЯреАрд╕реАрдкреА рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯреЙрдкрдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдерд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрдВрддреНрд░ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд▓реЗрдХрд┐рди рдзрд╛рдЧрд╛ рддреБрд░рдВрдд рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред

рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рднреА рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреЛрдб рдЧреЛрд▓реНрдл рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

fn main() {
    (|| loop {})()
}

`` `
$ рдХрд╛рд░реНрдЧреЛ рд░рди --release
рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ (рдХреЛрд░ рдбрдВрдк)

рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рднреА рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХреЛрдб рдЧреЛрд▓реНрдл рдЦреЗрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

pub fn main() {
   (|| loop {})()
}

Https://github.com/rust-lang/rust/pull/59546 рдореЗрдВ -Z insert-sideeffect рдЬрдВрдЧ рд╡рд╛рд▓рд╛ рдЭрдВрдбрд╛, рдпрд╣ рд▓реВрдк рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ :)

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ:

main:
  ud2

рдЙрдкрд░рд╛рдВрдд:

main:
.LBB0_1:
  jmp .LBB0_1

рд╡реИрд╕реЗ, рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рдпрд╣ https://bugs.llvm.org/show_bug.cgi?id=965 рд╣реИ , рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЕрднреА рддрдХ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЬреЛ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред

https://github.com/rust-lang/rust/issues/28728#issuecomment -331460667 рдФрд░ https://github.com/rust-lang/rust/issues/28728#issuecomment -263956134

@RalfJung рдХреНрдпрд╛ рдЖрдк рд╣рд╛рдЗрдкрд░рд▓рд┐рдВрдХ https://github.com/simnalamburt/snippets/blob/master/rust/src/bin/infinite.rs рдХреЛ рдореБрджреНрджреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ https://github.com/imimnalamburt/snippets/blob рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ rust /

@simnalamburt рдиреЗ рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж!

MIR рдСрдкреНрдЯ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдирд┐рдореНрди рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдмрдЪрдиреЗ рд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

pub fn main() {
   (|| loop {})()
}

--emit=llvm-ir -C opt-level=1

define void @_ZN7example4main17hf7943ea78b0ea0b0E() unnamed_addr #0 !dbg !6 {
  unreachable
}

--emit=llvm-ir -C opt-level=1 -Z mir-opt-level=2

define void @_ZN7example4main17hf7943ea78b0ea0b0E() unnamed_addr #0 !dbg !6 {
  br label %bb1, !dbg !10

bb1:                                              ; preds = %bb1, %start
  br label %bb1, !dbg !11
}

https://godbolt.org/z/N7VHnj

rustc 1.45.0-nightly (5fd2f06e9 2020-05-31)

pub fn oops() {
   (|| loop {})() 
}

pub fn main() {
   oops()
}

рдЗрд╕рдиреЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдХреА рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред https://godbolt.org/z/5hv87d

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рддрдм рд╣рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╕реНрдЯ рдпрд╛ рдПрд▓рдПрд▓рд╡реАрдПрдо рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╕реВрдХреНрд╖реНрдо рдкреНрд░рднрд╛рд╡ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдерд╛ред -Z insert-sideeffect рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╣реИред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреА рдУрд░ рдХреБрдЫ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ: рдкреНрд░рдЧрддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди-рд╕реНрддрд░реАрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред https://reviews.llvm.org/D85393

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рд╣рд░ рдХреЛрдИ (рдпрд╣рд╛рдВ рдФрд░ рдПрд▓рдПрд▓рд╡реАрдПрдо рдереНрд░реЗрдбреНрд╕ рдкрд░) рдЖрдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦрдВрдб рдкрд░ рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реИред

рд▓реВрдк рдХрд╛ рдЙрдиреНрдореВрд▓рди рд╕реНрдореГрддрд┐ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЛ рддрдм рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрдм рддрдХ рд╡реЗ рдореВрд▓реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдм, рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рдорд╛рдг рд╣реИ рддреЛ рдореВрд▓реНрдп рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ-рдкрд╣рд▓реЗ, рдФрд░ рдХреЛрдб рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╛, рдпрджрд┐ рдЖрдк рд╕реНрдореГрддрд┐ рдореЙрдбрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рд▓реВрдк рдПрдХ рдорд╛рди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреВрд░ рд╣реИред рдЕрдм рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рд╕рднреА рд░реАрдбреНрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рд╣реИред рдЕрдм, рдпрджрд┐ рдореВрд▓реНрдп рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдирдВрдд рд▓реВрдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдИ рднреА рдЗрдирд╡реЛрдХреЗрд╢рди рдирд╣реАрдВ рд╣реИрдВред

рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрднрд┐рдХрд▓рди рдХреЛ рддрдм рддрдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рдЬрдм рддрдХ рд╡реЗ рдореВрд▓реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдм, рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рдорд╛рдг рд╣реИ рддреЛ рдореВрд▓реНрдп рдХрд╛ рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ-рдкрд╣рд▓реЗ, рдФрд░ рдХреЛрдб рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рджреВрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдХрдерди рддрднреА рд╕рд╣реА рд╣реИ рдЬрдм рдЙрд╕ рдЧрдгрдирд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛред рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдПрдХ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЬреИрд╕реЗ рдЖрдк рдПрдХ рдЧрдгрдирд╛ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯрдбрдЖрдЙрдЯ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ "рд╢реБрджреНрдз рдирд╣реАрдВ рд╣реИ"), рдЖрдк рдПрдХ рдЧрдгрдирд╛ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдирд┐рдХрд╛рд▓рдирд╛ рдареАрдХ рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реЛ:

fn sideeffect() -> u32 {
  println!("Hello!");
  42
}

fn main() {
  let _ = sideffect(); // May not be removed.
}

рдпрд╣ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдЪ рд╣реИ рдЬрдм рдЖрдк рдкреНрд░рд┐рдВрдЯ рдХреЛ loop {} рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╛рд╡реЗ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдордЭреМрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (рдпрд╣ рдЧреИрд░-рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИ), рдмрд▓реНрдХрд┐ _when_ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рд▓реВрдк рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИред рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдирд╣реАрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЙрди рдЧрдгрдирд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд▓реВрдк рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

рдПрд▓рдПрд▓рд╡реАрдПрдо рдереНрд░реЗрдб рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ред

x = y % 42;
if y < 0 return 0;
...

рд╡рд┐рднрд╛рдЬрди рдХреА рд╕рдорд╛рдкреНрддрд┐ рдЧреБрдгреЛрдВ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдЖрдзреБрдирд┐рдХ рд╕реАрдкреАрдпреВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдлрд▓ рд╢рд╛рдЦрд╛ рдХреЗ рд╡рд┐рднрд╛рдЬрди, рддреБрд▓рдирд╛, рд╢рд╛рдЦрд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдФрд░ рдкреНрд░реАрдлреЗрдЯрд┐рдВрдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк 0 рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ y рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред ("рджреНрд╡рд╛рд░рд╛" рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ) рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдСрд╕рд┐рд▓реЛрдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдорд╛рдк рдЬрд╣рд╛рдВ рд╕реАрдкреАрдпреВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рдирд╣реАрдВ рд╣реИ)

рдпрджрд┐ рдЖрдк рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдП рдЧрдП рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рд▓рд┐рдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдПрдХ рд╕рдВрдХрд▓рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

if y < 0 return 0;
x = y % 42;
...

рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ "рдЖрдорддреМрд░ рдкрд░", рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдпрдж рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдЧрд░ рдЬрдВрдЧ рдРрд╕реА рдХреЛрдИ рднрд╛рд╖рд╛ рд╣реИред

рд╢реБрджреНрдз рдЫреЛрд░реЛрдВ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред


рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рд╡рд╣ рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╣реЛрдиреЗ рджреЗрддреА рд╣реИред

рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╛рд╡реЗ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдордЭреМрддреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ (рдпрд╣ рдЧреИрд░-рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИ), рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рдпрд╣ рдХрдм рдордирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдПрдХ рд╕рдордЭреМрддреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЬреЛ рд╡реНрдпрдХреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрд╕рдВрдзрд╛рди рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рд╣рдорддрд┐ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдЕрд╕рд╣рдордд рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рдЖрдк "рдХрдВрдкрд╛рдЗрд▓рд░ рд╢реБрджреНрдзрддрд╛" рдЬреИрд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рдЕрдиреБрдореЗрдп рдкреНрд░реЗрдХреНрд╖рдгреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕реНрд░реЛрдд рд╕реНрддрд░ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдПрдХ "рд╕рд╛рд░ рдорд╢реАрди" рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╢реНрд░рдорд╕рд╛рдзреНрдп рдЧрдгрд┐рддреАрдп рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ) рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдиреБрдореЗрдп рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИрдВред рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд┐рд╕реА рднреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╕рдВрдХрд▓рдХ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рддрдм рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗрд╡рд▓ рд╡реЗ рд╣реА рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЬреЛ рд╢реБрджреНрдзрддрд╛ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рд╕рдЯреАрдХ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрдмреНрдЬрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╕реНрд░реЛрдд рд╕реНрддрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рдХреМрди рд╕реЗ рд╕реНрд░реЛрдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдХрднреА рднреА рдШрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореБрджреНрджрд╛ рдЗрд╕рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ C ++ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡ ("рдореВрдХ рд╡рд┐рдЪрд▓рди") рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╕реНрдЯ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдВрдЧ рдореЗрдВ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд╣рдореЗрд╢рд╛ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ C ++ рд╡рд┐рдХрд▓реНрдк рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЧрд▓рддреА рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреАрдбрд╝реЗ) рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд░рд╕реНрдЯ рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рд╕реЗ рдХреЛрдИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдореЗрдВ рдЕрдирдВрдд рд▓реВрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рдЕрдирдВрдд рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдХреНрд╖рд┐рдд) рд╡реНрдпрд╡рд╣рд╛рд░ред

рдЕрдЧрд░ рдпреЗ рдЪреАрдЬреЗрдВ рднреНрд░рд╛рдордХ рд╣реИрдВ, рддреЛ рдореИрдВ рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдмреЗрдВрдЬрд╛рдорд┐рди рдкрд┐рдпрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ "рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛" рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдорд┐рд▓реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЬрдЬ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

рд╕реБрдЧрдорддрд╛ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рд╡рд┐рднрд╛рдЬрди рдЙрджрд╛рд╣рд░рдг рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

x = 42 % y;
if y <= 0 { return 0; }

рдлрд┐рд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣рдордд рд╣реЛрдВрдЧреЗ рдХрд┐ рд╕рд╢рд░реНрдд _cannot_ рдХреЛ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдКрдкрд░ рдлрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╡реЗ рд╢реВрдиреНрдп рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд▓реМрдЯрдиреЗ рддрдХ)ред

рдЙрд╕реА рддрд░рд╣, рдореЗрдВ

x = if y == 0 { loop {} } else { y % 42 };
if y < 0 { return 0; }

рдЬрдВрдЧ рдЕрдореВрд░реНрдд рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

if y == 0 { loop {} }
else if y < 0 { return 0; }
x = y % 42;

рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рд╢рд░реНрдд рдФрд░ рд▓реВрдк рдХреЛ рдЦрд╛рд░рд┐рдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд░рд╛рд▓реНрдл, рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕рдХрд╛ рдЖрдзрд╛ рдЬрд╛рдирдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ рдореИрдВ рдирдП рдЕрд░реНрде рдирд╣реАрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╢реБрджреНрдзрддрд╛ рдХреНрдпрд╛ рд╣реИ (рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдпрд╣ рд╕реЛрдЪрд╛ рдХрд┐ "рдЬрдм" рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рдЬреИрд╕реЗ: рдпрджрд┐ рдЖрдк рд▓реВрдк рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рдЧрд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдЧрд▓рддрддрд╛ рдХрд╛ рджрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛) ред рдореБрдЭреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд╛рде рд╡рд╣рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

@zackw рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдЕрд▓рдЧ рдХреЛрдб рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред

рд╡рд┐рднрд╛рдЬрди рдХреЗ рджреЛрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЫреЛрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рдЖрдзрд╛рд░ (рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ == рд▓реВрдк рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдмрд╛рдХреА рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

@olotenko рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ "рд▓реВрдк рдкрд░рд┐рдгрд╛рдо" рджреЗрдЦрдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдПрдХ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд▓реВрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╡рд┐рдЪрд▓рди рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдмрд╛рд╣рд░ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд▓реВрдк рдХреА рдЧрдгрдирд╛ рдХреНрдпрд╛ рдереА рдпрд╛ рдпрджрд┐ рд▓реВрдк рдХреЗ "рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреНрдпрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╡реИрд╕рд╛ рд╣реА рд░рд╣реЗред рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рдЕрд╡рд▓реЛрдХрдиреАрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП:

fn main() {
  loop {}
  println!("Hello");
}

рд▓реВрдк рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрднреА рднреА рдкреНрд░рд┐рдВрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдиреЗ рд▓реВрдк рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдпрд╛ рдкреНрд░рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рд▓реВрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рд╣реИ), рдЕрдЪрд╛рдирдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо "рд╣реИрд▓реЛ" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпреЗ рдЕрдиреБрдХреВрд▓рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЕрд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

@ рд░рд╛рд▓реНрдлрдЬрдВрдЧ рдпрд╣ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдЕрдм рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдореЗрд░реА рдореВрд▓ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ "рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА" рдХреА рднреВрдорд┐рдХрд╛ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдореЗрд░реА рдЧрд▓рддреА рдпрд╣ рдереА рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдХреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдП рдЧрдП рднрд╛рд╡ рд╣реИрдВред рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░ рдХреБрд▓ рд╣реИ, рддреЛ рдлреЙрд░рд╡рд░реНрдб рдкреНрд░реЛрдЧреНрд░реЗрд╕ рдЧрд╛рд░рдВрдЯреА рдХреЗ рдмрд┐рдирд╛ (рдЬрд┐рд╕реЗ рд╣рдо "рдкреНрд░реЛрдЧреНрд░рд╛рдо рдСрд░реНрдбрд░ рдХреЗ рдХрд┐рд╕реА рднреА рдЙрдк-рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдВрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ") рд╣рдо рдХреЗрд╡рд▓ (рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдСрд░реНрдбрд░ рдореЗрдВ) рд░реАрдСрд░реНрдбрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЗ рд░реВрдк рдореЗрдВ) рдХреБрдЫ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛, рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди, OS рдХреЙрд▓, IO, рдЖрджрд┐)ред

рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо "рджрд┐рдЦрд╛рд╡рд╛" рд╡рд┐рднрд╛рдЬрди x = y % 42 рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реБрдЖ, рднрд▓реЗ рд╣реА рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рд╣реЛ, рд▓реЗрдХрд┐рди рд╡рд╣реА рдХреНрдпреЛрдВ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЫреЛрд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреБрд▓ (рдХрд╛рд░реНрдпрдХреНрд░рдо) рдЖрджреЗрд╢ рдФрд░ рдЖрдВрд╢рд┐рдХ (рдирд┐рд╖реНрдкрд╛рджрди) рдЖрджреЗрд╢ рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡реНрдпрд╡рд╣рд╛рд░" рдЗрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рджреБрд░реНрдШрдЯрдирд╛ ("рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрд░реНрде рдореЗрдВ" рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛), рд▓реЗрдХрд┐рди рдПрдХ рдкреВрдВрдЫ-рдХреЙрд▓ рдЕрдиреБрдХреВрд▓рди рдЗрд╕реЗ рдПрдХ рдЧреИрд░-рд╕рдорд╛рдкреНрддрд┐ рд▓реВрдк рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдПрдХ рдФрд░ рдЪреАрдЬ рд╣реИ рдЬреЛ рд░рд╕реНрдЯ / рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрд╕ рдкреНрд░рд╢реНрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ (рдЬрдм рддрдХ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ)ред

рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ

рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИрдВ, рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ред рд╕реНрдореГрддрд┐ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдиред рдкрд╣рд▓реЗ рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рднреА рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЗ рдХрд╛рд░рдг рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ , рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрд╛рд░реА рд░рд╣ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕ рддрд░рд╣ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдиреБрдорд╛рдирд┐рдд рдзреНрд╡рдирд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдХреЗрд╡рд▓ (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХреНрд░рдо рдореЗрдВ) рдХреЗрд╡рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдорд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдмрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред Morevoer рдЙрдиреНрд╣реЗрдВ "рд╢реБрджреНрдз" рд╣реЛрдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ-рдлрд╝реНрд░реА - рдЖрдк рджреЛ println! рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ

рдбрд┐рд╡рд┐рдЬрд╝рди рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд╡рд┐рддреНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ 0 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп - рдЬреЛ рдПрдХ рдЖрддрдВрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рднрд╛рд╡ред рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ (рдЬреИрд╕реЗ рдХрд┐ рдкреИрдирд┐рдХ рд╣реИрдВрдбрд▓рд░ рд╕реНрдЯреИрдбрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдХреЗрд╡рд▓ рд╣рдо рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдо 0 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░рд╛ рдХреБрдЫ рдбреЗрдореЛ рдХреЛрдб рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдирдИ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб https://github.com/uglyoldbob/rust_demo рдкрд░ рдПрдХ git рд░реЗрдкреЛ рдореЗрдВ рд░рдЦрд╛

рдореЗрд░рд╛ рдЕрдирдВрдд рд▓реВрдк (рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде) рдмрд╛рд╣рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ рдФрд░ рдПрдХ рдЬрд╛рд▓ рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдпрд╛ рдХреБрдЫ рдФрд░ ... рдПрдореНрдмреЗрдбреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрди рд╕рднреА рдмрд╛рд╣рд░реА рдЯреЛрдХрд░рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреЛрдб рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред ^ ^ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдирд╣реАрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдпрд╣ рддреЛ рдореИрдВ рдХрд╣реЗрдВрдЧреЗ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдкрд╛рд╢ рдореЗрдВ рдПрдХ рдЕрд╕реНрдерд┐рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд╢ рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ (рдХреЛрдИ рднреА рдХрд┐рд╕реА рдЕрдиреНрдп рдзрд╛рдЧреЗ рд╕реЗ рдмрдЪ рдЧрдпрд╛)ред рдЗрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рд╕реНрдЯреЛрд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрд╡рд▓реЛрдХрдиреАрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдХреЛрдИ рднреА рд╕реНрдЯреЛрд░ рдЬреЛ рд╡реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрджрд┐ рдЬрдВрдЧ рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓реВрдк рдПрдХ рд╢реБрджреНрдз рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@uglyoldbob рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЕрдЧрд░ llvm-objdump рд╢рд╛рдирджрд╛рд░ рд░реВрдк рд╕реЗ рдЕрдирд╣реЗрд▓реНрдлрд╝ (рдФрд░ рдЧрд▓рдд) рдирд╣реАрдВ рд╣реЛ рд░рд╣реЗ рд╣реЛрддреЗред рд╡рд╣ bl #4 (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реИ) рдпрд╣рд╛рдБ bl рдЕрдиреБрджреЗрд╢ рдХреЗ рдЕрдВрдд рдХреЗ рдмрд╛рдж 4 рдмрд╛рдЗрдЯреНрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ, main рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдВрдд, рдЙрд░реНрдл рдЕрдЧрд▓реЗ рд╕рдорд╛рд░реЛрд╣ рдХреА рд╢реБрд░реБрдЖрддред рдЕрдЧрд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рдореИрдВ рдЗрд╕реЗ рдмрдирд╛рддрд╛ рд╣реВрдВ) _ZN11broken_loop18__cortex_m_rt_main17hbe300c9f0053d54dE , рдФрд░ рд╡рд╣ рдЖрдкрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ main рдлрд╝рдВрдХреНрд╢рди рд╣реИред Unmangled рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рд░реЛрд╣ main рдЖрдкрдХреЗ рд╕рдорд╛рд░реЛрд╣ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рдорд╛рд░реЛрд╣ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди #[entry] рдореИрдХреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА cortex-m-rt ред рдЖрдкрдХрд╛ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреВрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрдм рдЖрдк рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрдм рднреА рдЕрдиреБрдХреВрд▓рдХ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dnsl48 picture dnsl48  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eddyb picture eddyb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wthrowe picture wthrowe  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cuviper picture cuviper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pedrohjordao picture pedrohjordao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ