Author: Matheus Izvekov
Date: 2026-05-24T21:48:56-03:00
New Revision: a029fb9dda06a08c1f37037d03dda3ec053bc139

URL: 
https://github.com/llvm/llvm-project/commit/a029fb9dda06a08c1f37037d03dda3ec053bc139
DIFF: 
https://github.com/llvm/llvm-project/commit/a029fb9dda06a08c1f37037d03dda3ec053bc139.diff

LOG: [clang] NFC: add some new test cases (#199467)

These are extracted from my current and future PRs.

They don't have much to do with the PRs themselves except that they were
regressions our test suite missed catching.

Added: 
    clang/test/Modules/template-default-args-2.cpp
    clang/test/Modules/template-default-args-3.cpp

Modified: 
    clang/test/CodeGenCXX/visibility.cpp
    clang/test/SemaTemplate/generic-lambda.cpp
    clang/test/SemaTemplate/partial-spec-instantiate.cpp

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGenCXX/visibility.cpp 
b/clang/test/CodeGenCXX/visibility.cpp
index 3203d476c45f9..7dd5dc37c2dee 100644
--- a/clang/test/CodeGenCXX/visibility.cpp
+++ b/clang/test/CodeGenCXX/visibility.cpp
@@ -1560,3 +1560,25 @@ namespace no_pragma_test {
   // CHECK-LABEL: define void @_ZN14no_pragma_test1SC2Ev(
   // CHECK-HIDDEN-LABEL: define hidden void @_ZN14no_pragma_test1SC2Ev(
 }
+
+namespace FunctionTemplateRedecl1 {
+  template <class> void f();
+  extern template DEFAULT void f<int>();
+  template <class> void f() {}
+  template void f<int>();
+  // CHECK-LABEL: define weak_odr void @_ZN23FunctionTemplateRedecl11fIiEEvv(
+  // CHECK-HIDDEN-LABEL: define weak_odr void 
@_ZN23FunctionTemplateRedecl11fIiEEvv(
+} // namespace FunctionTemplateRedecl1
+
+namespace SpecOutOfLine1 {
+  template <class> struct A {
+    A<void> f();
+  };
+  template <>
+  struct DEFAULT A<void> {
+    ~A();
+  };
+  A<void>::~A() {}
+  // CHECK-LABEL: define void @_ZN14SpecOutOfLine11AIvED1Ev(
+  // CHECK-HIDDEN-LABEL: define void @_ZN14SpecOutOfLine11AIvED1Ev(
+} // namespace SpecOutOfLine1

diff  --git a/clang/test/Modules/template-default-args-2.cpp 
b/clang/test/Modules/template-default-args-2.cpp
new file mode 100644
index 0000000000000..29925e4785d9a
--- /dev/null
+++ b/clang/test/Modules/template-default-args-2.cpp
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -fmodules -verify -fno-modules-error-recovery 
-fno-spell-checking %s
+
+#pragma clang module build A
+module A {
+  explicit module X {}
+  explicit module Y {}
+}
+#pragma clang module contents
+#pragma clang module begin A.X
+namespace N {
+  template<class, class = void> struct Foo1 {};
+  template<class, class> struct Foo2 {};
+}
+#pragma clang module end
+
+#pragma clang module begin A.Y
+#pragma clang module import A.X
+namespace N {
+  template<class, class> struct Foo1;
+  template<class, class = void> struct Foo2;
+}
+#pragma clang module end
+#pragma clang module endbuild
+
+#pragma clang module import A.X
+
+N::Foo1<int> t1;
+N::Foo2<int> t2;
+// expected-error@-1 {{default argument of 'Foo2' must be imported from module 
'A.Y' before it is required}}
+// expected-note@* {{default argument declared here is not reachable}}

diff  --git a/clang/test/Modules/template-default-args-3.cpp 
b/clang/test/Modules/template-default-args-3.cpp
new file mode 100644
index 0000000000000..0dbdf7165433e
--- /dev/null
+++ b/clang/test/Modules/template-default-args-3.cpp
@@ -0,0 +1,36 @@
+// RUN: rm -rf %t
+// RUN: mkdir -p %t
+// RUN: split-file %s %t
+// RUN: cd %t
+//
+// RUN: %clang_cc1 -verify -std=c++20 -emit-module -fmodules -fmodule-name=B 
-fmodules-cache-path=%t -xc++ module.modulemap
+
+//--- module.modulemap
+module A {
+  header "A.h"
+}
+module B {
+  module X {
+    header "B.h"
+  }
+  header "C.h"
+}
+
+//--- A.h
+template <class _Tp, class = void> struct A {};
+
+//--- B.h
+template <class> struct C;
+template <class T> void f() {
+  C<T> a;
+}
+void g() {
+  f<int>();
+}
+
+//--- C.h
+// expected-no-diagnostics
+#pragma clang module import A
+template <class T> struct C {
+  using X = A<T>;
+};

diff  --git a/clang/test/SemaTemplate/generic-lambda.cpp 
b/clang/test/SemaTemplate/generic-lambda.cpp
index 804eeaa29d6a1..7e7c3419f1b43 100644
--- a/clang/test/SemaTemplate/generic-lambda.cpp
+++ b/clang/test/SemaTemplate/generic-lambda.cpp
@@ -83,3 +83,10 @@ int foo(auto... fn) {
 int v = foo(42);
 
 } // namespace GH95735
+
+namespace ExpectionSpec1 {
+  template <class> void f() {
+    [](auto...) noexcept(false) {}();
+  }
+  template void f<int>();
+} // namespace ExceptionSpec1

diff  --git a/clang/test/SemaTemplate/partial-spec-instantiate.cpp 
b/clang/test/SemaTemplate/partial-spec-instantiate.cpp
index 44b58008a1d33..ab48050938991 100644
--- a/clang/test/SemaTemplate/partial-spec-instantiate.cpp
+++ b/clang/test/SemaTemplate/partial-spec-instantiate.cpp
@@ -165,3 +165,10 @@ namespace GH162855 {
   template struct C<D<int>>;
 } // namespace GH162855
 #endif
+
+namespace DependentWithQualifier {
+  template <class> struct A;
+  template <class> struct B;
+  template <class T> struct A<const B<T> > {};
+  template struct A<const B<int> >;
+} // namespace DependentWithQualifier


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to