<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rust/src/test/codegen/non-terminate, branch 1.63.0</title>
<subtitle>https://github.com/rust-lang/rust
</subtitle>
<id>http://git.dreamy.place/mirrors/rust/atom?h=1.63.0</id>
<link rel='self' href='http://git.dreamy.place/mirrors/rust/atom?h=1.63.0'/>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/'/>
<updated>2021-10-22T17:50:07+00:00</updated>
<entry>
<title>Update the minimum external LLVM to 12</title>
<updated>2021-10-22T17:50:07+00:00</updated>
<author>
<name>Josh Stone</name>
<email>jistone@redhat.com</email>
</author>
<published>2021-10-22T17:50:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=e9f545b9a952f193dbe15730bcbe47784b6e7cde'/>
<id>urn:sha1:e9f545b9a952f193dbe15730bcbe47784b6e7cde</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Remove the -Zinsert-sideeffect</title>
<updated>2021-03-10T10:21:43+00:00</updated>
<author>
<name>Simonas Kazlauskas</name>
<email>git@kazlauskas.me</email>
</author>
<published>2021-03-07T23:59:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=0517acd54353869b2fbfc50af61ea7bd1fd309e0'/>
<id>urn:sha1:0517acd54353869b2fbfc50af61ea7bd1fd309e0</id>
<content type='text'>
This removes all of the code we had in place to work-around LLVM's
handling of forward progress. From this removal excluded is a workaround
where we'd insert a `sideeffect` into clearly infinite loops such as
`loop {}`. This code remains conditionally effective when the LLVM
version is earlier than 12.0, which fixed the forward progress related
miscompilations at their root.
</content>
</entry>
<entry>
<title>Gate llvm.sideeffect under -Z insert-sideeffect</title>
<updated>2019-09-27T23:13:53+00:00</updated>
<author>
<name>Xiang Fan</name>
<email>sfanxiang@gmail.com</email>
</author>
<published>2019-09-27T23:13:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=10c668190cb419b539a36214237382c6689f7daf'/>
<id>urn:sha1:10c668190cb419b539a36214237382c6689f7daf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add llvm.sideeffect to potential infinite loops and recursions</title>
<updated>2019-09-27T20:45:08+00:00</updated>
<author>
<name>Xiang Fan</name>
<email>sfanxiang@gmail.com</email>
</author>
<published>2019-06-06T00:39:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.dreamy.place/mirrors/rust/commit/?id=f71e0daa29b232d8f689f77fecb84dcb87fce6da'/>
<id>urn:sha1:f71e0daa29b232d8f689f77fecb84dcb87fce6da</id>
<content type='text'>
LLVM assumes that a thread will eventually cause side effect. This is
not true in Rust if a loop or recursion does nothing in its body,
causing undefined behavior even in common cases like `loop {}`.
Inserting llvm.sideeffect fixes the undefined behavior.

As a micro-optimization, only insert llvm.sideeffect when jumping back
in blocks or calling a function.

A patch for LLVM is expected to allow empty non-terminate code by
default and fix this issue from LLVM side.

https://github.com/rust-lang/rust/issues/28728
</content>
</entry>
</feed>
