diff --git a/clang/test/CXX/drs/dr18xx.cpp b/clang/test/CXX/drs/dr18xx.cpp
index 02739cd2c0005..43db6e3a95a1f 100644
--- a/clang/test/CXX/drs/dr18xx.cpp
+++ b/clang/test/CXX/drs/dr18xx.cpp
@@ -168,3 +168,31 @@ void dr1891() { // dr1891: 4
b = static_cast(b); // expected-error {{copy assignment operator is implicitly deleted}}
#endif
}
+
+namespace dr1894 { // dr1894: 3.8
+ // NB: reusing part of dr407 test
+namespace A {
+ struct S {};
+}
+namespace B {
+ typedef int S;
+}
+namespace E {
+ typedef A::S S;
+ using A::S;
+ struct S s;
+}
+namespace F {
+ typedef A::S S;
+}
+namespace G {
+ using namespace A;
+ using namespace F;
+ struct S s;
+}
+namespace H {
+ using namespace F;
+ using namespace A;
+ struct S s;
+}
+}
diff --git a/clang/test/CXX/drs/dr21xx.cpp b/clang/test/CXX/drs/dr21xx.cpp
index d8cf3ac9f7eda..80db71bccc8db 100644
--- a/clang/test/CXX/drs/dr21xx.cpp
+++ b/clang/test/CXX/drs/dr21xx.cpp
@@ -1,7 +1,9 @@
// RUN: %clang_cc1 -std=c++98 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++11 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++1z -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++2b -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
#if __cplusplus < 201103L
// expected-error@+1 {{variadic macro}}
@@ -188,3 +190,31 @@ namespace dr2180 { // dr2180: yes
B &B::operator=(B&&) = default; // expected-error {{would delete}} expected-note@-10{{inaccessible move assignment}}
#endif
}
+
+namespace dr2199 { // dr2199: 3.8
+ // NB: reusing part of dr407 test
+namespace A {
+ struct S {};
+}
+namespace B {
+ typedef int S;
+}
+namespace E {
+ typedef A::S S;
+ using A::S;
+ struct S s;
+}
+namespace F {
+ typedef A::S S;
+}
+namespace G {
+ using namespace A;
+ using namespace F;
+ struct S s;
+}
+namespace H {
+ using namespace F;
+ using namespace A;
+ struct S s;
+}
+}
diff --git a/clang/test/CXX/drs/dr4xx.cpp b/clang/test/CXX/drs/dr4xx.cpp
index 3617af8b683c0..f1ba2a0471389 100644
--- a/clang/test/CXX/drs/dr4xx.cpp
+++ b/clang/test/CXX/drs/dr4xx.cpp
@@ -124,6 +124,7 @@ namespace dr406 { // dr406: yes
}
namespace dr407 { // dr407: 3.8
+ // NB: reused by dr1894 and dr2199
struct S;
typedef struct S S;
void f() {
diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html
index 47300efb99c36..ef45809d2d5a9 100755
--- a/clang/www/cxx_dr_status.html
+++ b/clang/www/cxx_dr_status.html
@@ -11171,7 +11171,7 @@ C++ defect report implementation status