1*4b95a5a7SChuanqi Xu // RUN: rm -rf %t 2*4b95a5a7SChuanqi Xu // RUN: mkdir %t 3*4b95a5a7SChuanqi Xu // RUN: split-file %s %t 4*4b95a5a7SChuanqi Xu // 5*4b95a5a7SChuanqi Xu // RUN: %clang_cc1 -x c++ -std=c++20 -fmodules -fmodules-cache-path=%t -fmodule-map-file=%t/module.map %t/foo.cpp -verify 6*4b95a5a7SChuanqi Xu 7*4b95a5a7SChuanqi Xu //--- module.map 8*4b95a5a7SChuanqi Xu module "foo" { 9*4b95a5a7SChuanqi Xu export * 10*4b95a5a7SChuanqi Xu header "foo.h" 11*4b95a5a7SChuanqi Xu } 12*4b95a5a7SChuanqi Xu module "bar" { 13*4b95a5a7SChuanqi Xu export * 14*4b95a5a7SChuanqi Xu header "bar.h" 15*4b95a5a7SChuanqi Xu } 16*4b95a5a7SChuanqi Xu 17*4b95a5a7SChuanqi Xu //--- foo.h 18*4b95a5a7SChuanqi Xu template <class T> 19*4b95a5a7SChuanqi Xu concept A = true; 20*4b95a5a7SChuanqi Xu 21*4b95a5a7SChuanqi Xu //--- bar.h 22*4b95a5a7SChuanqi Xu template <class T> 23*4b95a5a7SChuanqi Xu concept A = false; 24*4b95a5a7SChuanqi Xu 25*4b95a5a7SChuanqi Xu //--- foo.cpp 26*4b95a5a7SChuanqi Xu #include "bar.h" 27*4b95a5a7SChuanqi Xu #include "foo.h" 28*4b95a5a7SChuanqi Xu foo()29*4b95a5a7SChuanqi Xutemplate <class T> void foo() requires A<T> {} // expected-error 1+{{reference to 'A' is ambiguous}} 30*4b95a5a7SChuanqi Xu // expected-note@* 1+{{candidate found by name lookup}} 31*4b95a5a7SChuanqi Xu main()32*4b95a5a7SChuanqi Xuint main() { 33*4b95a5a7SChuanqi Xu foo<int>(); 34*4b95a5a7SChuanqi Xu return 0; 35*4b95a5a7SChuanqi Xu } 36