diff options
| author | Nathan Ridge <zeratul976@hotmail.com> | 2020-04-01 01:29:58 -0400 |
|---|---|---|
| committer | Haojian Wu <hokein.wu@gmail.com> | 2020-06-10 11:34:30 +0200 |
| commit | cbc9b92df4582617314b08d1ecef41d355733874 (patch) | |
| tree | 62fe1f37cf81ed69d78b6289eb7462196057f4c9 | |
| parent | 38f995e4cb4c77c4a64cd1fedc1aeae91d8281cc (diff) | |
| download | bcm5719-llvm-cbc9b92df4582617314b08d1ecef41d355733874.tar.gz bcm5719-llvm-cbc9b92df4582617314b08d1ecef41d355733874.zip | |
[clang] Persist Attr::IsPackExpansion into the PCH
Summary: Fixes https://github.com/clangd/clangd/issues/309
Subscribers: ilya-biryukov, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D77194
(cherry picked from commit 8b3b7556e9ab6084e9fd337d64dac1c165867d32)
| -rw-r--r-- | clang/test/PCH/cxx-attrs-packexpansion.cpp | 25 | ||||
| -rw-r--r-- | clang/utils/TableGen/ClangAttrEmitter.cpp | 3 |
2 files changed, 28 insertions, 0 deletions
diff --git a/clang/test/PCH/cxx-attrs-packexpansion.cpp b/clang/test/PCH/cxx-attrs-packexpansion.cpp new file mode 100644 index 00000000000..6d292ec1e3e --- /dev/null +++ b/clang/test/PCH/cxx-attrs-packexpansion.cpp @@ -0,0 +1,25 @@ +// Test this without pch. +// RUN: %clang_cc1 -include %s -emit-llvm -o - %s + +// Test with pch. +// RUN: %clang_cc1 -emit-pch -o %t %s +// RUN: %clang_cc1 -include-pch %t -emit-llvm -o - %s + +#ifndef HEADER +#define HEADER + +template<typename T, typename... Types> +struct static_variant { + alignas(Types...) T storage[10]; +}; + +#else + +struct A { + static_variant<int> a; +}; +struct B { + static_variant<A> _b; +}; + +#endif diff --git a/clang/utils/TableGen/ClangAttrEmitter.cpp b/clang/utils/TableGen/ClangAttrEmitter.cpp index 4c3742c8e33..2fce9d42813 100644 --- a/clang/utils/TableGen/ClangAttrEmitter.cpp +++ b/clang/utils/TableGen/ClangAttrEmitter.cpp @@ -2825,6 +2825,7 @@ void EmitClangAttrPCHRead(RecordKeeper &Records, raw_ostream &OS) { if (R.isSubClassOf(InhClass)) OS << " bool isInherited = Record.readInt();\n"; OS << " bool isImplicit = Record.readInt();\n"; + OS << " bool isPackExpansion = Record.readInt();\n"; ArgRecords = R.getValueAsListOfDefs("Args"); Args.clear(); for (const auto *Arg : ArgRecords) { @@ -2840,6 +2841,7 @@ void EmitClangAttrPCHRead(RecordKeeper &Records, raw_ostream &OS) { if (R.isSubClassOf(InhClass)) OS << " cast<InheritableAttr>(New)->setInherited(isInherited);\n"; OS << " New->setImplicit(isImplicit);\n"; + OS << " New->setPackExpansion(isPackExpansion);\n"; OS << " break;\n"; OS << " }\n"; } @@ -2866,6 +2868,7 @@ void EmitClangAttrPCHWrite(RecordKeeper &Records, raw_ostream &OS) { if (R.isSubClassOf(InhClass)) OS << " Record.push_back(SA->isInherited());\n"; OS << " Record.push_back(A->isImplicit());\n"; + OS << " Record.push_back(A->isPackExpansion());\n"; for (const auto *Arg : Args) createArgument(*Arg, R.getName())->writePCHWrite(OS); |

