The past few months have been super busy, and this is the first time I've had a chance to stop and really work on this code since September.
When last I was here, I was looking at a bad subreg of a symbol_ref expression. I had also backed out all the front end changes for some reason. All that code's going back.
The fix for the bad subreg is to defer action until the location of that symbol is known. The gen_lowpart_general function is called in a lot of compilation steps, so later on when we know if the symbol data is stored in a register or memory, we can determine the proper expression to use.