// Tests that we can merge the concept declarations with lambda well. // // RUN: rm -rf %t // RUN: mkdir -p %t // RUN: split-file %s %t // // RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm // RUN: %clang_cc1 -std=c++20 %t/A0.cppm -emit-module-interface -o %t/A0.pcm // RUN: %clang_cc1 -std=c++20 %t/TestA.cpp -fprebuilt-module-path=%t -fsyntax-only -verify // // RUN: %clang_cc1 -std=c++20 %t/A1.cppm -emit-module-interface -o %t/A1.pcm // RUN: %clang_cc1 -std=c++20 %t/TestA1.cpp -fprebuilt-module-path=%t -fsyntax-only -verify // // RUN: %clang_cc1 -std=c++20 %t/A2.cppm -emit-module-interface -o %t/A2.pcm // RUN: %clang_cc1 -std=c++20 %t/TestA2.cpp -fprebuilt-module-path=%t -fsyntax-only -verify // // RUN: %clang_cc1 -std=c++20 %t/A3.cppm -emit-module-interface -o %t/A3.pcm // RUN: %clang_cc1 -std=c++20 %t/TestA3.cpp -fprebuilt-module-path=%t -fsyntax-only -verify //--- A.h template concept A = requires(const _Tp& __t) { [](const __Up&) {}(__t); }; //--- A1.h template concept A = requires(const _Tp& __t) { [](__Up) {}(__t); }; //--- A2.h template concept A = requires(const _Tp& __t) { [](const __Up& __u) { (int)__u; }(__t); }; //--- A3.h template concept A = requires(const _Tp& __t) { [t = '?'](const __Up&) { (int)t; }(__t); }; //--- A.cppm module; #include "A.h" export module A; export using ::A; //--- A0.cppm module; #include "A.h" export module A0; export using ::A; //--- TestA.cpp // expected-no-diagnostics import A; import A0; template void f(C) requires(A) {} //--- A1.cppm module; #include "A1.h" export module A1; export using ::A; //--- TestA1.cpp import A; import A1; template void f(C) requires(A) {} // expected-error 1+{{reference to 'A' is ambiguous}} // expected-note@* 1+{{candidate found by name lookup is 'A'}} //--- A2.cppm module; #include "A2.h" export module A2; export using ::A; //--- TestA2.cpp import A; import A2; template void f(C) requires(A) {} // expected-error 1+{{reference to 'A' is ambiguous}} // expected-note@* 1+{{candidate found by name lookup is 'A'}} //--- A3.cppm module; #include "A3.h" export module A3; export using ::A; //--- TestA3.cpp import A; import A3; template void f(C) requires(A) {} // expected-error 1+{{reference to 'A' is ambiguous}} // expected-note@* 1+{{candidate found by name lookup is 'A'}}