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

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

Issue 1587293002: Prevent clang from doing tail-call elimination in DartEntry::InvokeClosure. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 "vm/dart_entry.h" 5 #include "vm/dart_entry.h"
6 6
7 #include "vm/class_finalizer.h" 7 #include "vm/class_finalizer.h"
8 #include "vm/code_generator.h" 8 #include "vm/code_generator.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 getter_arguments.SetAt(0, instance); 185 getter_arguments.SetAt(0, instance);
186 const Object& getter_result = 186 const Object& getter_result =
187 Object::Handle(DartEntry::InvokeFunction(function, 187 Object::Handle(DartEntry::InvokeFunction(function,
188 getter_arguments)); 188 getter_arguments));
189 if (getter_result.IsError()) { 189 if (getter_result.IsError()) {
190 return getter_result.raw(); 190 return getter_result.raw();
191 } 191 }
192 ASSERT(getter_result.IsNull() || getter_result.IsInstance()); 192 ASSERT(getter_result.IsNull() || getter_result.IsInstance());
193 193
194 arguments.SetAt(0, getter_result); 194 arguments.SetAt(0, getter_result);
195 return InvokeClosure(arguments, arguments_descriptor); 195 // This otherwise unnecessary handle is used to prevent clang from
Florian Schneider 2016/01/15 00:46:46 Should we only do this in simulator builds? i.e. #
rmacnak 2016/01/15 01:00:07 We need a stack overflow check for all configurati
196 // doing tail call elimination, which would make the stack overflow
197 // check above ineffective.
198 Object& result = Object::Handle(InvokeClosure(arguments,
199 arguments_descriptor));
200 return result.raw();
196 } 201 }
197 cls = cls.SuperClass(); 202 cls = cls.SuperClass();
198 } 203 }
199 } 204 }
200 205
201 // No compatible method or getter so invoke noSuchMethod. 206 // No compatible method or getter so invoke noSuchMethod.
202 return InvokeNoSuchMethod(instance, 207 return InvokeNoSuchMethod(instance,
203 Symbols::Call(), 208 Symbols::Call(),
204 arguments, 209 arguments,
205 arguments_descriptor); 210 arguments_descriptor);
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 const Array& args = Array::Handle(Array::New(kNumArguments)); 595 const Array& args = Array::Handle(Array::New(kNumArguments));
591 args.SetAt(0, map); 596 args.SetAt(0, map);
592 args.SetAt(1, key); 597 args.SetAt(1, key);
593 args.SetAt(2, value); 598 args.SetAt(2, value);
594 const Object& result = Object::Handle(DartEntry::InvokeFunction(function, 599 const Object& result = Object::Handle(DartEntry::InvokeFunction(function,
595 args)); 600 args));
596 return result.raw(); 601 return result.raw();
597 } 602 }
598 603
599 } // namespace dart 604 } // namespace dart
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