159179d72SIlya Biryukov // RUN: rm -rf %t 259179d72SIlya Biryukov // RUN: mkdir %t 359179d72SIlya Biryukov // RUN: split-file %s %t 459179d72SIlya Biryukov // 559179d72SIlya Biryukov // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/same_as.cppm -o %t/same_as.pcm 659179d72SIlya Biryukov // RUN: %clang_cc1 -std=c++20 -emit-module-interface -fprebuilt-module-path=%t %t/concepts.cppm -o %t/concepts.pcm 759179d72SIlya Biryukov // RUN: %clang_cc1 -std=c++20 -emit-module-interface -fprebuilt-module-path=%t %t/format.cppm -o %t/format.pcm 859179d72SIlya Biryukov // RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/conflicting.cppm -o %t/conflicting.pcm 959179d72SIlya Biryukov // RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cppm -fsyntax-only -verify 1059179d72SIlya Biryukov 11*da00c60dSChuanqi Xu // Test again with reduced BMI. 12*da00c60dSChuanqi Xu // RUN: rm -rf %t 13*da00c60dSChuanqi Xu // RUN: mkdir %t 14*da00c60dSChuanqi Xu // RUN: split-file %s %t 15*da00c60dSChuanqi Xu // 16*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/same_as.cppm -o %t/same_as.pcm 17*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface -fprebuilt-module-path=%t %t/concepts.cppm -o %t/concepts.pcm 18*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface -fprebuilt-module-path=%t %t/format.cppm -o %t/format.pcm 19*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 -emit-reduced-module-interface %t/conflicting.cppm -o %t/conflicting.pcm 20*da00c60dSChuanqi Xu // RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cppm -fsyntax-only -verify 21*da00c60dSChuanqi Xu 22*da00c60dSChuanqi Xu 2359179d72SIlya Biryukov //--- same_as.cppm 2459179d72SIlya Biryukov export module same_as; 2559179d72SIlya Biryukov export template <class T, class U> 2659179d72SIlya Biryukov concept same_as = __is_same(T, U); 2759179d72SIlya Biryukov 2859179d72SIlya Biryukov //--- concepts.cppm 2959179d72SIlya Biryukov export module concepts; 3059179d72SIlya Biryukov export import same_as; 3159179d72SIlya Biryukov 3259179d72SIlya Biryukov export template <class T> 3359179d72SIlya Biryukov concept ConflictingConcept = true; 3459179d72SIlya Biryukov 3559179d72SIlya Biryukov //--- format.cppm 3659179d72SIlya Biryukov 3759179d72SIlya Biryukov export module format; 3859179d72SIlya Biryukov export import concepts; 3959179d72SIlya Biryukov export import same_as; 4059179d72SIlya Biryukov foo()4159179d72SIlya Biryukovexport template <class T> void foo() 4259179d72SIlya Biryukov requires same_as<T, int> 4359179d72SIlya Biryukov {} 4459179d72SIlya Biryukov 4559179d72SIlya Biryukov //--- conflicting.cppm 4659179d72SIlya Biryukov export module conflicting; 4759179d72SIlya Biryukov export template <class T, class U = int> 4859179d72SIlya Biryukov concept ConflictingConcept = true; 4959179d72SIlya Biryukov 5059179d72SIlya Biryukov //--- Use.cppm 5159179d72SIlya Biryukov import format; 5259179d72SIlya Biryukov import conflicting; 5359179d72SIlya Biryukov foo()5459179d72SIlya Biryukovtemplate <class T> void foo() 5559179d72SIlya Biryukov requires same_as<T, T> 5659179d72SIlya Biryukov {} 5759179d72SIlya Biryukov ConflictingConcept auto x = 10; // expected-error {{reference to 'ConflictingConcept' is ambiguous}} 5859179d72SIlya Biryukov // expected-note@* 2 {{candidate}} 59