for (RecordDecl::field_iterator Field = RD->field_begin(),
FieldEnd = RD->field_end(); Field != FieldEnd; ++Field, ++FieldNo) {
// If this is a union, skip all the fields that aren't being initialized.
- if (RD->isUnion() && Val.getUnionField() != *Field)
+ if (RD->isUnion() && !declaresSameEntity(Val.getUnionField(), *Field))
continue;
// Don't emit anonymous bitfields, they just affect layout.
--- /dev/null
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t %s -emit-llvm -o - | FileCheck %s
+
+// CHECK: @_Z3varIiE = {{.*}} %union.union_type { i8 1 },
+
+#pragma clang module build bar
+module bar {
+ header "bar.h" { size 40 mtime 0 }
+ export *
+}
+#pragma clang module contents
+#pragma clang module begin bar
+union union_type {
+ char h{1};
+};
+#pragma clang module end
+#pragma clang module endbuild
+#pragma clang module build foo
+module foo {
+ header "foo.h" { size 97 mtime 0 }
+ export *
+}
+#pragma clang module contents
+#pragma clang module begin foo
+union union_type {
+ char h{1};
+};
+#pragma clang module import bar
+template<typename T>
+union_type var;
+#pragma clang module end
+#pragma clang module endbuild
+#pragma clang module import foo
+int main() {
+ (void)&var<int>;
+}