14b95a5a7SChuanqi Xu// RUN: rm -rf %t 24b95a5a7SChuanqi Xu// RUN: mkdir %t 34b95a5a7SChuanqi Xu// RUN: split-file %s %t 44b95a5a7SChuanqi Xu// 54b95a5a7SChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 %t/A.cppm -I%t -emit-module-interface -o %t/A.pcm 64b95a5a7SChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 %t/B.cppm -I%t -emit-module-interface -o %t/B.pcm 74b95a5a7SChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 -fprebuilt-module-path=%t %t/foo.cpp -verify 8*da00c60dSChuanqi Xu// 9*da00c60dSChuanqi Xu// RUN: rm %t/A.pcm %t/B.pcm 10*da00c60dSChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 %t/A.cppm -I%t -emit-reduced-module-interface -o %t/A.pcm 11*da00c60dSChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 %t/B.cppm -I%t -emit-reduced-module-interface -o %t/B.pcm 12*da00c60dSChuanqi Xu// RUN: %clang_cc1 -x c++ -std=c++20 -fprebuilt-module-path=%t %t/foo.cpp -verify 134b95a5a7SChuanqi Xu 144b95a5a7SChuanqi Xu//--- foo.h 154b95a5a7SChuanqi Xutemplate <class T> 164b95a5a7SChuanqi Xuconcept A = true; 174b95a5a7SChuanqi Xu 184b95a5a7SChuanqi Xu//--- bar.h 194b95a5a7SChuanqi Xutemplate <class T> 204b95a5a7SChuanqi Xuconcept A = false; 214b95a5a7SChuanqi Xu 224b95a5a7SChuanqi Xu//--- A.cppm 234b95a5a7SChuanqi Xumodule; 244b95a5a7SChuanqi Xu#include "foo.h" 254b95a5a7SChuanqi Xuexport module A; 264b95a5a7SChuanqi Xuexport using ::A; 274b95a5a7SChuanqi Xu 284b95a5a7SChuanqi Xu//--- B.cppm 294b95a5a7SChuanqi Xumodule; 304b95a5a7SChuanqi Xu#include "bar.h" 314b95a5a7SChuanqi Xuexport module B; 324b95a5a7SChuanqi Xuexport using ::A; 334b95a5a7SChuanqi Xu 344b95a5a7SChuanqi Xu//--- foo.cpp 354b95a5a7SChuanqi Xuimport A; 364b95a5a7SChuanqi Xuimport B; 374b95a5a7SChuanqi Xu 384b95a5a7SChuanqi Xutemplate <class T> void foo() requires A<T> {} // expected-error 1+{{reference to 'A' is ambiguous}} 394b95a5a7SChuanqi Xu // expected-note@* 1+{{candidate found by name lookup}} 404b95a5a7SChuanqi Xu 414b95a5a7SChuanqi Xuint main() { 424b95a5a7SChuanqi Xu foo<int>(); 434b95a5a7SChuanqi Xu return 0; 444b95a5a7SChuanqi Xu} 45