mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-07 08:34:59 +00:00
[Frontend] Fix crash when serializing diagnostics with really long text.
rdar://21896690 llvm-svn: 244245
This commit is contained in:
parent
6443cce233
commit
e26aea5b29
@ -478,7 +478,7 @@ void SDiagsWriter::EmitBlockInfoBlock() {
|
||||
AddSourceLocationAbbrev(Abbrev);
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Category.
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 10)); // Mapped Diag ID.
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 16)); // Text size.
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 16)); // Text size.
|
||||
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Diagnostc text.
|
||||
Abbrevs.set(RECORD_DIAG, Stream.EmitBlockInfoAbbrev(BLOCK_DIAG, Abbrev));
|
||||
|
||||
|
30
clang/test/Misc/serialized-diags-really-long-text.cpp
Normal file
30
clang/test/Misc/serialized-diags-really-long-text.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
// Make sure that diagnostics serialization does not crash with a really long diagnostic text.
|
||||
|
||||
// RUN: not %clang_cc1 -std=c++11 %s -serialize-diagnostic-file %t.dia
|
||||
// RUN: c-index-test -read-diagnostics %t.dia 2>&1 | FileCheck %s
|
||||
|
||||
typedef class AReallyLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongName {} alias;
|
||||
|
||||
template <int N, typename ...T>
|
||||
struct MyTS {
|
||||
typedef MyTS<N-1, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias,
|
||||
alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, alias, T...> type;
|
||||
static type callme() {
|
||||
return type::callme();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename ...T>
|
||||
struct MyTS<0, T...> {};
|
||||
|
||||
void foo() {
|
||||
// CHECK: [[@LINE+1]]:20: note: in instantiation of member function
|
||||
int e = MyTS<2>::callme();
|
||||
}
|
Loading…
Reference in New Issue
Block a user