// RUN: rm -rf %t // RUN: mkdir %t // RUN: split-file %s %t // // RUN: %clang_cc1 -xc++ -std=c++20 -fmodules -fmodule-name=library \ // RUN: -emit-module %t/modules.map \ // RUN: -o %t/module.pcm \ // RUN: -verify // //--- modules.map module "library" { export * module "concepts" { export * header "concepts.h" } module "conflicting" { export * header "conflicting.h" } } //--- concepts.h #ifndef CONCEPTS_H_ #define CONCEPTS_H_ template concept ConflictingConcept = true; template concept same_as = __is_same(T, U); template concept truec = true; int var; #endif // SAMEAS_CONCEPTS_H //--- conflicting.h #ifndef CONFLICTING_H #define CONFLICTING_H #include "concepts.h" template concept ConflictingConcept = true; // expected-error {{redefinition of concept 'ConflictingConcept' with different template}} // expected-note@* {{previous definition}} int same_as; // expected-error {{redefinition of 'same_as' as different kind of symbol}} // expected-note@* {{previous definition}} template concept var = false; // expected-error {{redefinition of 'var' as different kind of symbol}} // expected-note@* {{previous definition}} template concept truec = true; // expected-error {{redefinition of 'truec'}} // expected-note@* {{previous definition}} #endif // CONFLICTING_H