From 21530f7c4e60b731b9f28d6fd0b764aff74473e2 Mon Sep 17 00:00:00 2001
From: Eli Friedman <eli.friedman@gmail.com>
Date: Fri, 14 Sep 2012 00:51:36 +0000
Subject: [PATCH] Fix abbreviation for CharacterLiteral in AST serialization. 
 PR13806.

llvm-svn: 163863
---
 clang/lib/Serialization/ASTWriterDecl.cpp | 2 +-
 clang/test/PCH/cxx_exprs.cpp              | 6 ++++++
 clang/test/PCH/cxx_exprs.h                | 5 +++++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp
index baa8a0e4cd48..76a23321432b 100644
--- a/clang/lib/Serialization/ASTWriterDecl.cpp
+++ b/clang/lib/Serialization/ASTWriterDecl.cpp
@@ -1619,7 +1619,7 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
   //Character Literal
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // getValue
   Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Location
-  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); //IsWide
+  Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // getKind
   CharacterLiteralAbbrev = Stream.EmitAbbrev(Abv);
 
   Abv = new BitCodeAbbrev();
diff --git a/clang/test/PCH/cxx_exprs.cpp b/clang/test/PCH/cxx_exprs.cpp
index 4cd9bae1fa4c..01fc33a9a844 100644
--- a/clang/test/PCH/cxx_exprs.cpp
+++ b/clang/test/PCH/cxx_exprs.cpp
@@ -37,3 +37,9 @@ cxx_null_ptr_result null_ptr = nullptr;
 // CXXTypeidExpr
 typeid_result1 typeid_1 = 0;
 typeid_result2 typeid_2 = 0;
+
+// CharacterLiteral variants
+static_assert(char_value == 97, "char_value is correct");
+static_assert(wchar_t_value == 305, "wchar_t_value is correct");
+static_assert(char16_t_value == 231, "char16_t_value is correct");
+static_assert(char32_t_value == 8706, "char32_t_value is correct");
diff --git a/clang/test/PCH/cxx_exprs.h b/clang/test/PCH/cxx_exprs.h
index 67ab4a6d34db..35db82efaeec 100644
--- a/clang/test/PCH/cxx_exprs.h
+++ b/clang/test/PCH/cxx_exprs.h
@@ -81,3 +81,8 @@ CtorStruct create_CtorStruct() {
   return CtorStruct(1, 3.14f); // CXXTemporaryObjectExpr
 };
 
+// CharacterLiteral variants
+const char char_value = 'a';
+const wchar_t wchar_t_value = L'ı';
+const char16_t char16_t_value = u'ç';
+const char32_t char32_t_value = U'∂';