uninit blog post: update example so it still works with current rustc
authorRalf Jung <post@ralfj.de>
Sat, 6 Mar 2021 15:53:30 +0000 (16:53 +0100)
committerRalf Jung <post@ralfj.de>
Sat, 6 Mar 2021 15:53:30 +0000 (16:53 +0100)
personal/_posts/2019-07-14-uninit.md

index 7d056c7edc4e4d1fd2ef4602b57133333dd917c2..e6643ca5e62c6230cddb924dfbf10feb4fa142f5 100644 (file)
@@ -36,7 +36,7 @@ Here is an example to demonstrate why "random bit pattern" cannot describe unini
 use std::mem;
 
 fn always_returns_true(x: u8) -> bool {
 use std::mem;
 
 fn always_returns_true(x: u8) -> bool {
-    x < 150 || x > 120
+    x < 120 || x == 120 || x > 120
 }
 
 fn main() {
 }
 
 fn main() {
@@ -46,10 +46,10 @@ fn main() {
 {% endhighlight %}
 `always_returns_true` is a function that, clearly, will return `true` for any possible 8-bit unsigned integer.
 After all, *every* possible value for `x` will be less than 150 or bigger than 120.
 {% endhighlight %}
 `always_returns_true` is a function that, clearly, will return `true` for any possible 8-bit unsigned integer.
 After all, *every* possible value for `x` will be less than 150 or bigger than 120.
-A quick loop [confirms this](https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gist=58168009e601a2f01b08981f907a473c).
-However, if you [run the example](https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gist=da278adb50142d14909df74ea1e43069), you can see the assertion fail.[^godbolt]
+A quick loop [confirms this](https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gist=65b690fa3c1691e11d4d45955358cdbe).
+However, if you [run the example](https://play.rust-lang.org/?version=stable&mode=release&edition=2018&gist=812fe3c8655bfedcea37bb18bb70a945), you can see the assertion fail.[^godbolt]
 
 
-[^godbolt]: In case this changes with future Rust versions, [here is the same example on godbolt](https://godbolt.org/z/JX4B4N); the `xor eax, eax` indicates that the function returns 0, aka `false`. And [here is a version for C++](https://godbolt.org/z/PvZGQB); imagine calling `make_true(true)` which *should* always return `true` but as the assembly shows will return `false`.
+[^godbolt]: In case this changes with future Rust versions, [here is the same example on godbolt](https://godbolt.org/z/9G67hP); the `xor eax, eax` indicates that the function returns 0, aka `false`. And [here is a version for C++](https://godbolt.org/z/TWrvcq).
 
 ## What *is* uninitialized memory?
 
 
 ## What *is* uninitialized memory?