diff --git a/test/mjsunit/es6/regexp-flags.js b/test/mjsunit/es6/regexp-flags.js
new file mode 100644
index 0000000..79b0197
--- /dev/null
+++ b/test/mjsunit/es6/regexp-flags.js
@@ -0,0 +1,66 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-regexps --harmony-unicode-regexps
+
+var r1 = /abc/gi;
+assertEquals("abc", r1.source);
+assertTrue(r1.global);
+assertTrue(r1.ignoreCase);
+assertFalse(r1.multiline);
+assertFalse(r1.sticky);
+assertFalse(r1.unicode);
+
+// Internal slot of prototype is not read.
+var r2 = { __proto__: r1 };
+assertThrows(function() { r2.source; }, TypeError);
+assertThrows(function() { r2.global; }, TypeError);
+assertThrows(function() { r2.ignoreCase; }, TypeError);
+assertThrows(function() { r2.multiline; }, TypeError);
+assertThrows(function() { r2.sticky; }, TypeError);
+assertThrows(function() { r2.unicode; }, TypeError);
+
+var r3 = /I/;
+var string = "iIiIi";
+var expected = "iXiIi";
+assertFalse(r3.global);
+assertFalse(r3.ignoreCase);
+assertEquals("", r3.flags);
+assertEquals(expected, string.replace(r3, "X"));
+
+var get_count = 0;
+Object.defineProperty(r3, "global", {
+  get: function() { get_count++; return true; }
+});
+Object.defineProperty(r3, "ignoreCase", {
+  get: function() { get_count++; return true; }
+});
+
+assertTrue(r3.global);
+assertEquals(1, get_count);
+assertTrue(r3.ignoreCase);
+assertEquals(2, get_count);
+// Overridden flag getters affects the flags getter.
+assertEquals("gi", r3.flags);
+assertEquals(4, get_count);
+// Overridden flag getters do not affect the internal flags.
+assertEquals(expected, string.replace(r3, "X"));
+assertEquals(4, get_count);
+
+
+function testName(name) {
+  // TODO(littledan): For web compatibility, we don't throw an exception,
+  // but ES2015 expects an exception to be thrown from this getter.
+  assertEquals(undefined, RegExp.prototype[name]);
+  assertEquals(
+      "get " + name,
+      Object.getOwnPropertyDescriptor(RegExp.prototype, name).get.name);
+}
+
+testName("global");
+testName("ignoreCase");
+testName("multiline");
+testName("source");
+testName("sticky");
+testName("unicode");
