1// RUN: rm -rf %t 2// RUN: mkdir %t 3// RUN: split-file %s %t 4// 5// RUN: %clang_cc1 -x c++ -std=c++20 %t/A.cppm -I%t -emit-module-interface -o %t/A.pcm 6// RUN: %clang_cc1 -x c++ -std=c++20 %t/B.cppm -I%t -emit-module-interface -o %t/B.pcm 7// RUN: %clang_cc1 -x c++ -std=c++20 -fprebuilt-module-path=%t %t/foo.cpp -verify 8// 9// RUN: rm %t/A.pcm %t/B.pcm 10// RUN: %clang_cc1 -x c++ -std=c++20 %t/A.cppm -I%t -emit-reduced-module-interface -o %t/A.pcm 11// RUN: %clang_cc1 -x c++ -std=c++20 %t/B.cppm -I%t -emit-reduced-module-interface -o %t/B.pcm 12// RUN: %clang_cc1 -x c++ -std=c++20 -fprebuilt-module-path=%t %t/foo.cpp -verify 13 14//--- foo.h 15template <class T> 16concept A = true; 17 18//--- bar.h 19template <class T> 20concept A = false; 21 22//--- A.cppm 23module; 24#include "foo.h" 25export module A; 26export using ::A; 27 28//--- B.cppm 29module; 30#include "bar.h" 31export module B; 32export using ::A; 33 34//--- foo.cpp 35import A; 36import B; 37 38template <class T> void foo() requires A<T> {} // expected-error 1+{{reference to 'A' is ambiguous}} 39 // expected-note@* 1+{{candidate found by name lookup}} 40 41int main() { 42 foo<int>(); 43 return 0; 44} 45