xref: /llvm-project/clang/test/Modules/concept_differ.cppm (revision da00c60dae0040185dc45039c4397f6e746548e9)
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