[B3] REGRESSION(r195395): testComplex(64, 128) asserts on Linux with GCC
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 Jan 2016 05:37:44 +0000 (05:37 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 29 Jan 2016 05:37:44 +0000 (05:37 +0000)
https://bugs.webkit.org/show_bug.cgi?id=153422

Reviewed by Filip Pizlo.

Previously proc.values() returns ValuesCollection (Not reference!).
values.values takes const ValueCollection&.
And later it produces IndexSet<Value>::Iterable<Procedure::ValuesCollection>,
it holds const ValueCollection& as its member.
But IndexSet<Value>::Iterable<Procedure::ValuesCollection> is just an instance.
So after creating this, the lifetime of the ValueCollection const reference finished.

To fix that, we hold ValuesCollection as a member of Procedure.
And change the signature to const ValuesCollection& Procedure::values().

* b3/B3Procedure.cpp:
(JSC::B3::Procedure::Procedure):
* b3/B3Procedure.h:
(JSC::B3::Procedure::values):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195800 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/b3/B3Procedure.cpp
Source/JavaScriptCore/b3/B3Procedure.h

index 9af2d98..3b1c750 100644 (file)
@@ -1,3 +1,25 @@
+2016-01-28  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        [B3] REGRESSION(r195395): testComplex(64, 128) asserts on Linux with GCC
+        https://bugs.webkit.org/show_bug.cgi?id=153422
+
+        Reviewed by Filip Pizlo.
+
+        Previously proc.values() returns ValuesCollection (Not reference!).
+        values.values takes const ValueCollection&.
+        And later it produces IndexSet<Value>::Iterable<Procedure::ValuesCollection>,
+        it holds const ValueCollection& as its member.
+        But IndexSet<Value>::Iterable<Procedure::ValuesCollection> is just an instance.
+        So after creating this, the lifetime of the ValueCollection const reference finished.
+
+        To fix that, we hold ValuesCollection as a member of Procedure.
+        And change the signature to const ValuesCollection& Procedure::values().
+
+        * b3/B3Procedure.cpp:
+        (JSC::B3::Procedure::Procedure):
+        * b3/B3Procedure.h:
+        (JSC::B3::Procedure::values):
+
 2016-01-28  Joseph Pecoraro  <pecoraro@apple.com>
 
         Web Inspector: InspectorTimelineAgent doesn't need to recompile functions because it now uses the sampling profiler
index 3502486..7debaed 100644 (file)
@@ -46,6 +46,7 @@ Procedure::Procedure()
     , m_lastPhaseName("initial")
     , m_byproducts(std::make_unique<OpaqueByproducts>())
     , m_code(new Air::Code(*this))
+    , m_valuesCollection(*this)
 {
 }
 
index c76e7f1..2557302 100644 (file)
@@ -312,7 +312,7 @@ public:
         const Procedure& m_procedure;
     };
 
-    ValuesCollection values() const { return ValuesCollection(*this); }
+    const ValuesCollection& values() const { return m_valuesCollection; }
 
     void deleteValue(Value*);
 
@@ -382,6 +382,7 @@ private:
     std::unique_ptr<Air::Code> m_code;
     RefPtr<SharedTask<void(PrintStream&, Origin)>> m_originPrinter;
     const void* m_frontendData;
+    ValuesCollection m_valuesCollection;
 };
 
 } } // namespace JSC::B3