summaryrefslogtreecommitdiff
path: root/compiler/optimizing/graph_visualizer.cc
diff options
context:
space:
mode:
authorRoland Levillain <rpl@google.com>2015-04-24 16:43:49 +0100
committerRoland Levillain <rpl@google.com>2015-04-24 16:43:49 +0100
commit4c0eb42259d790fddcd9978b66328dbb3ab65615 (patch)
tree9d1ac505dfd4d0225f479d860b72a58747c8f6ce /compiler/optimizing/graph_visualizer.cc
parent223f2f5b2a20ca8246da1523494900a2424d5956 (diff)
Ensure inlined static calls perform clinit checks in Optimizing.
Calls to static methods have implicit class initialization (clinit) checks of the method's declaring class in Optimizing. However, when such a static call is inlined, the implicit clinit check vanishes, possibly leading to an incorrect behavior. To ensure that inlining static methods does not change the behavior of a program, add explicit class initialization checks (art::HClinitCheck) as well as load class instructions (art::HLoadClass) as last input of static calls (art::HInvokeStaticOrDirect) in Optimizing' control flow graphs, when the declaring class is reachable and not known to be already initialized. Then when considering the inlining of a static method call, proceed only if the method has no implicit clinit check requirement. The added explicit clinit checks are already removed by the art::PrepareForRegisterAllocation visitor. This CL also extends this visitor to turn explicit clinit checks from static invokes into implicit ones after the inlining step, by removing the added art::HLoadClass nodes mentioned hereinbefore. Change-Id: I9ba452b8bd09ae1fdd9a3797ef556e3e7e19c651
Diffstat (limited to 'compiler/optimizing/graph_visualizer.cc')
0 files changed, 0 insertions, 0 deletions