[PATCH] D154801: C++20 Modules: update pr59999.cppm to reflect a reproducible state
Eduardo Costa via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 9 14:42:07 PDT 2023
m4c0 created this revision.
Herald added a project: All.
m4c0 requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
This is a extension for #59999 tests in order to make them reproduce the issue reported.
After local tests, I found out the definition in a "part unit" being instantiated in a deeper dependency tree is fundamental to the failure. So, in the case of this issue, splitting the code with its parts and the `World` module are important.
Also, I noticed more symbols are also important to reproduce the issue.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D154801
Files:
clang/test/Modules/pr59999.cppm
Index: clang/test/Modules/pr59999.cppm
===================================================================
--- clang/test/Modules/pr59999.cppm
+++ clang/test/Modules/pr59999.cppm
@@ -4,17 +4,31 @@
// RUN: mkdir -p %t
// RUN: split-file %s %t
//
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Module-Reflector.cppm \
+// RUN: -emit-module-interface -o %t/Module-Reflector.pcm
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Module.cppm \
// RUN: -emit-module-interface -o %t/Module.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Object-Reflector.cppm \
+// RUN: -fmodule-file=Module=%t/Module.pcm -emit-module-interface \
+// RUN: -o %t/Object-Reflector.pcm
// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Object.cppm \
// RUN: -fmodule-file=Module=%t/Module.pcm -emit-module-interface -o %t/Object.pcm
-// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/Object.pcm \
-// RUN: -fmodule-file=Module=%t/Module.pcm -S -emit-llvm -o - | FileCheck %t/Object.cppm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/World.cppm \
+// RUN: -fmodule-file=Module=%t/Module.pcm -fmodule-file=Object=%t/Object.pcm \
+// RUN: -o %t/World.pcm
+// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/World.pcm \
+// RUN: -fmodule-file=Module=%t/Module.pcm -fmodule-file=Object=%t/Object.pcm \
+// RUN: -S -emit-llvm -o - | FileCheck %t/World.cppm
+
+//--- Module-Reflector.cppm
+export module Module:Reflector;
+
+export template <class ObjectType> bool ModuleRegister() { return true; };
//--- Module.cppm
export module Module;
-export template <class ObjectType> bool ModuleRegister() { return true; };
+export import :Reflector;
export struct ModuleEntry {
static const bool bRegistered;
@@ -22,12 +36,18 @@
const bool ModuleEntry::bRegistered = ModuleRegister<ModuleEntry>();
+//--- Object-Reflector.cppm
+export module Object:Reflector;
+
+export template <class ObjectType> bool ObjectRegister() { return true; };
+
//--- Object.cppm
export module Object;
import Module;
-export template <class ObjectType> bool ObjectRegister() { return true; }
+export import :Reflector;
+
export struct NObject {
static const bool bRegistered;
};
@@ -40,5 +60,13 @@
// One another function, that helps clang crash
const bool ObjectModuleEntry::bRegistered = ModuleRegister<ObjectModuleEntry>();
+//--- World.cppm
+
+export module World;
+
+import Object;
+
+export const bool NWorldRegistered = ModuleRegister<long>();
+
// Check that the LLVM IR is generated correctly instead of crashing.
-// CHECK: define{{.*}}@_ZGIW6Object
+// CHECK: define{{.*}}@_ZGIW5World
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154801.538455.patch
Type: text/x-patch
Size: 2707 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230709/b0ed651a/attachment.bin>
More information about the cfe-commits
mailing list