<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>177218</bug_id>
          
          <creation_ts>2017-09-19 19:46:57 -0700</creation_ts>
          <short_desc>test262: test262/harness/assert-throws-early-referenceerror.js test failure</short_desc>
          <delta_ts>2019-06-17 11:34:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=197603</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>198821</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1350631</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-09-19 19:46:57 -0700</bug_when>
    <thetext>test262: test262/harness/assert-throws-early-referenceerror.js test failure

This is used by only a few tests. These tests look for &quot;Early Errors&quot; that are ReferenceErrors, not SyntaxErrors. And they must be thrown early (approximately parse time not evaluation).

For example, each of these would throw a ReferenceError without even executing the function:

    Function(&quot;1=1;&quot;)
    Function(&quot;function f() { 1=1; }&quot;)

The only cases of Early Error ReferenceErrors:
https://tc39.github.io/ecma262/#sec-update-expressions-static-semantics-early-errors
https://tc39.github.io/ecma262/#sec-assignment-operators-static-semantics-early-errors

And `Function(...)` is a case where early errors are reported. See step 19:
https://tc39.github.io/ecma262/#sec-createdynamicfunction

&gt; ...
&gt; 17. Let body be the result of parsing bodyText, interpreted as UTF-16 encoded Unicode text as described in 6.1.4, using goal as the goal symbol. Throw a SyntaxError exception if the parse fails.
&gt; 18. Let strict be ContainsUseStrict of body.
&gt; 19. If any static semantics errors are detected for parameters or body, throw a SyntaxError or a ReferenceError exception, depending on the type of the error. If strict is true, the Early Error rules for UniqueFormalParameters:FormalParameters are applied. Parsing and early error detection may be interweaved in an implementation-dependent manner.
&gt; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482593</commentid>
    <comment_count>1</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-11-28 12:49:11 -0800</bug_when>
    <thetext>Aside from the harness-level check, there appear to be 62 regular tests which are failing due to JSC&apos;s lack of early ReferenceErrors:

language/asi/S7.9_A5.7_T1.js
language/expressions/assignment/non-simple-target.js
language/expressions/assignment/target-boolean.js
language/expressions/assignment/target-cover-newtarget.js
language/expressions/assignment/target-cover-yieldexpr.js
language/expressions/assignment/target-newtarget.js
language/expressions/assignment/target-null.js
language/expressions/assignment/target-number.js
language/expressions/assignment/target-string.js
language/expressions/async-function/early-errors-expression-not-simple-assignment-target.js
language/expressions/async-generator/early-errors-expression-not-simple-assignment-target.js
language/expressions/await/early-errors-await-not-simple-assignment-target.js
language/expressions/compound-assignment/add-non-simple.js
language/expressions/compound-assignment/btws-and-non-simple.js
language/expressions/compound-assignment/btws-or-non-simple.js
language/expressions/compound-assignment/btws-xor-non-simple.js
language/expressions/compound-assignment/div-non-simple.js
language/expressions/compound-assignment/left-shift-non-simple.js
language/expressions/compound-assignment/mod-div-non-simple.js
language/expressions/compound-assignment/mult-non-simple.js
language/expressions/compound-assignment/right-shift-non-simple.js
language/expressions/compound-assignment/subtract-non-simple.js
language/expressions/compound-assignment/u-right-shift-non-simple.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-1-update-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-10-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-11-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-12-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-13-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-14-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-15-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-16-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-17-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-2-update-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-3-update-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-4-update-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-5-lhs-equals-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-6-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-7-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-8-lhs-assignment-operator-assignment-expression.js
language/expressions/dynamic-import/syntax/invalid/invalid-asssignmenttargettype-reference-error-9-lhs-assignment-operator-assignment-expression.js
language/expressions/postfix-decrement/non-simple.js
language/expressions/postfix-decrement/target-cover-newtarget.js
language/expressions/postfix-decrement/target-cover-yieldexpr.js
language/expressions/postfix-decrement/target-newtarget.js
language/expressions/postfix-increment/non-simple.js
language/expressions/postfix-increment/target-cover-newtarget.js
language/expressions/postfix-increment/target-cover-yieldexpr.js
language/expressions/postfix-increment/target-newtarget.js
language/expressions/prefix-decrement/non-simple.js
language/expressions/prefix-decrement/target-cover-newtarget.js
language/expressions/prefix-decrement/target-cover-yieldexpr.js
language/expressions/prefix-decrement/target-newtarget.js
language/expressions/prefix-increment/non-simple.js
language/expressions/prefix-increment/target-cover-newtarget.js
language/expressions/prefix-increment/target-cover-yieldexpr.js
language/expressions/prefix-increment/target-newtarget.js
language/expressions/this/S11.1.1_A1.js
language/module-code/parse-err-reference.js
language/types/boolean/S8.3_A2.1.js
language/types/boolean/S8.3_A2.2.js
language/types/reference/S8.7.2_A1_T1.js
language/types/reference/S8.7.2_A1_T2.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1533155</commentid>
    <comment_count>2</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-03 21:36:47 -0700</bug_when>
    <thetext>Update:

One way or another, we&apos;re still going to need to turn late errors into early errors for expressions like 0++, ++0, 0 = 0, and 0 += 0, but I&apos;ve decided to be the guy to propose removing the concept of &quot;early ReferenceError&quot; from the spec and simply having all early errors be SyntaxErrors. :D
https://github.com/tc39/ecma262/pull/1527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536880</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-05-16 12:40:36 -0700</bug_when>
    <thetext>Just to be explicit, I&apos;m leaving this bug open to track the aforementioned TC39 PR.

If it is accepted next month, we can just perform a test262 import here; otherwise we would need to address the lack of early ReferenceError at that time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545328</commentid>
    <comment_count>4</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-06-17 11:34:18 -0700</bug_when>
    <thetext>Woohoo -- spec update reached consensus and test262 has been updated to reflect it!</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>