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 %t/A.cppm -I%t -emit-module-interface -o %t/A.pcm 6*4b95a5a7SChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 %t/B.cppm -I%t -emit-module-interface -o %t/B.pcm 7*4b95a5a7SChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 -fprebuilt-module-path=%t %t/foo.cpp -verify 8*4b95a5a7SChuanqi Xu 9*4b95a5a7SChuanqi Xu//--- foo.h 10*4b95a5a7SChuanqi Xutemplate <class T> 11*4b95a5a7SChuanqi Xuconcept A = true; 12*4b95a5a7SChuanqi Xu 13*4b95a5a7SChuanqi Xu//--- bar.h 14*4b95a5a7SChuanqi Xutemplate <class T> 15*4b95a5a7SChuanqi Xuconcept A = false; 16*4b95a5a7SChuanqi Xu 17*4b95a5a7SChuanqi Xu//--- A.cppm 18*4b95a5a7SChuanqi Xumodule; 19*4b95a5a7SChuanqi Xu#include "foo.h" 20*4b95a5a7SChuanqi Xuexport module A; 21*4b95a5a7SChuanqi Xuexport using ::A; 22*4b95a5a7SChuanqi Xu 23*4b95a5a7SChuanqi Xu//--- B.cppm 24*4b95a5a7SChuanqi Xumodule; 25*4b95a5a7SChuanqi Xu#include "bar.h" 26*4b95a5a7SChuanqi Xuexport module B; 27*4b95a5a7SChuanqi Xuexport using ::A; 28*4b95a5a7SChuanqi Xu 29*4b95a5a7SChuanqi Xu//--- foo.cpp 30*4b95a5a7SChuanqi Xuimport A; 31*4b95a5a7SChuanqi Xuimport B; 32*4b95a5a7SChuanqi Xu 33*4b95a5a7SChuanqi Xutemplate <class T> void foo() requires A<T> {} // expected-error 1+{{reference to 'A' is ambiguous}} 34*4b95a5a7SChuanqi Xu // expected-note@* 1+{{candidate found by name lookup}} 35*4b95a5a7SChuanqi Xu 36*4b95a5a7SChuanqi Xuint main() { 37*4b95a5a7SChuanqi Xu foo<int>(); 38*4b95a5a7SChuanqi Xu return 0; 39*4b95a5a7SChuanqi Xu} 40