Jan. 14th, 2013

tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
This was one of those "do work, realize own work is misguided, undo work, collect paycheck" days. When I was working on #3979, I made the mistake of trying to clean up some bad copies as part of the same change. I made the mistake of thinking this would make it "simpler" to finish my change. Instead, I got the code to compile and got a completely mysterious type error when building libcore with stage 1.

So now I'm pulling out all my bad-copy fixes so I can just finish the fix for #3979, commit it, and then get to the bad copies. You'd think I'd have learned in third grade to only work on one thing at a time, but I didn't go to third grade.

I also finished my fix for #3860, and tested it, but have to do some cleanup before I submit a pull request. #3860 was a bug having to do with borrowck and trans (codegen) being inconsistent with each other, so fixing either one could address the problem. trans looked easier to change, so I changed it, but my change resulted in inserting lots more LLVM basic blocks, which turned out to be a performance regression. Changing borrowck really makes more sense since it's just refactoring a static analysis pass and shouldn't have any runtime effect, but I was afraid to touch the borrowck code before. I put aside my fear and implemented a mildly ugly hack (keeping a separate table for trans to use that gives borrowed pointers less-precise lifetimes, meaning trans doesn't have to assume a given statement has a scope attached to it), which worked. The part I have to clean up is making borrowck compute the table of which node IDs refer to statements -- rather than having region inference do it and pass it to borrowck -- which is totally straightforward.


tim: Tim with short hair, smiling, wearing a black jacket over a white T-shirt (Default)
Tim Chevalier

May 2017

78 910111213

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags