// RUN: rm -fR %t // RUN: split-file %s %t // RUN: cd %t // RUN: %clang_cc1 -verify -w -std=c++20 -fmodule-name=h1.h -emit-header-unit -xc++-user-header h1.h -o h1.pcm // RUN: %clang_cc1 -verify -w -std=c++20 -fmodule-map-file=module.modulemap -fmodule-file=h1.h=h1.pcm main.cpp -o main.o //--- module.modulemap module "h1.h" { header "h1.h" export * } //--- h0.h // expected-no-diagnostics #pragma once template struct A { union { struct { T x, y, z; }; }; constexpr A(T, T, T) : x(), y(), z() {} }; typedef A packed_vec3; //--- h1.h // expected-no-diagnostics #pragma once #include "h0.h" constexpr packed_vec3 kMessThingsUp = packed_vec3(5.0f, 5.0f, 5.0f); //--- main.cpp // expected-no-diagnostics #include "h0.h" static_assert(sizeof(packed_vec3) == sizeof(float) * 3); static_assert(alignof(packed_vec3) == sizeof(float)); import "h1.h"; constexpr packed_vec3 kDefaultHalfExtents = packed_vec3(5.0f, 5.0f, 5.0f);