diff --git a/features.txt b/features.txt
index 63bd7d329280efadcbea6f08b75be3c806fde2d2..504c577c453e6111b7a2570debd074b232e26e02 100644
--- a/features.txt
+++ b/features.txt
@@ -131,6 +131,10 @@ globalThis
 # https://github.com/tc39/ecma262/pull/1174
 export-star-as-namespace-from-module
 
+# import.meta
+# https://github.com/tc39/proposal-import-meta
+import.meta
+
 # Standard language features
 #
 # Language features that have been included in a published version of the
diff --git a/test/language/expressions/import.meta/distinct-for-each-module.js b/test/language/expressions/import.meta/distinct-for-each-module.js
new file mode 100644
index 0000000000000000000000000000000000000000..e84c1e267b15d0695925500c2e841ff6ee45d880
--- /dev/null
+++ b/test/language/expressions/import.meta/distinct-for-each-module.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-meta-properties-runtime-semantics-evaluation
+description: >
+  The import.meta object is not shared across modules.
+info: |
+  Runtime Semantics: Evaluation
+
+   ImportMeta : import.meta
+
+    1. Let module be GetActiveScriptOrModule().
+    ...
+    3. Let importMeta be module.[[ImportMeta]].
+    4. If importMeta is undefined.
+        ...
+        f. Set module.[[ImportMeta]] to importMeta.
+        g. Return importMeta.
+    ...
+flags: [module]
+features: [import.meta]
+---*/
+
+import {meta as fixture_meta, getMeta} from "./distinct-for-each-module_FIXTURE.js";
+
+// The imported module has a distinct import.meta object.
+assert.notSameValue(import.meta, fixture_meta,
+                    "foreign import.meta accessed via import binding");
+assert.notSameValue(import.meta, getMeta(),
+                    "foreign import.meta accessed via function call");
+
+// Calling a function which returns import.meta returns the import.meta object
+// from the module in which the function is declared.
+assert.sameValue(fixture_meta, getMeta(),
+                 "import.meta accessed via import binding is identical to the one accessed via call");
diff --git a/test/language/expressions/import.meta/distinct-for-each-module_FIXTURE.js b/test/language/expressions/import.meta/distinct-for-each-module_FIXTURE.js
new file mode 100644
index 0000000000000000000000000000000000000000..92b4b28b18abc43e86be0f8b821a8d524741817c
--- /dev/null
+++ b/test/language/expressions/import.meta/distinct-for-each-module_FIXTURE.js
@@ -0,0 +1,8 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+export var meta = import.meta;
+
+export function getMeta() {
+    return import.meta;
+}
diff --git a/test/language/expressions/import.meta/import-meta-is-an-ordinary-object.js b/test/language/expressions/import.meta/import-meta-is-an-ordinary-object.js
new file mode 100644
index 0000000000000000000000000000000000000000..121cf845211dd87987d50af832a77ad310a7c679
--- /dev/null
+++ b/test/language/expressions/import.meta/import-meta-is-an-ordinary-object.js
@@ -0,0 +1,77 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-meta-properties-runtime-semantics-evaluation
+description: >
+  import.meta is an ordinary object.
+info: |
+  Runtime Semantics: Evaluation
+
+   ImportMeta : import.meta
+
+    ...
+    4. If importMeta is undefined.
+        a. Set importMeta to ObjectCreate(null).
+        b. Let importMetaValues be ! HostGetImportMetaProperties(module).
+        ...
+        e. Perform ! HostFinalizeImportMeta(importMeta, module).
+        ...
+        g. Return importMeta.
+    ...
+flags: [module]
+features: [import.meta]
+---*/
+
+// import.meta is an object.
+assert.sameValue(typeof import.meta, "object",
+                 "typeof import.meta is 'object'");
+assert.notSameValue(import.meta, null,
+                    "typeof import.meta is 'object' and import.meta isn't |null|.");
+
+assert.throws(TypeError, function() {
+    import.meta();
+}, "import.meta is not callable");
+
+assert.throws(TypeError, function() {
+    new import.meta();
+}, "import.meta is not a constructor");
+
+// Note: The properties, the shape of the properties, the extensibility state, and the prototype
+//       of import.meta are implementation-defined via HostGetImportMetaProperties and
+//       HostFinalizeImportMeta.
+
+// Properties and the prototype can only be modified when import.meta is extensible.
+if (Object.isExtensible(import.meta)) {
+    assert.sameValue(Object.getOwnPropertyDescriptor(import.meta, "test262prop"), undefined,
+                     "test262 test property is not present initially");
+
+    import.meta.test262prop = "blubb";
+
+    assert.sameValue(import.meta.test262prop, "blubb",
+                     "Properties can be added and retrieved from import.meta");
+
+    assert.sameValue(delete import.meta.test262prop, true,
+                     "Properties can be removed from import.meta");
+
+    assert.sameValue(Object.getOwnPropertyDescriptor(import.meta, "test262prop"), undefined,
+                     "test262 test property is no longer present");
+
+    var proto = {};
+    Object.setPrototypeOf(import.meta, proto);
+
+    assert.sameValue(Object.getPrototypeOf(import.meta), proto,
+                     "[[Prototype]] of import.meta can be changed");
+}
+
+Object.preventExtensions(import.meta);
+assert.sameValue(Object.isExtensible(import.meta), false,
+                 "import.meta is non-extensible after calling |Object.preventExtensions|");
+
+Object.seal(import.meta);
+assert.sameValue(Object.isSealed(import.meta), true,
+                 "import.meta is sealed after calling |Object.seal|");
+
+Object.freeze(import.meta);
+assert.sameValue(Object.isFrozen(import.meta), true,
+                 "import.meta is frozen after calling |Object.freeze|");
diff --git a/test/language/expressions/import.meta/not-accessible-from-direct-eval.js b/test/language/expressions/import.meta/not-accessible-from-direct-eval.js
new file mode 100644
index 0000000000000000000000000000000000000000..299fd6dd90726b7c1ecf14107c8020191ceca35a
--- /dev/null
+++ b/test/language/expressions/import.meta/not-accessible-from-direct-eval.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  import.meta is not allowed in direct eval in module code.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+flags: [module]
+features: [import.meta]
+---*/
+
+assert.throws(SyntaxError, function() {
+    eval("import.meta");
+});
diff --git a/test/language/expressions/import.meta/same-object-returned.js b/test/language/expressions/import.meta/same-object-returned.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bb52b5643ec302dee43b55e2805fe4562ae78f5
--- /dev/null
+++ b/test/language/expressions/import.meta/same-object-returned.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-meta-properties-runtime-semantics-evaluation
+description: >
+  The same import.meta object is returned for a module.
+info: |
+  Runtime Semantics: Evaluation
+
+   ImportMeta : import.meta
+
+    1. Let module be GetActiveScriptOrModule().
+    ...
+    3. Let importMeta be module.[[ImportMeta]].
+    4. If importMeta is undefined.
+        ...
+        f. Set module.[[ImportMeta]] to importMeta.
+        g. Return importMeta.
+    5. Else,
+        a. Assert: Type(importMeta) is Object.
+        b. Return importMeta.
+flags: [module]
+features: [import.meta]
+---*/
+
+var a = import.meta;
+var b = function() { return import.meta; }();
+
+assert.sameValue(import.meta, a,
+                 "import.meta accessed directly and accessed via variable declaration");
+
+assert.sameValue(import.meta, b,
+                 "import.meta accessed directly and accessed via function return value");
diff --git a/test/language/expressions/import.meta/syntax/escape-sequence-import.js b/test/language/expressions/import.meta/syntax/escape-sequence-import.js
new file mode 100644
index 0000000000000000000000000000000000000000..928e5b994fbe1db4ac4ad03b7d6f9ff9215fee9a
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/escape-sequence-import.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions
+description: >
+  "import" in import.meta must not contain escape sequences.
+info: |
+  5.1.5 Grammar Notation
+
+  Terminal symbols of the lexical, RegExp, and numeric string grammars are shown in fixed width
+  font, both in the productions of the grammars and throughout this specification whenever the
+  text directly refers to such a terminal symbol. These are to appear in a script exactly as
+  written. All terminal symbol code points specified in this way are to be understood as the
+  appropriate Unicode code points from the Basic Latin range, as opposed to any similar-looking
+  code points from other Unicode ranges.
+
+  12.3 Left-Hand-Side Expressions
+    MetaProperty:
+      NewTarget
+      ImportMeta
+
+    ImportMeta:
+      import.meta
+flags: [module]
+negative:
+  phase: parse
+  type: SyntaxError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+im\u0070ort.meta;
diff --git a/test/language/expressions/import.meta/syntax/escape-sequence-meta.js b/test/language/expressions/import.meta/syntax/escape-sequence-meta.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f2638646d5b98a5d537999e5f410ea0dfb1cfda
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/escape-sequence-meta.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions
+description: >
+  "meta" in import.meta must not contain escape sequences.
+info: |
+  5.1.5 Grammar Notation
+
+  Terminal symbols of the lexical, RegExp, and numeric string grammars are shown in fixed width
+  font, both in the productions of the grammars and throughout this specification whenever the
+  text directly refers to such a terminal symbol. These are to appear in a script exactly as
+  written. All terminal symbol code points specified in this way are to be understood as the
+  appropriate Unicode code points from the Basic Latin range, as opposed to any similar-looking
+  code points from other Unicode ranges.
+
+  12.3 Left-Hand-Side Expressions
+    MetaProperty:
+      NewTarget
+      ImportMeta
+
+    ImportMeta:
+      import.meta
+flags: [module]
+negative:
+  phase: parse
+  type: SyntaxError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import.m\u0065ta;
diff --git a/test/language/expressions/import.meta/syntax/goal-async-function-params-or-body.js b/test/language/expressions/import.meta/syntax/goal-async-function-params-or-body.js
new file mode 100644
index 0000000000000000000000000000000000000000..782c94c322cedf24dcbf3b9ac4ad1135733c1d84
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-async-function-params-or-body.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  An Syntax Error is thrown when the syntactic goal symbol is AsyncFunctionBody or FormalParameters.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+features: [import.meta, async-functions]
+---*/
+
+var AsyncFunction = async function(){}.constructor;
+
+assert.throws(SyntaxError, function() {
+    AsyncFunction("import.meta");
+}, "import.meta in AsyncFunctionBody");
+
+assert.throws(SyntaxError, function() {
+    AsyncFunction("a = import.meta", "");
+}, "import.meta in FormalParameters");
diff --git a/test/language/expressions/import.meta/syntax/goal-async-generator-params-or-body.js b/test/language/expressions/import.meta/syntax/goal-async-generator-params-or-body.js
new file mode 100644
index 0000000000000000000000000000000000000000..47018f13f6cefb8e358648e09081201323356b1a
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-async-generator-params-or-body.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  An Syntax Error is thrown when the syntactic goal symbol is AsyncGeneratorBody or FormalParameters.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+features: [import.meta, async-iteration]
+---*/
+
+var AsyncGenerator = async function*(){}.constructor;
+
+assert.throws(SyntaxError, function() {
+    AsyncGenerator("import.meta");
+}, "import.meta in AsyncGeneratorBody");
+
+assert.throws(SyntaxError, function() {
+    AsyncGenerator("a = import.meta", "");
+}, "import.meta in FormalParameters");
diff --git a/test/language/expressions/import.meta/syntax/goal-function-params-or-body.js b/test/language/expressions/import.meta/syntax/goal-function-params-or-body.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1030b61a8e99dda7b28806a3b449a7cf6d61075
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-function-params-or-body.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  An Syntax Error is thrown when the syntactic goal symbol is FunctionBody or FormalParameters.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+features: [import.meta]
+---*/
+
+assert.throws(SyntaxError, function() {
+    Function("import.meta");
+}, "import.meta in FunctionBody");
+
+assert.throws(SyntaxError, function() {
+    Function("a = import.meta", "");
+}, "import.meta in FormalParameters");
diff --git a/test/language/expressions/import.meta/syntax/goal-generator-params-or-body.js b/test/language/expressions/import.meta/syntax/goal-generator-params-or-body.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac31a38140939c1d45f07ba15656af7f76e8f9ab
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-generator-params-or-body.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  An Syntax Error is thrown when the syntactic goal symbol is GeneratorBody or FormalParameters.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+features: [import.meta, generators]
+---*/
+
+var Generator = function*(){}.constructor;
+
+assert.throws(SyntaxError, function() {
+    Generator("import.meta");
+}, "import.meta in GeneratorBody");
+
+assert.throws(SyntaxError, function() {
+    Generator("a = import.meta", "");
+}, "import.meta in FormalParameters");
diff --git a/test/language/expressions/import.meta/syntax/goal-module-nested-function.js b/test/language/expressions/import.meta/syntax/goal-module-nested-function.js
new file mode 100644
index 0000000000000000000000000000000000000000..f698e78d48d992f8bf7f88a8abdcc71e0ffd055f
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-module-nested-function.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  No SyntaxError is thrown when import.meta appears in nested functions in module scripts.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+flags: [module]
+features: [import.meta]
+---*/
+
+function f() {
+  import.meta;
+}
diff --git a/test/language/expressions/import.meta/syntax/goal-module.js b/test/language/expressions/import.meta/syntax/goal-module.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f5db47e1ef52ebda3731706156be5f2c1080f4c
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-module.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  No early Syntax Error is thrown when the syntactic goal symbol is Module.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+flags: [module]
+features: [import.meta]
+---*/
+
+import.meta;
diff --git a/test/language/expressions/import.meta/syntax/goal-script.js b/test/language/expressions/import.meta/syntax/goal-script.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f71123a772fb95bc55484b480ed411347c7a562
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/goal-script.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-left-hand-side-expressions-static-semantics-early-errors
+description: >
+  An early Syntax Error is thrown when the syntactic goal symbol is Script.
+info: |
+  It is an early Syntax Error if Module is not the syntactic goal symbol.
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import.meta;
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-destructuring-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-destructuring-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..e21a7a5c81c478d453844e6e58d1b0e7d094c9da
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-destructuring-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.15.5.1 Static Semantics: Early Errors
+
+    DestructuringAssignmentTarget : LeftHandSideExpression
+
+    It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral
+    and AssignmentTargetType(LeftHandSideExpression) is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta, destructuring-assignment]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+[import.meta] = [];
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-rest-destructuring-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-rest-destructuring-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..f854167751d0a4aee19d5ca7507885418ca3fa2a
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-array-rest-destructuring-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.15.5.1 Static Semantics: Early Errors
+
+    DestructuringAssignmentTarget : LeftHandSideExpression
+
+    It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral
+    and AssignmentTargetType(LeftHandSideExpression) is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta, destructuring-assignment]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+[...import.meta] = [];
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-assignment-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-assignment-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7032044d9104484c8e67868805cdcd8c648b057
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-assignment-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.15.1 Static Semantics: Early Errors
+
+    AssignmentExpression : LeftHandSideExpression = AssignmentExpression
+
+    It is an early Reference Error if LeftHandSideExpression is neither an ObjectLiteral nor an
+    ArrayLiteral and AssignmentTargetType of LeftHandSideExpression is invalid.
+flags: [module]
+negative:
+  phase: early
+  type: ReferenceError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import.meta = 0;
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-await-of-loop.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-await-of-loop.js
new file mode 100644
index 0000000000000000000000000000000000000000..f171c344eff5cf1d087efa4d796ef975be1534b7
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-await-of-loop.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  13.7.5.1 Static Semantics: Early Errors
+    IterationStatement:
+      for await ( LeftHandSideExpression of AssignmentExpression ) Statement
+
+    It is a Syntax Error if AssignmentTargetType of LeftHandSideExpression is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta, async-iteration]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+async function* f() {
+    for await (import.meta of null) ;
+}
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-in-loop.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-in-loop.js
new file mode 100644
index 0000000000000000000000000000000000000000..d463a030ee1e1ecca4bca3f780ba31e6918f8a94
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-in-loop.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  13.7.5.1 Static Semantics: Early Errors
+    IterationStatement:
+      for ( LeftHandSideExpression in Expression ) Statement
+
+    It is a Syntax Error if AssignmentTargetType of LeftHandSideExpression is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+for (import.meta in null) ;
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-of-loop.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-of-loop.js
new file mode 100644
index 0000000000000000000000000000000000000000..c921e9853bf7aff0a929c6faa0b03ebb821e348f
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-for-of-loop.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  13.7.5.1 Static Semantics: Early Errors
+    IterationStatement:
+      for ( LeftHandSideExpression of AssignmentExpression ) Statement
+
+    It is a Syntax Error if AssignmentTargetType of LeftHandSideExpression is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+for (import.meta of null) ;
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-destructuring-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-destructuring-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..9fad1e15b36ad6f0de3a048230af0b6d52ea45d2
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-destructuring-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.15.5.1 Static Semantics: Early Errors
+
+    DestructuringAssignmentTarget : LeftHandSideExpression
+
+    It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral
+    and AssignmentTargetType(LeftHandSideExpression) is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta, destructuring-assignment]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+({a: import.meta} = {});
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-rest-destructuring-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-rest-destructuring-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd9f4a9eab68c0360151de2701a50371468720c2
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-object-rest-destructuring-expr.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.15.5.1 Static Semantics: Early Errors
+
+    DestructuringAssignmentTarget : LeftHandSideExpression
+
+    It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral nor an ArrayLiteral
+    and AssignmentTargetType(LeftHandSideExpression) is not simple.
+flags: [module]
+negative:
+  phase: early
+  type: SyntaxError
+features: [import.meta, destructuring-assignment, object-rest]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+({...import.meta} = {});
diff --git a/test/language/expressions/import.meta/syntax/invalid-assignment-target-update-expr.js b/test/language/expressions/import.meta/syntax/invalid-assignment-target-update-expr.js
new file mode 100644
index 0000000000000000000000000000000000000000..3cd7213d02debd3c1d77b3bf10c15a7f9ed156e8
--- /dev/null
+++ b/test/language/expressions/import.meta/syntax/invalid-assignment-target-update-expr.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-static-semantics-static-semantics-assignmenttargettype
+description: >
+  import.meta is not a valid assignment target.
+info: |
+  Static Semantics: AssignmentTargetType
+
+    ImportMeta:
+      import.meta
+
+    Return invalid.
+
+  12.4.1 Static Semantics: Early Errors
+
+    UpdateExpression:
+      LeftHandSideExpression++
+      LeftHandSideExpression--
+
+    It is an early Reference Error if AssignmentTargetType of LeftHandSideExpression is invalid.
+flags: [module]
+negative:
+  phase: early
+  type: ReferenceError
+features: [import.meta]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+import.meta++;