1*59179d72SIlya Biryukov // RUN: rm -rf %t 2*59179d72SIlya Biryukov // RUN: mkdir %t 3*59179d72SIlya Biryukov // RUN: split-file %s %t 4*59179d72SIlya Biryukov // 5*59179d72SIlya Biryukov // RUN: %clang_cc1 -xc++ -std=c++20 -fmodules -fmodule-name=library \ 6*59179d72SIlya Biryukov // RUN: -emit-module %t/modules.map \ 7*59179d72SIlya Biryukov // RUN: -o %t/module.pcm \ 8*59179d72SIlya Biryukov // RUN: -verify 9*59179d72SIlya Biryukov // 10*59179d72SIlya Biryukov //--- modules.map 11*59179d72SIlya Biryukov module "library" { 12*59179d72SIlya Biryukov export * 13*59179d72SIlya Biryukov module "concepts" { 14*59179d72SIlya Biryukov export * 15*59179d72SIlya Biryukov header "concepts.h" 16*59179d72SIlya Biryukov } 17*59179d72SIlya Biryukov module "conflicting" { 18*59179d72SIlya Biryukov export * 19*59179d72SIlya Biryukov header "conflicting.h" 20*59179d72SIlya Biryukov } 21*59179d72SIlya Biryukov } 22*59179d72SIlya Biryukov 23*59179d72SIlya Biryukov //--- concepts.h 24*59179d72SIlya Biryukov #ifndef CONCEPTS_H_ 25*59179d72SIlya Biryukov #define CONCEPTS_H_ 26*59179d72SIlya Biryukov 27*59179d72SIlya Biryukov template <class T> 28*59179d72SIlya Biryukov concept ConflictingConcept = true; 29*59179d72SIlya Biryukov 30*59179d72SIlya Biryukov template <class T, class U> 31*59179d72SIlya Biryukov concept same_as = __is_same(T, U); 32*59179d72SIlya Biryukov 33*59179d72SIlya Biryukov template<class T> concept truec = true; 34*59179d72SIlya Biryukov 35*59179d72SIlya Biryukov int var; 36*59179d72SIlya Biryukov 37*59179d72SIlya Biryukov #endif // SAMEAS_CONCEPTS_H 38*59179d72SIlya Biryukov 39*59179d72SIlya Biryukov //--- conflicting.h 40*59179d72SIlya Biryukov #ifndef CONFLICTING_H 41*59179d72SIlya Biryukov #define CONFLICTING_H 42*59179d72SIlya Biryukov 43*59179d72SIlya Biryukov #include "concepts.h" 44*59179d72SIlya Biryukov 45*59179d72SIlya Biryukov template <class T, class U = int> 46*59179d72SIlya Biryukov concept ConflictingConcept = true; // expected-error {{redefinition of concept 'ConflictingConcept' with different template}} 47*59179d72SIlya Biryukov // expected-note@* {{previous definition}} 48*59179d72SIlya Biryukov 49*59179d72SIlya Biryukov int same_as; // expected-error {{redefinition of 'same_as' as different kind of symbol}} 50*59179d72SIlya Biryukov // expected-note@* {{previous definition}} 51*59179d72SIlya Biryukov 52*59179d72SIlya Biryukov template<class T> concept var = false; // expected-error {{redefinition of 'var' as different kind of symbol}} 53*59179d72SIlya Biryukov // expected-note@* {{previous definition}} 54*59179d72SIlya Biryukov 55*59179d72SIlya Biryukov template<class T> concept truec = true; // expected-error {{redefinition of 'truec'}} 56*59179d72SIlya Biryukov // expected-note@* {{previous definition}} 57*59179d72SIlya Biryukov #endif // CONFLICTING_H 58