about summary refs log tree commit diff
path: root/compiler/rustc_codegen_llvm/src
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2020-11-14 13:54:45 -0800
committerDavid Tolnay <dtolnay@gmail.com>2020-11-14 14:03:57 -0800
commitafb817054c7e95ef1cef879030062b67d5a2d5e3 (patch)
tree7ba709e5e10ee2ba71cc11512c3ca9119e69905e /compiler/rustc_codegen_llvm/src
parent98d66340d6e63eda115afc8b0da1d87965881936 (diff)
downloadrust-afb817054c7e95ef1cef879030062b67d5a2d5e3.tar.gz
rust-afb817054c7e95ef1cef879030062b67d5a2d5e3.zip
Move likely/unlikely argument outside of invisible unsafe block
The previous `likely!`/`unlikely!` macros were unsound because it
permits the caller's expr to contain arbitrary unsafe code.

    pub fn huh() -> bool {
        likely!(std::ptr::read(&() as *const () as *const bool))
    }

Before: compiles cleanly.
After:

    error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
       |
    70 |     likely!(std::ptr::read(&() as *const () as *const bool))
       |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
       |
       = note: consult the function's documentation for information on how to avoid undefined behavior
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions