suspicious piece of code in RTS(Profiling.c) code
Edward Z. Yang
ezyang at mit.edu
Mon Jun 2 18:09:09 UTC 2014
That does seem pretty suspicious. My interpretation is that
ccs should just never be EMPTY_STACK. If we look at the calling
codepaths, the only case that a NULL could be passed is if
pushCostCentre is called with NULL ccs, but we only create these
invocations in code generation and never pass a NULL in such situations.
What I am not sure is if there is some special treatment for empty
stacks that should be happening, but is not, at the moment.
Excerpts from Ömer Sinan Ağacan's message of 2014-06-02 08:19:21 -0700:
> Hi all,
> I recently found a suspicious piece of code in RTS code.
> * https://github.com/ghc/ghc/blob/master/rts/Profiling.c#L622 here it's
> checking that ccs is not EMPTY_STACK.
> * https://github.com/ghc/ghc/blob/master/includes/rts/prof/CCS.h#L96 here
> EMPTY_STACK is defined as NULL.
> Now weird part is that before the if-statement checks for `ccs != NULL` ccs
> is used to reach some of it's fields(for example, line 601 and 602). As far
> as I can see either we have a bug here or the if-statement is not necessary
> and we can move it's body to top level.
> Am I missing anything here?
> Ömer Sinan Ağacan
More information about the ghc-devs