// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: split-file %s %t
//
// RUN: %clang_cc1  -std=c++20 %t/foo.cppm -I%t -emit-module-interface -o %t/foo.pcm
// RUN: %clang_cc1  -fprebuilt-module-path=%t -std=c++20 %t/use.cpp -I%t/. -fsyntax-only -verify

//--- foo.h
template <typename T = int>
T v;

template <int T = 8>
int v2;

template <typename T>
class my_array {};

template <template <typename> typename C = my_array>
int v3;

template <typename T, int *i = nullptr>
T v4;

template <typename T, T *i = nullptr>
T v5;

inline int a = 43;
template <typename T, int *i = &a>
T v6;

inline int b = 43;
template <typename T, T *i = &b>
T v7;

template <int T = (3 > 2)>
int v8;

consteval int getInt() {
  return 55;
}
template <int T = getInt()>
int v9;

//--- foo_bad.h
template <typename T = double>
T v;

template <int T = 9>
int v2;

template <typename T>
class others_array {};

template <template <typename> typename C = others_array>
int v3;

static int a;
consteval int *getIntPtr() {
  return &a;
}
template <typename T, int *i = getIntPtr()>
T v4;

consteval void *getVoidPtr() {
  return &a;
}
template <typename T, T *i = getVoidPtr()>
T v5;

inline int a_ = 43;
template <typename T, int *i = &a_>
T v6;

inline int b_ = 43;
template <typename T, T *i = &b_>
T v7;

template <int T = -1>
int v8;

consteval int getInt2() {
  return 55;
}
template <int T = getInt2()>
int v9;

//--- foo.cppm
module;
#include "foo.h"
export module foo;

//--- use.cpp
import foo;
#include "foo_bad.h"

// expected-error@foo_bad.h:1 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:1 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:4 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:4 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:10 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:10 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:17 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:13 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:23 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:16 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:27 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:20 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:31 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:24 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:34 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:27 {{previous default template argument defined in module foo.<global>}}
// expected-error@foo_bad.h:40 {{template parameter default argument is inconsistent with previous definition}}
// expected-note@foo.h:33 {{previous default template argument defined in module foo.<global>}}
