BT

New Early adopter or innovator? InfoQ has been working on some new features for you. Learn more

Two More Major Bugs Revealed in .NET 4.6's RyuJIT Compiler

| by Jeff Martin on Jul 31, 2015. Estimated reading time: 1 minute |

Two more significant bugs have been found in .NET 4.6's RyuJIT compiler.  The first has been documented by developer Andrey Akinshin who has provided proof-of-concept code written in C# to explain the matter.  Akinshin’s work was sparked by a comment on StackOverflow from user “BrandonAGr”. 

Akinshin’s examples use nullable Booleans to show how the assembly generated by RyuJIT is incorrect when it attempts to generated optimized code.  What is distressing about the results of the example is that the first time it is executed it produces an incorrect result but not the second.  Akinshin concludes that “…[i]t seems that there is a tricky RyuJIT optimization bug which depends on big amount of additional conditions: any changes of the source code spoil reproducibility.”

Fortunately a fix for this error has been committed by Microsoft developer “schellap”.  However, as noted in this week’s earlier advisory, no binary patches have been released.  Users are expressing their frustration and concern over the state of RyuJIT in its current form.  User “EasmoneNerbonne” says that based on this reported bug, “…it looks like holding off on [RyuJIT] in general for a while looks like better advice than merely disabling tail calls”.  Akinshin agrees and user Daniel Marbach adds that “… there needs to be an update on the existing blog post and a general announcement which clearly says: DO NOT USE IN PRODUCTION.”  (Emphasis present in the original.)

The second bug has been reported by GitHub user Hyunho Richard Lee who has provided example code written in F# to demonstrate what should be a properly running program instead is producing errors (specifically FatalExecutionEngineError.)  Lee claims that installing .NET 4.6 RC will break F# programs that work correctly when targeting F# 3.1 on .NET 4.5.1 (or 4.5 or 4.5.2).

Lee’s explanation for F# developers is summarized as follows:

All current F# developers that have Seq.distinct on a Seq of KeyValuePair anywhere in their code must either control the environment that their code is deployed into so that .NET 4.6 is not installed OR they must immediately retarget all of their projects and immediately redeploy these projects.

 Microsoft developer sivarv has indicated that a fix has been committed, but as noted above, no binary release date has yet to be publicized.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and dont miss out on content that matters to you

BT