
of elements Close https://github.com/llvm/llvm-project/issues/91105 The root reason for the issue is that we always generate the dependently-sized array types which don't specify a number of elements. The original comment says: > We do no canonicalization here at all, which is okay > because they can't be used in most locations. But now we find the locations.
48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/bar.cppm -emit-module-interface -o %t/bar.pcm
|
|
// RUN: %clang_cc1 -std=c++20 %t/foo.cc -fmodule-file=bar=%t/bar.pcm -fsyntax-only -verify
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/bar.cppm -emit-module-interface \
|
|
// RUN: -o %t/bar.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/foo.cc \
|
|
// RUN: -fmodule-file=bar=%t/bar.pcm -fsyntax-only -verify
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 %t/bar.cppm -emit-reduced-module-interface -o %t/bar.pcm
|
|
// RUN: %clang_cc1 -std=c++20 %t/foo.cc -fmodule-file=bar=%t/bar.pcm -fsyntax-only -verify
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/bar.cppm -emit-reduced-module-interface \
|
|
// RUN: -o %t/bar.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/foo.cc \
|
|
// RUN: -fmodule-file=bar=%t/bar.pcm -fsyntax-only -verify
|
|
|
|
//--- h.hpp
|
|
#pragma once
|
|
|
|
struct T {
|
|
constexpr T(const char *) {}
|
|
};
|
|
template <char... c>
|
|
struct t {
|
|
inline constexpr operator T() const { return {s}; }
|
|
|
|
private:
|
|
inline static constexpr char s[]{c..., '\0'};
|
|
};
|
|
|
|
//--- bar.cppm
|
|
module;
|
|
#include "h.hpp"
|
|
export module bar;
|
|
export inline constexpr auto k = t<'k'>{};
|
|
|
|
//--- foo.cc
|
|
// expected-no-diagnostics
|
|
#include "h.hpp"
|
|
import bar;
|
|
void f() {
|
|
T x = k;
|
|
}
|