Looks like 0.12 (I was running 3cd836c1d855b92e7c73ab31979f471c4f8dad68 ) is writing a "corrupt" block chain.
Steps to reproduce:
$ mkdir /tmp/dir2
$ ./bitcoin-qt-3cd836c-dirty -testnet -datadir=/tmp/dir2
$ ./bitcoin-0.11.2/bin/bitcoin-qt -testnet -datadir=/tmp/dir2 -debug -printtoconsole
[...]
init message: Verifying wallet...
CDBEnv::Open: LogDir=/tmp/dir2/testnet3/database ErrorFile=/tmp/dir2/testnet3/db.log
scheduler thread start
Bound to [::]:18333
Bound to 0.0.0.0:18333
Cache configuration:
* Using 2.0MiB for block index database
* Using 32.5MiB for chain state database
* Using 65.5MiB for in-memory UTXO set
init message: Loading block index...
Opening LevelDB in /tmp/dir2/testnet3/blocks/index
Opened LevelDB successfully
Opening LevelDB in /tmp/dir2/testnet3/chainstate
Opened LevelDB successfully
LoadBlockIndexDB: last block file = 0
LoadBlockIndexDB: last block file info: CBlockFileInfo(blocks=609, size=552976, heights=0...608, time=2011-02-02...2012-05-25)
Checking all blk files are present...
LoadBlockIndexDB: transaction index disabled
Initializing databases...
- Load block from disk: 0.06ms [0.00s]
bitcoin-qt: main.cpp:1836: bool ConnectBlock(const CBlock&, CValidationState&, CBlockIndex*, CCoinsViewCache&, bool): Assertion `hashPrevBlock == view.GetBestBlock()' failed.
Aborted (core dumped)