// 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 <class T>
concept ConflictingConcept = true;
template <class T, class U>
concept same_as = __is_same(T, U);
template<class T> concept truec = true;
int var;
#endif // SAMEAS_CONCEPTS_H
//--- conflicting.h
#ifndef CONFLICTING_H
#define CONFLICTING_H
#include "concepts.h"
template <class T, class U = int>
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<class T> concept var = false; // expected-error {{redefinition of 'var' as different kind of symbol}}
// expected-note@* {{previous definition}}
template<class T> concept truec = true; // expected-error {{redefinition of 'truec'}}
// expected-note@* {{previous definition}}
#endif // CONFLICTING_H