diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Modules/ExtDebugInfo.cpp | 4 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/lsv-debuginfo/A/ADT.h | 45 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/lsv-debuginfo/B/B.h | 14 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/lsv-debuginfo/C/C.h | 13 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/lsv-debuginfo/module.modulemap | 9 | ||||
-rwxr-xr-x | clang/test/Modules/lsv-debuginfo.cpp | 39 |
6 files changed, 122 insertions, 2 deletions
diff --git a/clang/test/Modules/ExtDebugInfo.cpp b/clang/test/Modules/ExtDebugInfo.cpp index c57f1f034eb..592612b9a5d 100644 --- a/clang/test/Modules/ExtDebugInfo.cpp +++ b/clang/test/Modules/ExtDebugInfo.cpp @@ -83,11 +83,11 @@ void foo() { // CHECK: ![[NS]] = !DINamespace(name: "DebugCXX", scope: ![[MOD:[0-9]+]]) // CHECK: ![[MOD]] = !DIModule(scope: null, name: {{.*}}DebugCXX -// This type is anchored in the module by an explicit template instantiation. +// This type is not anchored in the module by an explicit template instantiation. // CHECK: !DICompositeType(tag: DW_TAG_class_type, // CHECK-SAME: name: "Template<long, DebugCXX::traits<long> >", // CHECK-SAME: scope: ![[NS]], -// CHECK-SAME: flags: DIFlagFwdDecl, +// CHECK-SAME: elements: // CHECK-SAME: identifier: "_ZTSN8DebugCXX8TemplateIlNS_6traitsIlEEEE") // This type is anchored in the module by an explicit template instantiation. diff --git a/clang/test/Modules/Inputs/lsv-debuginfo/A/ADT.h b/clang/test/Modules/Inputs/lsv-debuginfo/A/ADT.h new file mode 100644 index 00000000000..f48d4f7820a --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-debuginfo/A/ADT.h @@ -0,0 +1,45 @@ +#ifndef ADT +#define ADT + +#ifdef WITH_NAMESPACE +namespace llvm { +#endif +template <unsigned Alignment, unsigned Size> +struct AlignedCharArray { + alignas(Alignment) char buffer[Size]; +}; + +template <typename T1> +class AlignerImpl { + T1 t1; +}; + +template <typename T1> +union SizerImpl { + char arr1[sizeof(T1)]; +}; + +template <typename T1> +struct AlignedCharArrayUnion + : AlignedCharArray<alignof(AlignerImpl<T1>), sizeof(SizerImpl<T1>)> {}; + +template <typename T, unsigned N> +struct SmallVectorStorage { + AlignedCharArrayUnion<T> InlineElts[N]; +}; +template <typename T, unsigned N> +class SmallVector : SmallVectorStorage<T, N> {}; + +template <typename T> +struct OptionalStorage { + AlignedCharArrayUnion<T> storage; +}; +template <typename T> +class Optional { + OptionalStorage<T> Storage; +}; + +#ifdef WITH_NAMESPACE +} // namespace llvm +#endif +#endif diff --git a/clang/test/Modules/Inputs/lsv-debuginfo/B/B.h b/clang/test/Modules/Inputs/lsv-debuginfo/B/B.h new file mode 100644 index 00000000000..c00bc3cddbf --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-debuginfo/B/B.h @@ -0,0 +1,14 @@ +#ifndef B_H +#define B_H +#include <A/ADT.h> +#include <C/C.h> + +namespace llvm { +struct S { + unsigned a, b, c, d; +}; +class C { + Optional<S> S; +}; +} +#endif diff --git a/clang/test/Modules/Inputs/lsv-debuginfo/C/C.h b/clang/test/Modules/Inputs/lsv-debuginfo/C/C.h new file mode 100644 index 00000000000..52c6e4dbac9 --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-debuginfo/C/C.h @@ -0,0 +1,13 @@ +#ifndef C_H +#define C_H +#include <A/ADT.h> + +namespace llvm { +class D { + struct Q { + unsigned a, b, c, d; + }; + SmallVector<Q, 4> q; +}; +} // namespace llvm +#endif diff --git a/clang/test/Modules/Inputs/lsv-debuginfo/module.modulemap b/clang/test/Modules/Inputs/lsv-debuginfo/module.modulemap new file mode 100644 index 00000000000..5bb044908dc --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-debuginfo/module.modulemap @@ -0,0 +1,9 @@ +module A { + umbrella "A" module * { export * } +} +module B { + umbrella "B" module * { export * } +} +module C { + umbrella "C" module * { export * } +} diff --git a/clang/test/Modules/lsv-debuginfo.cpp b/clang/test/Modules/lsv-debuginfo.cpp new file mode 100755 index 00000000000..4a2644f6b31 --- /dev/null +++ b/clang/test/Modules/lsv-debuginfo.cpp @@ -0,0 +1,39 @@ +// Test C++ -gmodules debug info in the PCMs with local submodule visibility. +// REQUIRES: asserts +// RUN: rm -rf %t +// RUN: %clang_cc1 -triple %itanium_abi_triple \ +// RUN: -fmodules-local-submodule-visibility %s \ +// RUN: -dwarf-ext-refs -fmodule-format=obj -debug-info-kind=standalone \ +// RUN: -dwarf-version=4 -fmodules -fimplicit-module-maps \ +// RUN: -fmodules-cache-path="%t" -o %t.ll -I%S/Inputs/lsv-debuginfo \ +// RUN: -mllvm -debug-only=pchcontainer &>%t-mod.ll +// RUN: cat %t-mod.ll | FileCheck %s + +// RUN: rm -rf %t +// RUN: %clang_cc1 -triple %itanium_abi_triple \ +// RUN: -fmodules-local-submodule-visibility %s \ +// RUN: -dwarf-ext-refs -fmodule-format=obj -debug-info-kind=standalone \ +// RUN: -dwarf-version=4 -fmodules -fimplicit-module-maps \ +// RUN: -fmodules-cache-path="%t" -o %t.ll -I%S/Inputs/lsv-debuginfo \ +// RUN: -mllvm -debug-only=pchcontainer &>%t-mod.ll \ +// RUN: -DWITH_NAMESPACE +// RUN: cat %t-mod.ll | FileCheck %s + +// ADT +// CHECK: @__clang_ast = + +// B +// CHECK: @__clang_ast = + +// This type isn't anchored anywhere, expect a full definition. +// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4, 16>", +// CHECK-SAME: elements: + +// C +// CHECK: @__clang_ast = + +// Here, too. +// CHECK: !DICompositeType({{.*}}, name: "AlignedCharArray<4, 16>", +// CHECK-SAME: elements: + +#include <B/B.h> |