[Serialization] Serialize DependentSizedExtVectorType
rdar://30659700 Differential Revision: https://reviews.llvm.org/D31134 llvm-svn: 298493
This commit is contained in:
parent
28264edea3
commit
00aee43734
@ -927,7 +927,9 @@ namespace clang {
|
||||
/// \brief An ObjCTypeParamType record.
|
||||
TYPE_OBJC_TYPE_PARAM = 44,
|
||||
/// \brief A DeducedTemplateSpecializationType record.
|
||||
TYPE_DEDUCED_TEMPLATE_SPECIALIZATION = 45
|
||||
TYPE_DEDUCED_TEMPLATE_SPECIALIZATION = 45,
|
||||
/// \brief A DependentSizedExtVectorType record.
|
||||
TYPE_DEPENDENT_SIZED_EXT_VECTOR = 46
|
||||
};
|
||||
|
||||
/// \brief The type IDs for special types constructed by semantic
|
||||
|
||||
@ -6073,6 +6073,17 @@ QualType ASTReader::readTypeRecord(unsigned Index) {
|
||||
return Context.getPipeType(ElementType, ReadOnly);
|
||||
}
|
||||
|
||||
case TYPE_DEPENDENT_SIZED_EXT_VECTOR: {
|
||||
unsigned Idx = 0;
|
||||
|
||||
// DependentSizedExtVectorType
|
||||
QualType ElementType = readType(*Loc.F, Record, Idx);
|
||||
Expr *SizeExpr = ReadExpr(*Loc.F);
|
||||
SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
|
||||
|
||||
return Context.getDependentSizedExtVectorType(ElementType, SizeExpr,
|
||||
AttrLoc);
|
||||
}
|
||||
}
|
||||
llvm_unreachable("Invalid TypeCode!");
|
||||
}
|
||||
|
||||
@ -426,8 +426,10 @@ ASTTypeWriter::VisitDependentSizedArrayType(const DependentSizedArrayType *T) {
|
||||
void
|
||||
ASTTypeWriter::VisitDependentSizedExtVectorType(
|
||||
const DependentSizedExtVectorType *T) {
|
||||
// FIXME: Serialize this type (C++ only)
|
||||
llvm_unreachable("Cannot serialize dependent sized extended vector types");
|
||||
Record.AddTypeRef(T->getElementType());
|
||||
Record.AddStmt(T->getSizeExpr());
|
||||
Record.AddSourceLocation(T->getAttributeLoc());
|
||||
Code = TYPE_DEPENDENT_SIZED_EXT_VECTOR;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
18
clang/test/PCH/cxx-dependent-sized-ext-vector.cpp
Normal file
18
clang/test/PCH/cxx-dependent-sized-ext-vector.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
// RUN: %clang_cc1 -std=c++11 -emit-pch %s -o %t
|
||||
// RUN: %clang_cc1 -std=c++11 -include-pch %t -verify %s
|
||||
|
||||
#ifndef HEADER_INCLUDED
|
||||
|
||||
#define HEADER_INCLUDED
|
||||
|
||||
template<typename T, int N>
|
||||
using vec = T __attribute__((ext_vector_type(N)));
|
||||
|
||||
#else
|
||||
|
||||
void test() {
|
||||
vec<float, 2> a; // expected-error@-5 {{zero vector size}}
|
||||
vec<float, 0> b; // expected-note {{in instantiation of template type alias 'vec' requested here}}
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
x
Reference in New Issue
Block a user