[GHC] #14619: Output value of program changes upon compiling with -O optimizations
GHC
ghc-devs at haskell.org
Tue Dec 26 16:05:23 UTC 2017
#14619: Output value of program changes upon compiling with -O optimizations
-------------------------------------+-------------------------------------
Reporter: sheaf | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Windows
Architecture: x86_64 | Type of failure: Incorrect result
(amd64) | at runtime
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The optimisation pass seems to affect the behaviour of the attached
program (a basic ray-sphere intersection test, 40 lines long, no
dependencies).
Specifically, compiling the attached source file with -O or -O2, and
considering the definition of main:
{{{#!hs
result = sphereIntersection testRay testSphere
main :: IO()
main = do
print $ result
print $ sphereIntersection testRay testSphere
}}}
I get the troubling output:
{{{
> bug.exe
Just ((0.0,0.0,0.0),0.0)
Just ((0.0,0.0,100.0),1.0)
}}}
This is especially troubling because the second component of the output
should always be 1.0:
{{{#!hs
testRay = ((0, 0, 0),(0, 0, 1))
sphereIntersection (orig, dir@(_, _, dirz)) (c,r)
| disc < 0 = Nothing
| t1 > 0 = Just (t1 *> dir <+> orig, dirz)
| t2 > 0 = Just (t2 *> dir <+> orig, dirz)
| otherwise = Nothing
where ...
}}}
as we are returning the "dirz" component of the input ray straight back
out.
On the other hand, when the program is run without optimisations, I get
the expected output:
{{{
> bug.exe
Just ((0.0,0.0,100.0),1.0)
Just ((0.0,0.0,100.0),1.0)
}}}
This behaviour was present on all versions of GHC that I tested (7.10.1,
8.0.1, 8.2.1, 8.2.2). I initially ran into this issue when I noticed that
the profiling builds of my program produced different results, which was
boiled down to this problem.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14619>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list