diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-30 08:49:25 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-06-30 08:49:25 +0000 |
| commit | 4a57bd0d6289209e559f2ee95fb5f016700d0f0e (patch) | |
| tree | 93184e309a534ed4a8dd51fde71269927f18bbe0 | |
| parent | f9f47c8e54539f7b5c7108a5f25abcf8f2108deb (diff) | |
| download | bcm5719-llvm-4a57bd0d6289209e559f2ee95fb5f016700d0f0e.tar.gz bcm5719-llvm-4a57bd0d6289209e559f2ee95fb5f016700d0f0e.zip | |
Support DependentSizedArrayType for PCH.
llvm-svn: 107267
| -rw-r--r-- | clang/include/clang/Frontend/PCHBitCodes.h | 4 | ||||
| -rw-r--r-- | clang/lib/Frontend/PCHReader.cpp | 17 | ||||
| -rw-r--r-- | clang/lib/Frontend/PCHWriter.cpp | 6 | ||||
| -rw-r--r-- | clang/test/PCH/cxx-templates.h | 1 |
4 files changed, 25 insertions, 3 deletions
diff --git a/clang/include/clang/Frontend/PCHBitCodes.h b/clang/include/clang/Frontend/PCHBitCodes.h index fec40c825da..9bb537a4908 100644 --- a/clang/include/clang/Frontend/PCHBitCodes.h +++ b/clang/include/clang/Frontend/PCHBitCodes.h @@ -425,7 +425,9 @@ namespace clang { /// \brief A DependentNameType record. TYPE_DEPENDENT_NAME = 31, /// \brief A DependentTemplateSpecializationType record. - TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32 + TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32, + /// \brief A DependentSizedArrayType record. + TYPE_DEPENDENT_SIZED_ARRAY = 33 }; /// \brief The type IDs for special types constructed by semantic diff --git a/clang/lib/Frontend/PCHReader.cpp b/clang/lib/Frontend/PCHReader.cpp index a526fd6dc5c..b5ddc86369d 100644 --- a/clang/lib/Frontend/PCHReader.cpp +++ b/clang/lib/Frontend/PCHReader.cpp @@ -2226,6 +2226,23 @@ QualType PCHReader::ReadTypeRecord(uint64_t Offset) { return Context->getDependentTemplateSpecializationType(Keyword, NNS, Name, Args.size(), Args.data()); } + + case pch::TYPE_DEPENDENT_SIZED_ARRAY: { + unsigned Idx = 0; + + // ArrayType + QualType ElementType = GetType(Record[Idx++]); + ArrayType::ArraySizeModifier ASM + = (ArrayType::ArraySizeModifier)Record[Idx++]; + unsigned IndexTypeQuals = Record[Idx++]; + + // DependentSizedArrayType + Expr *NumElts = ReadExpr(); + SourceRange Brackets = ReadSourceRange(Record, Idx); + + return Context->getDependentSizedArrayType(ElementType, NumElts, ASM, + IndexTypeQuals, Brackets); + } case pch::TYPE_TEMPLATE_SPECIALIZATION: { unsigned Idx = 0; diff --git a/clang/lib/Frontend/PCHWriter.cpp b/clang/lib/Frontend/PCHWriter.cpp index d947f7250d2..41815314d79 100644 --- a/clang/lib/Frontend/PCHWriter.cpp +++ b/clang/lib/Frontend/PCHWriter.cpp @@ -230,8 +230,10 @@ PCHTypeWriter::VisitTemplateSpecializationType( void PCHTypeWriter::VisitDependentSizedArrayType(const DependentSizedArrayType *T) { - // FIXME: Serialize this type (C++ only) - assert(false && "Cannot serialize dependent sized array types"); + VisitArrayType(T); + Writer.AddStmt(T->getSizeExpr()); + Writer.AddSourceRange(T->getBracketsRange(), Record); + Code = pch::TYPE_DEPENDENT_SIZED_ARRAY; } void diff --git a/clang/test/PCH/cxx-templates.h b/clang/test/PCH/cxx-templates.h index bfc0def146a..c089e1c5a9b 100644 --- a/clang/test/PCH/cxx-templates.h +++ b/clang/test/PCH/cxx-templates.h @@ -22,6 +22,7 @@ template <typename T, int y> T templ_f(T x) { int z = templ_f<int, 5>(3); z = tmpl_f2<y+2>(); + T data[y]; return x+y; } |

