Revision: 16884
Author: [email protected]
Date: Mon Sep 23 13:05:18 2013 UTC
Log: Merged r16566, r16471 into 3.20 branch.
Fix polymorphic INTERCEPTOR StoreICs on ARM/MIPS
Representation of interceptor / handler properties are tagged. Otherwise
store ICs will never be initialized, due to lookup->CanHoldValue(value);
BUG=chromium:284998,chromium:256330
[email protected], [email protected]
Review URL: https://codereview.chromium.org/23480102
http://code.google.com/p/v8/source/detail?r=16884
Modified:
/branches/3.20/src/arm/stub-cache-arm.cc
/branches/3.20/src/mips/stub-cache-mips.cc
/branches/3.20/src/property.h
/branches/3.20/src/version.cc
/branches/3.20/test/cctest/test-api.cc
=======================================
--- /branches/3.20/src/arm/stub-cache-arm.cc Fri Jul 26 10:27:09 2013 UTC
+++ /branches/3.20/src/arm/stub-cache-arm.cc Mon Sep 23 13:05:18 2013 UTC
@@ -2890,7 +2890,7 @@
TailCallBuiltin(masm(), MissBuiltin(kind()));
// Return the generated code.
- return GetICCode(kind(), Code::INTERCEPTOR, name);
+ return GetCode(kind(), Code::INTERCEPTOR, name);
}
=======================================
--- /branches/3.20/src/mips/stub-cache-mips.cc Fri Jul 26 10:27:09 2013 UTC
+++ /branches/3.20/src/mips/stub-cache-mips.cc Mon Sep 23 13:05:18 2013 UTC
@@ -2934,7 +2934,7 @@
TailCallBuiltin(masm(), MissBuiltin(kind()));
// Return the generated code.
- return GetICCode(kind(), Code::INTERCEPTOR, name);
+ return GetCode(kind(), Code::INTERCEPTOR, name);
}
=======================================
--- /branches/3.20/src/property.h Mon Sep 23 11:53:24 2013 UTC
+++ /branches/3.20/src/property.h Mon Sep 23 13:05:18 2013 UTC
@@ -225,14 +225,14 @@
void HandlerResult(JSProxy* proxy) {
lookup_type_ = HANDLER_TYPE;
holder_ = proxy;
- details_ = PropertyDetails(NONE, HANDLER, Representation::None());
+ details_ = PropertyDetails(NONE, HANDLER, Representation::Tagged());
cacheable_ = false;
}
void InterceptorResult(JSObject* holder) {
lookup_type_ = INTERCEPTOR_TYPE;
holder_ = holder;
- details_ = PropertyDetails(NONE, INTERCEPTOR, Representation::None());
+ details_ = PropertyDetails(NONE, INTERCEPTOR,
Representation::Tagged());
}
void NotFound() {
=======================================
--- /branches/3.20/src/version.cc Mon Sep 23 11:53:24 2013 UTC
+++ /branches/3.20/src/version.cc Mon Sep 23 13:05:18 2013 UTC
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 20
#define BUILD_NUMBER 17
-#define PATCH_LEVEL 10
+#define PATCH_LEVEL 11
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0
=======================================
--- /branches/3.20/test/cctest/test-api.cc Mon Sep 23 11:53:24 2013 UTC
+++ /branches/3.20/test/cctest/test-api.cc Mon Sep 23 13:05:18 2013 UTC
@@ -20172,6 +20172,22 @@
CheckCorrectThrow("%DefineOrRedefineAccessorProperty("
"other, 'x', null, null, 1)");
}
+
+
+THREADED_TEST(Regress256330) {
+ i::FLAG_allow_natives_syntax = true;
+ LocalContext context;
+ v8::HandleScope scope(context->GetIsolate());
+ Handle<FunctionTemplate> templ = FunctionTemplate::New();
+ AddInterceptor(templ, EmptyInterceptorGetter, EmptyInterceptorSetter);
+ context->Global()->Set(v8_str("Bug"), templ->GetFunction());
+ CompileRun("\"use strict\"; var o = new Bug;"
+ "function f(o) { o.x = 10; };"
+ "f(o); f(o); f(o);"
+ "%OptimizeFunctionOnNextCall(f);"
+ "f(o);");
+ ExpectBoolean("%GetOptimizationStatus(f) != 2", true);
+}
#endif // WIN32
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.