diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index b69151c49adf08ee4dca057baf4fdb9345c96158..6e343658096786723729f4d2a40c75929863cea4 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -114,8 +114,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b) _GLIBCXX_NOTHROW
   { return __a = __a ^ __b; }
 
+  // If std::ios_base::noreplace isn't available, -Wswitch should ignore
+  // _S_noreplace.
+#ifdef __glibcxx_ios_noreplace
+#define _NOREPLACE_UNUSED
+#else
+#define _NOREPLACE_UNUSED __attribute__((__unused__))
+#endif
 
-  enum _Ios_Openmode 
+  enum __attribute__((__flag_enum__)) _Ios_Openmode
     { 
       _S_app 		= 1L << 0,
       _S_ate 		= 1L << 1,
@@ -123,12 +130,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _S_in 		= 1L << 3,
       _S_out 		= 1L << 4,
       _S_trunc 		= 1L << 5,
-      _S_noreplace 	= 1L << 6,
-      _S_ios_openmode_end = 1L << 16,
-      _S_ios_openmode_max = __INT_MAX__,
-      _S_ios_openmode_min = ~__INT_MAX__
+      _S_noreplace _NOREPLACE_UNUSED = 1L << 6,
+      _S_ios_openmode_end __attribute__((__unused__)) = 1L << 16,
+      _S_ios_openmode_max __attribute__((__unused__)) = __INT_MAX__,
+      _S_ios_openmode_min __attribute__((__unused__)) = ~__INT_MAX__
     };
 
+#undef _NOREPLACE_UNUSED
+
   _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
   inline _Ios_Openmode
   operator&(_Ios_Openmode __a, _Ios_Openmode __b) _GLIBCXX_NOTHROW
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc b/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
index 95c86588a54ee0d5543fc14cdfe36dc9980351fc..9e388a51294a7c7f56be307ba3131ae2b42e3cb6 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
@@ -44,6 +44,10 @@ case_labels(bitmask_type b)
       break;
     case std::ios_base::trunc:
       break;
+#ifdef __glibcxx_ios_noreplace
+    case std::ios_base::noreplace:
+      break;
+#endif
     case std::_S_ios_openmode_end:
       break;
     case __INT_MAX__: