14b95a5a7SChuanqi Xu // RUN: rm -rf %t 24b95a5a7SChuanqi Xu // RUN: mkdir %t 34b95a5a7SChuanqi Xu // RUN: split-file %s %t 44b95a5a7SChuanqi Xu // 5*a171d248SMichael Spencer // RUN: %clang_cc1 -x c++ -std=c++20 -fmodules -fmodules-cache-path=%t -fmodule-map-file=%t/module.modulemap %t/foo.cpp -verify 64b95a5a7SChuanqi Xu 7*a171d248SMichael Spencer //--- module.modulemap 84b95a5a7SChuanqi Xu module "foo" { 94b95a5a7SChuanqi Xu export * 104b95a5a7SChuanqi Xu header "foo.h" 114b95a5a7SChuanqi Xu } 124b95a5a7SChuanqi Xu module "bar" { 134b95a5a7SChuanqi Xu export * 144b95a5a7SChuanqi Xu header "bar.h" 154b95a5a7SChuanqi Xu } 164b95a5a7SChuanqi Xu 174b95a5a7SChuanqi Xu //--- foo.h 184b95a5a7SChuanqi Xu template <class T> 194b95a5a7SChuanqi Xu concept A = true; 204b95a5a7SChuanqi Xu 214b95a5a7SChuanqi Xu //--- bar.h 224b95a5a7SChuanqi Xu template <class T> 234b95a5a7SChuanqi Xu concept A = false; 244b95a5a7SChuanqi Xu 254b95a5a7SChuanqi Xu //--- foo.cpp 264b95a5a7SChuanqi Xu #include "bar.h" 274b95a5a7SChuanqi Xu #include "foo.h" 284b95a5a7SChuanqi Xu foo()294b95a5a7SChuanqi Xutemplate <class T> void foo() requires A<T> {} // expected-error 1+{{reference to 'A' is ambiguous}} 304b95a5a7SChuanqi Xu // expected-note@* 1+{{candidate found by name lookup}} 314b95a5a7SChuanqi Xu main()324b95a5a7SChuanqi Xuint main() { 334b95a5a7SChuanqi Xu foo<int>(); 344b95a5a7SChuanqi Xu return 0; 354b95a5a7SChuanqi Xu } 36