Title: [221750] trunk/Tools
Revision
221750
Author
[email protected]
Date
2017-09-07 12:56:03 -0700 (Thu, 07 Sep 2017)

Log Message

WSL should check recursion
https://bugs.webkit.org/show_bug.cgi?id=176553

Reviewed by Michael Saboff and Mark Lam.
        
This adds a recursion checker. Previously, we would only check for recursion during inlining, but that
generally only happens when we call the function.

* WebGPUShadingLanguageRI/All.js:
* WebGPUShadingLanguageRI/CheckRecursion.js: Added.
(checkRecursion):
* WebGPUShadingLanguageRI/Prepare.js:
(prepare):
* WebGPUShadingLanguageRI/RecursionChecker.js: Added.
(RecursionChecker):
(RecursionChecker.prototype.visitFuncDef):
(RecursionChecker.prototype.visitCallExpression):
* WebGPUShadingLanguageRI/Test.html:
* WebGPUShadingLanguageRI/Test.js:
(TEST_simpleRecursion):

Modified Paths

Added Paths

Diff

Modified: trunk/Tools/ChangeLog (221749 => 221750)


--- trunk/Tools/ChangeLog	2017-09-07 19:51:58 UTC (rev 221749)
+++ trunk/Tools/ChangeLog	2017-09-07 19:56:03 UTC (rev 221750)
@@ -1,3 +1,26 @@
+2017-09-07  Filip Pizlo  <[email protected]>
+
+        WSL should check recursion
+        https://bugs.webkit.org/show_bug.cgi?id=176553
+
+        Reviewed by Michael Saboff and Mark Lam.
+        
+        This adds a recursion checker. Previously, we would only check for recursion during inlining, but that
+        generally only happens when we call the function.
+
+        * WebGPUShadingLanguageRI/All.js:
+        * WebGPUShadingLanguageRI/CheckRecursion.js: Added.
+        (checkRecursion):
+        * WebGPUShadingLanguageRI/Prepare.js:
+        (prepare):
+        * WebGPUShadingLanguageRI/RecursionChecker.js: Added.
+        (RecursionChecker):
+        (RecursionChecker.prototype.visitFuncDef):
+        (RecursionChecker.prototype.visitCallExpression):
+        * WebGPUShadingLanguageRI/Test.html:
+        * WebGPUShadingLanguageRI/Test.js:
+        (TEST_simpleRecursion):
+
 2017-09-07  Chris Dumez  <[email protected]>
 
         [WK2] Notify client when downloads are redirected

Modified: trunk/Tools/WebGPUShadingLanguageRI/All.js (221749 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/All.js	2017-09-07 19:51:58 UTC (rev 221749)
+++ trunk/Tools/WebGPUShadingLanguageRI/All.js	2017-09-07 19:56:03 UTC (rev 221750)
@@ -44,6 +44,7 @@
 load("CastExpression.js");
 load("Check.js");
 load("CheckLiteralTypes.js");
+load("CheckRecursion.js");
 load("CheckReturns.js");
 load("CheckUnreachableCode.js");
 load("Checker.js");
@@ -91,6 +92,7 @@
 load("ProtocolFuncDecl.js");
 load("ProtocolRef.js");
 load("PtrType.js");
+load("RecursionChecker.js");
 load("ResolveNames.js");
 load("ResolveOverloadImpl.js");
 load("ResolveTypeDefs.js");

Added: trunk/Tools/WebGPUShadingLanguageRI/CheckRecursion.js (0 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/CheckRecursion.js	                        (rev 0)
+++ trunk/Tools/WebGPUShadingLanguageRI/CheckRecursion.js	2017-09-07 19:56:03 UTC (rev 221750)
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+"use strict";
+
+function checkRecursion(program)
+{
+    program.visit(new RecursionChecker(program));
+}
+

Modified: trunk/Tools/WebGPUShadingLanguageRI/Prepare.js (221749 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/Prepare.js	2017-09-07 19:51:58 UTC (rev 221749)
+++ trunk/Tools/WebGPUShadingLanguageRI/Prepare.js	2017-09-07 19:56:03 UTC (rev 221750)
@@ -36,6 +36,7 @@
     checkLiteralTypes(program);
     checkReturns(program);
     checkUnreachableCode(program);
+    checkRecursion(program);
     inline(program);
     return program;
 }

Added: trunk/Tools/WebGPUShadingLanguageRI/RecursionChecker.js (0 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/RecursionChecker.js	                        (rev 0)
+++ trunk/Tools/WebGPUShadingLanguageRI/RecursionChecker.js	2017-09-07 19:56:03 UTC (rev 221750)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+"use strict";
+
+class RecursionChecker extends Visitor {
+    constructor()
+    {
+        super();
+        this._visiting = new VisitingSet();
+    }
+    
+    visitFuncDef(node)
+    {
+        this._visiting.doVisit(node, () => super.visitFuncDef(node));
+    }
+    
+    visitCallExpression(node)
+    {
+        node.func.visit(this);
+    }
+}

Modified: trunk/Tools/WebGPUShadingLanguageRI/Test.html (221749 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/Test.html	2017-09-07 19:51:58 UTC (rev 221749)
+++ trunk/Tools/WebGPUShadingLanguageRI/Test.html	2017-09-07 19:56:03 UTC (rev 221750)
@@ -20,6 +20,7 @@
 <script src=""
 <script src=""
 <script src=""
+<script src=""
 <script src=""
 <script src=""
 <script src=""
@@ -67,6 +68,7 @@
 <script src=""
 <script src=""
 <script src=""
+<script src=""
 <script src=""
 <script src=""
 <script src=""

Modified: trunk/Tools/WebGPUShadingLanguageRI/Test.js (221749 => 221750)


--- trunk/Tools/WebGPUShadingLanguageRI/Test.js	2017-09-07 19:51:58 UTC (rev 221749)
+++ trunk/Tools/WebGPUShadingLanguageRI/Test.js	2017-09-07 19:56:03 UTC (rev 221750)
@@ -989,6 +989,18 @@
     checkBool(program, callFunction(program, "foo", [], [makeBool(program, false)]), false);
 }
 
+function TEST_simpleRecursion()
+{
+    checkFail(
+        () => doPrep(`
+            void foo<T>(T x)
+            {
+                foo(&x);
+            }
+        `),
+        (e) => e instanceof WTypeError);
+}
+
 function TEST_protocolMonoSigPolyDef()
 {
     let program = doPrep(`
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to