mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-17 19:36:48 +00:00

Add a test from https://github.com/llvm/llvm-project/issues/59999. It is always good to have more tests.
45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
// Test case from https://github.com/llvm/llvm-project/issues/59999
|
|
//
|
|
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// 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.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
|
|
|
|
//--- Module.cppm
|
|
export module Module;
|
|
|
|
export template <class ObjectType> bool ModuleRegister() { return true; };
|
|
|
|
export struct ModuleEntry {
|
|
static const bool bRegistered;
|
|
};
|
|
|
|
const bool ModuleEntry::bRegistered = ModuleRegister<ModuleEntry>();
|
|
|
|
//--- Object.cppm
|
|
export module Object;
|
|
|
|
import Module;
|
|
|
|
export template <class ObjectType> bool ObjectRegister() { return true; }
|
|
export struct NObject {
|
|
static const bool bRegistered;
|
|
};
|
|
export struct ObjectModuleEntry {
|
|
static const bool bRegistered;
|
|
};
|
|
|
|
// This function is also required for crash
|
|
const bool NObject::bRegistered = ObjectRegister<NObject>();
|
|
// One another function, that helps clang crash
|
|
const bool ObjectModuleEntry::bRegistered = ModuleRegister<ObjectModuleEntry>();
|
|
|
|
// Check that the LLVM IR is generated correctly instead of crashing.
|
|
// CHECK: define{{.*}}@_ZGIW6Object
|