OSDN Git Service

Fix translator handling of basic block indices.
authorKarl Schimpf <kschimpf@google.com>
Thu, 6 Aug 2015 19:55:23 +0000 (12:55 -0700)
committerKarl Schimpf <kschimpf@google.com>
Thu, 6 Aug 2015 19:55:23 +0000 (12:55 -0700)
commitac7d73441e1c599108b20c4702a96db0e956889e
treec19d86d8f93dbce5ce603d16dce85621f400664c
parent2c862522bf373781c1345dfe1e7a257d6a12cd0a
Fix translator handling of basic block indices.

The code used to use a vector to hold basic blocks associated with
indices. This had two problem: 1) The "number of blocks" record would
generate a vector of the given size (even if very large); and 2)
Indices would expand the vector to define the index (even if very
large).

In most cases, such large values are incorrect. To fix this, this
patch uses a map from block index, to the corresponding basic block.
Only after all basic block indices have been processed, we check that
the size makes sense, and convert it to a vector.

BUG= https://code.google.com/p/nativeclient/issues/detail?id=4261
R=jpp@chromium.org, stichnot@chromium.org

Review URL: https://codereview.chromium.org/1275953002 .
src/IceCfg.cpp
src/IceCfg.h
src/IceDefs.h
src/IceGlobalContext.cpp
src/IceTargetLoweringX86Base.h
src/PNaClTranslator.cpp