Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: runtime/vm/kernel_to_il.cc

Issue 2769313004: VM: [Kernel] Ensure that result of v.operator[]=(...) invocations is never used. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 8
9 #include "vm/kernel_to_il.h" 9 #include "vm/kernel_to_il.h"
10 10
(...skipping 4863 matching lines...) Expand 10 before | Expand all | Expand 10 after
4874 // If we have a special operation (e.g. +/-/==) we mark both arguments as 4874 // If we have a special operation (e.g. +/-/==) we mark both arguments as
4875 // to be checked. 4875 // to be checked.
4876 if (token_kind != Token::kILLEGAL) { 4876 if (token_kind != Token::kILLEGAL) {
4877 ASSERT(argument_count <= 2); 4877 ASSERT(argument_count <= 2);
4878 num_args_checked = argument_count; 4878 num_args_checked = argument_count;
4879 } 4879 }
4880 4880
4881 fragment_ = instructions + InstanceCall(node->position(), name, token_kind, 4881 fragment_ = instructions + InstanceCall(node->position(), name, token_kind,
4882 argument_count, argument_names, 4882 argument_count, argument_names,
4883 num_args_checked); 4883 num_args_checked);
4884 // Later optimization passes assume that result of a x.[]=(...) call is not
4885 // used. We must guarantee this invariant because violation will lead to an
4886 // illegal IL once we replace x.[]=(...) with a sequence that does not
4887 // actually produce any value. See http://dartbug.com/29135 for more details.
4888 if (name.raw() == Symbols::AssignIndexToken().raw()) {
4889 fragment_ += Drop();
4890 fragment_ += NullConstant();
4891 }
4884 } 4892 }
4885 4893
4886 4894
4887 void FlowGraphBuilder::VisitDirectMethodInvocation( 4895 void FlowGraphBuilder::VisitDirectMethodInvocation(
4888 DirectMethodInvocation* node) { 4896 DirectMethodInvocation* node) {
4889 const dart::String& method_name = H.DartProcedureName(node->target()); 4897 const dart::String& method_name = H.DartProcedureName(node->target());
4890 const Function& target = Function::ZoneHandle( 4898 const Function& target = Function::ZoneHandle(
4891 Z, LookupMethodByMember(node->target(), method_name)); 4899 Z, LookupMethodByMember(node->target(), method_name));
4892 4900
4893 intptr_t argument_count = node->arguments()->count() + 1; 4901 intptr_t argument_count = node->arguments()->count() + 1;
(...skipping 1549 matching lines...) Expand 10 before | Expand all | Expand 10 after
6443 thread->clear_sticky_error(); 6451 thread->clear_sticky_error();
6444 return error.raw(); 6452 return error.raw();
6445 } 6453 }
6446 } 6454 }
6447 6455
6448 6456
6449 } // namespace kernel 6457 } // namespace kernel
6450 } // namespace dart 6458 } // namespace dart
6451 6459
6452 #endif // !defined(DART_PRECOMPILED_RUNTIME) 6460 #endif // !defined(DART_PRECOMPILED_RUNTIME)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698