summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2018-07-10 20:51:41 +0000
committerErich Keane <erich.keane@intel.com>2018-07-10 20:51:41 +0000
commit9960b8f13aed041cf48633a6510ad865349c0341 (patch)
treeb5b55e4b8ca9a926d141c30d8eb1f64f3ea760b3 /clang/lib
parent7b8c12e7cc7e5a034a61d4e3978e02529104c382 (diff)
downloadbcm5719-llvm-9960b8f13aed041cf48633a6510ad865349c0341.tar.gz
bcm5719-llvm-9960b8f13aed041cf48633a6510ad865349c0341.zip
Revert -r336726, which included more files than intended.
llvm-svn: 336727
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/ASTContext.cpp39
-rw-r--r--clang/lib/AST/ASTStructuralEquivalence.cpp14
-rw-r--r--clang/lib/AST/ItaniumMangle.cpp38
-rw-r--r--clang/lib/AST/MicrosoftMangle.cpp10
-rw-r--r--clang/lib/AST/Type.cpp23
-rw-r--r--clang/lib/AST/TypePrinter.cpp51
-rw-r--r--clang/lib/CodeGen/CodeGenFunction.cpp22
-rw-r--r--clang/lib/CodeGen/CodeGenFunction.h74
-rw-r--r--clang/lib/Sema/SemaTemplate.cpp5
-rw-r--r--clang/lib/Sema/SemaTemplateDeduction.cpp57
-rw-r--r--clang/lib/Sema/SemaType.cpp116
-rw-r--r--clang/lib/Sema/TreeTransform.h53
-rw-r--r--clang/lib/Serialization/ASTReader.cpp15
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp12
14 files changed, 100 insertions, 429 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index ac6d07f50b4..ca54d8f6759 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -3035,7 +3035,6 @@ QualType ASTContext::getVariableArrayDecayedType(QualType type) const {
case Type::Builtin:
case Type::Complex:
case Type::Vector:
- case Type::DependentVector:
case Type::ExtVector:
case Type::DependentSizedExtVector:
case Type::DependentAddressSpace:
@@ -3313,44 +3312,6 @@ QualType ASTContext::getVectorType(QualType vecType, unsigned NumElts,
Types.push_back(New);
return QualType(New, 0);
}
-QualType
-ASTContext::getDependentVectorType(QualType VecType, Expr *SizeExpr,
- SourceLocation AttrLoc,
- VectorType::VectorKind VecKind) const {
- llvm::FoldingSetNodeID ID;
- DependentVectorType::Profile(ID, *this, getCanonicalType(VecType), SizeExpr,
- VecKind);
- void *InsertPos = nullptr;
- DependentVectorType *Canon =
- DependentVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
- DependentVectorType *New;
-
- if (Canon) {
- New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, QualType(Canon, 0), SizeExpr, AttrLoc, VecKind);
- } else {
- QualType CanonVecTy = getCanonicalType(VecType);
- if (CanonVecTy == VecType) {
- New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, QualType(), SizeExpr, AttrLoc, VecKind);
-
- DependentVectorType *CanonCheck =
- DependentVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
- assert(!CanonCheck &&
- "Dependent-sized vector_size canonical type broken");
- (void)CanonCheck;
- DependentVectorTypes.InsertNode(New, InsertPos);
- } else {
- QualType Canon = getDependentSizedExtVectorType(CanonVecTy, SizeExpr,
- SourceLocation());
- New = new (*this, TypeAlignment) DependentVectorType(
- *this, VecType, Canon, SizeExpr, AttrLoc, VecKind);
- }
- }
-
- Types.push_back(New);
- return QualType(New, 0);
-}
/// getExtVectorType - Return the unique reference to an extended vector type of
/// the specified element type and size. VectorType must be a built-in type.
diff --git a/clang/lib/AST/ASTStructuralEquivalence.cpp b/clang/lib/AST/ASTStructuralEquivalence.cpp
index 885b6c2741b..b543991873a 100644
--- a/clang/lib/AST/ASTStructuralEquivalence.cpp
+++ b/clang/lib/AST/ASTStructuralEquivalence.cpp
@@ -405,20 +405,6 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
break;
}
- case Type::DependentVector: {
- const auto *Vec1 = cast<DependentVectorType>(T1);
- const auto *Vec2 = cast<DependentVectorType>(T2);
- if (Vec1->getVectorKind() != Vec2->getVectorKind())
- return false;
- if (!IsStructurallyEquivalent(Context, Vec1->getSizeExpr(),
- Vec2->getSizeExpr()))
- return false;
- if (!IsStructurallyEquivalent(Context, Vec1->getElementType(),
- Vec2->getElementType()))
- return false;
- break;
- }
-
case Type::Vector:
case Type::ExtVector: {
const auto *Vec1 = cast<VectorType>(T1);
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index 341ea5a3385..d8c435991ec 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -539,9 +539,7 @@ private:
void mangleBareFunctionType(const FunctionProtoType *T, bool MangleReturnType,
const FunctionDecl *FD = nullptr);
void mangleNeonVectorType(const VectorType *T);
- void mangleNeonVectorType(const DependentVectorType *T);
void mangleAArch64NeonVectorType(const VectorType *T);
- void mangleAArch64NeonVectorType(const DependentVectorType *T);
void mangleIntegerLiteral(QualType T, const llvm::APSInt &Value);
void mangleMemberExprBase(const Expr *base, bool isArrow);
@@ -1932,7 +1930,6 @@ bool CXXNameMangler::mangleUnresolvedTypeOrSimpleId(QualType Ty,
case Type::VariableArray:
case Type::DependentSizedArray:
case Type::DependentAddressSpace:
- case Type::DependentVector:
case Type::DependentSizedExtVector:
case Type::Vector:
case Type::ExtVector:
@@ -3003,11 +3000,6 @@ void CXXNameMangler::mangleNeonVectorType(const VectorType *T) {
Out << BaseName << EltName;
}
-void CXXNameMangler::mangleNeonVectorType(const DependentVectorType *T) {
- llvm_unreachable(
- "Mangling for Dependent Sized Neon Vector not yet implemented");
-}
-
static StringRef mangleAArch64VectorBase(const BuiltinType *EltType) {
switch (EltType->getKind()) {
case BuiltinType::SChar:
@@ -3075,10 +3067,6 @@ void CXXNameMangler::mangleAArch64NeonVectorType(const VectorType *T) {
("__" + EltName + "x" + Twine(T->getNumElements()) + "_t").str();
Out << TypeName.length() << TypeName;
}
-void CXXNameMangler::mangleAArch64NeonVectorType(const DependentVectorType *T) {
- llvm_unreachable(
- "Mangling for Dependent Sized AArch64 Neon Vector not yet implemented");
-}
// GNU extension: vector types
// <type> ::= <vector-type>
@@ -3109,32 +3097,6 @@ void CXXNameMangler::mangleType(const VectorType *T) {
else
mangleType(T->getElementType());
}
-
-void CXXNameMangler::mangleType(const DependentVectorType *T) {
- if ((T->getVectorKind() == VectorType::NeonVector ||
- T->getVectorKind() == VectorType::NeonPolyVector)) {
- llvm::Triple Target = getASTContext().getTargetInfo().getTriple();
- llvm::Triple::ArchType Arch =
- getASTContext().getTargetInfo().getTriple().getArch();
- if ((Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::aarch64_be) &&
- !Target.isOSDarwin())
- mangleAArch64NeonVectorType(T);
- else
- mangleNeonVectorType(T);
- return;
- }
-
- Out << "Dv";
- mangleExpression(T->getSizeExpr());
- Out << '_';
- if (T->getVectorKind() == VectorType::AltiVecPixel)
- Out << 'p';
- else if (T->getVectorKind() == VectorType::AltiVecBool)
- Out << 'b';
- else
- mangleType(T->getElementType());
-}
-
void CXXNameMangler::mangleType(const ExtVectorType *T) {
mangleType(static_cast<const VectorType*>(T));
}
diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp
index f9cd24ce9ab..32c26270ecb 100644
--- a/clang/lib/AST/MicrosoftMangle.cpp
+++ b/clang/lib/AST/MicrosoftMangle.cpp
@@ -2514,16 +2514,6 @@ void MicrosoftCXXNameMangler::mangleType(const ExtVectorType *T,
Qualifiers Quals, SourceRange Range) {
mangleType(static_cast<const VectorType *>(T), Quals, Range);
}
-
-void MicrosoftCXXNameMangler::mangleType(const DependentVectorType *T,
- Qualifiers, SourceRange Range) {
- DiagnosticsEngine &Diags = Context.getDiags();
- unsigned DiagID = Diags.getCustomDiagID(
- DiagnosticsEngine::Error,
- "cannot mangle this dependent-sized vector type yet");
- Diags.Report(Range.getBegin(), DiagID) << Range;
-}
-
void MicrosoftCXXNameMangler::mangleType(const DependentSizedExtVectorType *T,
Qualifiers, SourceRange Range) {
DiagnosticsEngine &Diags = Context.getDiags();
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index b25965786dc..ddb45868ec1 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -177,28 +177,6 @@ void DependentSizedArrayType::Profile(llvm::FoldingSetNodeID &ID,
E->Profile(ID, Context, true);
}
-DependentVectorType::DependentVectorType(const ASTContext &Context,
- QualType ElementType,
- QualType CanonType, Expr *SizeExpr,
- SourceLocation Loc,
- VectorType::VectorKind VecKind)
- : Type(DependentVector, CanonType, /*Dependent=*/true,
- /*InstantiationDependent=*/true,
- ElementType->isVariablyModifiedType(),
- ElementType->containsUnexpandedParameterPack() ||
- (SizeExpr && SizeExpr->containsUnexpandedParameterPack())),
- Context(Context), ElementType(ElementType), SizeExpr(SizeExpr), Loc(Loc) {
- VectorTypeBits.VecKind = VecKind;
-}
-
-void DependentVectorType::Profile(llvm::FoldingSetNodeID &ID,
- const ASTContext &Context,
- QualType ElementType, Expr *SizeExpr,
- VectorType::VectorKind VecKind) {
- ID.AddPointer(ElementType.getAsOpaquePtr());
- SizeExpr->Profile(ID, Context, true);
-}
-
DependentSizedExtVectorType::DependentSizedExtVectorType(const
ASTContext &Context,
QualType ElementType,
@@ -3805,7 +3783,6 @@ bool Type::canHaveNullability(bool ResultIfUnknown) const {
case Type::IncompleteArray:
case Type::VariableArray:
case Type::DependentSizedArray:
- case Type::DependentVector:
case Type::DependentSizedExtVector:
case Type::Vector:
case Type::ExtVector:
diff --git a/clang/lib/AST/TypePrinter.cpp b/clang/lib/AST/TypePrinter.cpp
index aad52d5e1d4..b424b24574e 100644
--- a/clang/lib/AST/TypePrinter.cpp
+++ b/clang/lib/AST/TypePrinter.cpp
@@ -242,7 +242,6 @@ bool TypePrinter::canPrefixQualifiers(const Type *T,
case Type::RValueReference:
case Type::MemberPointer:
case Type::DependentAddressSpace:
- case Type::DependentVector:
case Type::DependentSizedExtVector:
case Type::Vector:
case Type::ExtVector:
@@ -641,55 +640,7 @@ void TypePrinter::printVectorBefore(const VectorType *T, raw_ostream &OS) {
void TypePrinter::printVectorAfter(const VectorType *T, raw_ostream &OS) {
printAfter(T->getElementType(), OS);
-}
-
-void TypePrinter::printDependentVectorBefore(const DependentVectorType *T,
- raw_ostream &OS) {
- switch (T->getVectorKind()) {
- case VectorType::AltiVecPixel:
- OS << "__vector __pixel ";
- break;
- case VectorType::AltiVecBool:
- OS << "__vector __bool ";
- printBefore(T->getElementType(), OS);
- break;
- case VectorType::AltiVecVector:
- OS << "__vector ";
- printBefore(T->getElementType(), OS);
- break;
- case VectorType::NeonVector:
- OS << "__attribute__((neon_vector_type(";
- if (T->getSizeExpr())
- T->getSizeExpr()->printPretty(OS, nullptr, Policy);
- OS << "))) ";
- printBefore(T->getElementType(), OS);
- break;
- case VectorType::NeonPolyVector:
- OS << "__attribute__((neon_polyvector_type(";
- if (T->getSizeExpr())
- T->getSizeExpr()->printPretty(OS, nullptr, Policy);
- OS << "))) ";
- printBefore(T->getElementType(), OS);
- break;
- case VectorType::GenericVector: {
- // FIXME: We prefer to print the size directly here, but have no way
- // to get the size of the type.
- OS << "__attribute__((__vector_size__(";
- if (T->getSizeExpr())
- T->getSizeExpr()->printPretty(OS, nullptr, Policy);
- OS << " * sizeof(";
- print(T->getElementType(), OS, StringRef());
- OS << ")))) ";
- printBefore(T->getElementType(), OS);
- break;
- }
- }
-}
-
-void TypePrinter::printDependentVectorAfter(const DependentVectorType *T,
- raw_ostream &OS) {
- printAfter(T->getElementType(), OS);
-}
+}
void TypePrinter::printExtVectorBefore(const ExtVectorType *T,
raw_ostream &OS) {
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp
index 99af1a18e81..9ccc0910c31 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -65,9 +65,25 @@ CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext)
: CodeGenTypeCache(cgm), CGM(cgm), Target(cgm.getTarget()),
Builder(cgm, cgm.getModule().getContext(), llvm::ConstantFolder(),
CGBuilderInserterTy(this)),
- SanOpts(CGM.getLangOpts().Sanitize), DebugInfo(CGM.getModuleDebugInfo()),
- PGO(cgm), ShouldEmitLifetimeMarkers(shouldEmitLifetimeMarkers(
- CGM.getCodeGenOpts(), CGM.getLangOpts())) {
+ CurFn(nullptr), ReturnValue(Address::invalid()),
+ CapturedStmtInfo(nullptr), SanOpts(CGM.getLangOpts().Sanitize),
+ IsSanitizerScope(false), CurFuncIsThunk(false), AutoreleaseResult(false),
+ SawAsmBlock(false), IsOutlinedSEHHelper(false), BlockInfo(nullptr),
+ BlockPointer(nullptr), LambdaThisCaptureField(nullptr),
+ NormalCleanupDest(Address::invalid()), NextCleanupDestIndex(1),
+ FirstBlockInfo(nullptr), EHResumeBlock(nullptr), ExceptionSlot(nullptr),
+ EHSelectorSlot(nullptr), DebugInfo(CGM.getModuleDebugInfo()),
+ DisableDebugInfo(false), DidCallStackSave(false), IndirectBranch(nullptr),
+ PGO(cgm), SwitchInsn(nullptr), SwitchWeights(nullptr),
+ CaseRangeBlock(nullptr), UnreachableBlock(nullptr), NumReturnExprs(0),
+ NumSimpleReturnExprs(0), CXXABIThisDecl(nullptr),
+ CXXABIThisValue(nullptr), CXXThisValue(nullptr),
+ CXXStructorImplicitParamDecl(nullptr),
+ CXXStructorImplicitParamValue(nullptr), OutermostConditional(nullptr),
+ CurLexicalScope(nullptr), TerminateLandingPad(nullptr),
+ TerminateHandler(nullptr), TrapBB(nullptr), LargestVectorWidth(0),
+ ShouldEmitLifetimeMarkers(
+ shouldEmitLifetimeMarkers(CGM.getCodeGenOpts(), CGM.getLangOpts())) {
if (!suppressNewContext)
CGM.getCXXABI().getMangleContext().startNewFunction();
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index d6deb655824..b2bcd1cfbd3 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -214,7 +214,7 @@ public:
const Decl *CurCodeDecl;
const CGFunctionInfo *CurFnInfo;
QualType FnRetTy;
- llvm::Function *CurFn = nullptr;
+ llvm::Function *CurFn;
// Holds coroutine data if the current function is a coroutine. We use a
// wrapper to manage its lifetime, so that we don't have to define CGCoroData
@@ -242,7 +242,7 @@ public:
/// ReturnValue - The temporary alloca to hold the return
/// value. This is invalid iff the function has no return value.
- Address ReturnValue = Address::invalid();
+ Address ReturnValue;
/// Return true if a label was seen in the current scope.
bool hasLabelBeenSeenInCurrentScope() const {
@@ -321,7 +321,7 @@ public:
/// Captured 'this' type.
FieldDecl *CXXThisFieldDecl;
};
- CGCapturedStmtInfo *CapturedStmtInfo = nullptr;
+ CGCapturedStmtInfo *CapturedStmtInfo;
/// RAII for correct setting/restoring of CapturedStmtInfo.
class CGCapturedStmtRAII {
@@ -366,7 +366,7 @@ public:
SanitizerSet SanOpts;
/// True if CodeGen currently emits code implementing sanitizer checks.
- bool IsSanitizerScope = false;
+ bool IsSanitizerScope;
/// RAII object to set/unset CodeGenFunction::IsSanitizerScope.
class SanitizerScope {
@@ -378,26 +378,26 @@ public:
/// In C++, whether we are code generating a thunk. This controls whether we
/// should emit cleanups.
- bool CurFuncIsThunk = false;
+ bool CurFuncIsThunk;
/// In ARC, whether we should autorelease the return value.
- bool AutoreleaseResult = false;
+ bool AutoreleaseResult;
/// Whether we processed a Microsoft-style asm block during CodeGen. These can
/// potentially set the return value.
- bool SawAsmBlock = false;
+ bool SawAsmBlock;
const FunctionDecl *CurSEHParent = nullptr;
/// True if the current function is an outlined SEH helper. This can be a
/// finally block or filter expression.
- bool IsOutlinedSEHHelper = false;
+ bool IsOutlinedSEHHelper;
- const CodeGen::CGBlockInfo *BlockInfo = nullptr;
- llvm::Value *BlockPointer = nullptr;
+ const CodeGen::CGBlockInfo *BlockInfo;
+ llvm::Value *BlockPointer;
llvm::DenseMap<const VarDecl *, FieldDecl *> LambdaCaptureFields;
- FieldDecl *LambdaThisCaptureField = nullptr;
+ FieldDecl *LambdaThisCaptureField;
/// A mapping from NRVO variables to the flags used to indicate
/// when the NRVO has been applied to this variable.
@@ -434,23 +434,23 @@ public:
};
/// i32s containing the indexes of the cleanup destinations.
- Address NormalCleanupDest = Address::invalid();
+ Address NormalCleanupDest;
- unsigned NextCleanupDestIndex = 1;
+ unsigned NextCleanupDestIndex;
/// FirstBlockInfo - The head of a singly-linked-list of block layouts.
- CGBlockInfo *FirstBlockInfo = nullptr;
+ CGBlockInfo *FirstBlockInfo;
/// EHResumeBlock - Unified block containing a call to llvm.eh.resume.
- llvm::BasicBlock *EHResumeBlock = nullptr;
+ llvm::BasicBlock *EHResumeBlock;
/// The exception slot. All landing pads write the current exception pointer
/// into this alloca.
- llvm::Value *ExceptionSlot = nullptr;
+ llvm::Value *ExceptionSlot;
/// The selector slot. Under the MandatoryCleanup model, all landing pads
/// write the current selector value into this alloca.
- llvm::AllocaInst *EHSelectorSlot = nullptr;
+ llvm::AllocaInst *EHSelectorSlot;
/// A stack of exception code slots. Entering an __except block pushes a slot
/// on the stack and leaving pops one. The __exception_code() intrinsic loads
@@ -1087,17 +1087,17 @@ public:
private:
CGDebugInfo *DebugInfo;
- bool DisableDebugInfo = false;
+ bool DisableDebugInfo;
/// DidCallStackSave - Whether llvm.stacksave has been called. Used to avoid
/// calling llvm.stacksave for multiple VLAs in the same scope.
- bool DidCallStackSave = false;
+ bool DidCallStackSave;
/// IndirectBranch - The first time an indirect goto is seen we create a block
/// with an indirect branch. Every time we see the address of a label taken,
/// we add the label to the indirect goto. Every subsequent indirect goto is
/// codegen'd as a jump to the IndirectBranch's basic block.
- llvm::IndirectBrInst *IndirectBranch = nullptr;
+ llvm::IndirectBrInst *IndirectBranch;
/// LocalDeclMap - This keeps track of the LLVM allocas or globals for local C
/// decls.
@@ -1247,13 +1247,13 @@ private:
/// SwitchInsn - This is nearest current switch instruction. It is null if
/// current context is not in a switch.
- llvm::SwitchInst *SwitchInsn = nullptr;
+ llvm::SwitchInst *SwitchInsn;
/// The branch weights of SwitchInsn when doing instrumentation based PGO.
- SmallVector<uint64_t, 16> *SwitchWeights = nullptr;
+ SmallVector<uint64_t, 16> *SwitchWeights;
/// CaseRangeBlock - This block holds if condition check for last case
/// statement range in current switch instruction.
- llvm::BasicBlock *CaseRangeBlock = nullptr;
+ llvm::BasicBlock *CaseRangeBlock;
/// OpaqueLValues - Keeps track of the current set of opaque value
/// expressions.
@@ -1270,13 +1270,13 @@ private:
/// A block containing a single 'unreachable' instruction. Created
/// lazily by getUnreachableBlock().
- llvm::BasicBlock *UnreachableBlock = nullptr;
+ llvm::BasicBlock *UnreachableBlock;
/// Counts of the number return expressions in the function.
- unsigned NumReturnExprs = 0;
+ unsigned NumReturnExprs;
/// Count the number of simple (constant) return expressions in the function.
- unsigned NumSimpleReturnExprs = 0;
+ unsigned NumSimpleReturnExprs;
/// The last regular (non-return) debug location (breakpoint) in the function.
SourceLocation LastStopPoint;
@@ -1396,9 +1396,9 @@ public:
private:
/// CXXThisDecl - When generating code for a C++ member function,
/// this will hold the implicit 'this' declaration.
- ImplicitParamDecl *CXXABIThisDecl = nullptr;
- llvm::Value *CXXABIThisValue = nullptr;
- llvm::Value *CXXThisValue = nullptr;
+ ImplicitParamDecl *CXXABIThisDecl;
+ llvm::Value *CXXABIThisValue;
+ llvm::Value *CXXThisValue;
CharUnits CXXABIThisAlignment;
CharUnits CXXThisAlignment;
@@ -1416,16 +1416,16 @@ private:
/// CXXStructorImplicitParamDecl - When generating code for a constructor or
/// destructor, this will hold the implicit argument (e.g. VTT).
- ImplicitParamDecl *CXXStructorImplicitParamDecl = nullptr;
- llvm::Value *CXXStructorImplicitParamValue = nullptr;
+ ImplicitParamDecl *CXXStructorImplicitParamDecl;
+ llvm::Value *CXXStructorImplicitParamValue;
/// OutermostConditional - Points to the outermost active
/// conditional control. This is used so that we know if a
/// temporary should be destroyed conditionally.
- ConditionalEvaluation *OutermostConditional = nullptr;
+ ConditionalEvaluation *OutermostConditional;
/// The current lexical scope.
- LexicalScope *CurLexicalScope = nullptr;
+ LexicalScope *CurLexicalScope;
/// The current source location that should be used for exception
/// handling code.
@@ -1456,16 +1456,16 @@ private:
CurCodeDecl && CurCodeDecl->getAttr<ReturnsNonNullAttr>());
}
- llvm::BasicBlock *TerminateLandingPad = nullptr;
- llvm::BasicBlock *TerminateHandler = nullptr;
- llvm::BasicBlock *TrapBB = nullptr;
+ llvm::BasicBlock *TerminateLandingPad;
+ llvm::BasicBlock *TerminateHandler;
+ llvm::BasicBlock *TrapBB;
/// Terminate funclets keyed by parent funclet pad.
llvm::MapVector<llvm::Value *, llvm::BasicBlock *> TerminateFunclets;
/// Largest vector width used in ths function. Will be used to create a
/// function attribute.
- unsigned LargestVectorWidth = 0;
+ unsigned LargestVectorWidth;
/// True if we need emit the life-time markers.
const bool ShouldEmitLifetimeMarkers;
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 72ee8474f54..68a5196f6b8 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -5346,11 +5346,6 @@ bool UnnamedLocalNoLinkageFinder::VisitVectorType(const VectorType* T) {
return Visit(T->getElementType());
}
-bool UnnamedLocalNoLinkageFinder::VisitDependentVectorType(
- const DependentVectorType *T) {
- return Visit(T->getElementType());
-}
-
bool UnnamedLocalNoLinkageFinder::VisitExtVectorType(const ExtVectorType* T) {
return Visit(T->getElementType());
}
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp
index 4e2fa31f9d2..fd4197ce2ad 100644
--- a/clang/lib/Sema/SemaTemplateDeduction.cpp
+++ b/clang/lib/Sema/SemaTemplateDeduction.cpp
@@ -1837,55 +1837,6 @@ DeduceTemplateArgumentsByTypeMatch(Sema &S,
return Sema::TDK_NonDeducedMismatch;
}
- case Type::DependentVector: {
- const DependentVectorType *VectorParam = cast<DependentVectorType>(Param);
-
- if (const VectorType *VectorArg = dyn_cast<VectorType>(Arg)) {
- // Perform deduction on the element types.
- if (Sema::TemplateDeductionResult Result =
- DeduceTemplateArgumentsByTypeMatch(
- S, TemplateParams, VectorParam->getElementType(),
- VectorArg->getElementType(), Info, Deduced, TDF))
- return Result;
-
- // Perform deduction on the vector size, if we can.
- NonTypeTemplateParmDecl *NTTP =
- getDeducedParameterFromExpr(Info, VectorParam->getSizeExpr());
- if (!NTTP)
- return Sema::TDK_Success;
-
- llvm::APSInt ArgSize(S.Context.getTypeSize(S.Context.IntTy), false);
- ArgSize = VectorArg->getNumElements();
- // Note that we use the "array bound" rules here; just like in that
- // case, we don't have any particular type for the vector size, but
- // we can provide one if necessary.
- return DeduceNonTypeTemplateArgument(S, TemplateParams, NTTP, ArgSize,
- S.Context.IntTy, true, Info,
- Deduced);
- }
-
- if (const DependentVectorType *VectorArg =
- dyn_cast<DependentVectorType>(Arg)) {
- // Perform deduction on the element types.
- if (Sema::TemplateDeductionResult Result =
- DeduceTemplateArgumentsByTypeMatch(
- S, TemplateParams, VectorParam->getElementType(),
- VectorArg->getElementType(), Info, Deduced, TDF))
- return Result;
-
- // Perform deduction on the vector size, if we can.
- NonTypeTemplateParmDecl *NTTP =
- getDeducedParameterFromExpr(Info, VectorParam->getSizeExpr());
- if (!NTTP)
- return Sema::TDK_Success;
-
- return DeduceNonTypeTemplateArgument(
- S, TemplateParams, NTTP, VectorArg->getSizeExpr(), Info, Deduced);
- }
-
- return Sema::TDK_NonDeducedMismatch;
- }
-
// (clang extension)
//
// T __attribute__(((ext_vector_type(N))))
@@ -5276,14 +5227,6 @@ MarkUsedTemplateParameters(ASTContext &Ctx, QualType T,
OnlyDeduced, Depth, Used);
break;
- case Type::DependentVector: {
- const DependentVectorType *VecType = cast<DependentVectorType>(T);
- MarkUsedTemplateParameters(Ctx, VecType->getElementType(), OnlyDeduced,
- Depth, Used);
- MarkUsedTemplateParameters(Ctx, VecType->getSizeExpr(), OnlyDeduced, Depth,
- Used);
- break;
- }
case Type::DependentSizedExtVector: {
const DependentSizedExtVectorType *VecType
= cast<DependentSizedExtVectorType>(T);
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 90cdf3290a5..978c1cc0158 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -2294,58 +2294,6 @@ QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
return T;
}
-QualType Sema::BuildVectorType(QualType CurType, Expr *SizeExpr,
- SourceLocation AttrLoc) {
- // The base type must be integer (not Boolean or enumeration) or float, and
- // can't already be a vector.
- if (!CurType->isDependentType() &&
- (!CurType->isBuiltinType() || CurType->isBooleanType() ||
- (!CurType->isIntegerType() && !CurType->isRealFloatingType()))) {
- Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << CurType;
- return QualType();
- }
-
- if (SizeExpr->isTypeDependent() || SizeExpr->isValueDependent())
- return Context.getDependentVectorType(CurType, SizeExpr, AttrLoc,
- VectorType::GenericVector);
-
- llvm::APSInt VecSize(32);
- if (!SizeExpr->isIntegerConstantExpr(VecSize, Context)) {
- Diag(AttrLoc, diag::err_attribute_argument_type)
- << "vector_size" << AANT_ArgumentIntegerConstant
- << SizeExpr->getSourceRange();
- return QualType();
- }
-
- if (CurType->isDependentType())
- return Context.getDependentVectorType(CurType, SizeExpr, AttrLoc,
- VectorType::GenericVector);
-
- unsigned VectorSize = static_cast<unsigned>(VecSize.getZExtValue() * 8);
- unsigned TypeSize = static_cast<unsigned>(Context.getTypeSize(CurType));
-
- if (VectorSize == 0) {
- Diag(AttrLoc, diag::err_attribute_zero_size) << SizeExpr->getSourceRange();
- return QualType();
- }
-
- // vecSize is specified in bytes - convert to bits.
- if (VectorSize % TypeSize) {
- Diag(AttrLoc, diag::err_attribute_invalid_size)
- << SizeExpr->getSourceRange();
- return QualType();
- }
-
- if (VectorType::isVectorSizeTooLarge(VectorSize / TypeSize)) {
- Diag(AttrLoc, diag::err_attribute_size_too_large)
- << SizeExpr->getSourceRange();
- return QualType();
- }
-
- return Context.getVectorType(CurType, VectorSize / TypeSize,
- VectorType::GenericVector);
-}
-
/// Build an ext-vector type.
///
/// Run the required checks for the extended vector type.
@@ -6981,30 +6929,52 @@ static void HandleVectorSizeAttr(QualType& CurType, const AttributeList &Attr,
Attr.setInvalid();
return;
}
-
- Expr *SizeExpr;
- // Special case where the argument is a template id.
- if (Attr.isArgIdent(0)) {
- CXXScopeSpec SS;
- SourceLocation TemplateKWLoc;
- UnqualifiedId Id;
- Id.setIdentifier(Attr.getArgAsIdent(0)->Ident, Attr.getLoc());
-
- ExprResult Size = S.ActOnIdExpression(S.getCurScope(), SS, TemplateKWLoc,
- Id, false, false);
-
- if (Size.isInvalid())
- return;
- SizeExpr = Size.get();
- } else {
- SizeExpr = Attr.getArgAsExpr(0);
+ Expr *sizeExpr = static_cast<Expr *>(Attr.getArgAsExpr(0));
+ llvm::APSInt vecSize(32);
+ if (sizeExpr->isTypeDependent() || sizeExpr->isValueDependent() ||
+ !sizeExpr->isIntegerConstantExpr(vecSize, S.Context)) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_argument_type)
+ << Attr.getName() << AANT_ArgumentIntegerConstant
+ << sizeExpr->getSourceRange();
+ Attr.setInvalid();
+ return;
+ }
+ // The base type must be integer (not Boolean or enumeration) or float, and
+ // can't already be a vector.
+ if (!CurType->isBuiltinType() || CurType->isBooleanType() ||
+ (!CurType->isIntegerType() && !CurType->isRealFloatingType())) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
+ Attr.setInvalid();
+ return;
}
+ unsigned typeSize = static_cast<unsigned>(S.Context.getTypeSize(CurType));
+ // vecSize is specified in bytes - convert to bits.
+ unsigned vectorSize = static_cast<unsigned>(vecSize.getZExtValue() * 8);
- QualType T = S.BuildVectorType(CurType, SizeExpr, Attr.getLoc());
- if (!T.isNull())
- CurType = T;
- else
+ // the vector size needs to be an integral multiple of the type size.
+ if (vectorSize % typeSize) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_invalid_size)
+ << sizeExpr->getSourceRange();
+ Attr.setInvalid();
+ return;
+ }
+ if (VectorType::isVectorSizeTooLarge(vectorSize / typeSize)) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_size_too_large)
+ << sizeExpr->getSourceRange();
+ Attr.setInvalid();
+ return;
+ }
+ if (vectorSize == 0) {
+ S.Diag(Attr.getLoc(), diag::err_attribute_zero_size)
+ << sizeExpr->getSourceRange();
Attr.setInvalid();
+ return;
+ }
+
+ // Success! Instantiate the vector type, the number of elements is > 0, and
+ // not required to be a power of 2, unlike GCC.
+ CurType = S.Context.getVectorType(CurType, vectorSize/typeSize,
+ VectorType::GenericVector);
}
/// Process the OpenCL-like ext_vector_type attribute when it occurs on
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index a933b6774b0..66c947abb31 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -818,15 +818,6 @@ public:
QualType RebuildVectorType(QualType ElementType, unsigned NumElements,
VectorType::VectorKind VecKind);
- /// Build a new potentially dependently-sized extended vector type
- /// given the element type and number of elements.
- ///
- /// By default, performs semantic analysis when building the vector type.
- /// Subclasses may override this routine to provide different behavior.
- QualType RebuildDependentVectorType(QualType ElementType, Expr *SizeExpr,
- SourceLocation AttributeLoc,
- VectorType::VectorKind);
-
/// Build a new extended vector type given the element type and
/// number of elements.
///
@@ -4755,43 +4746,6 @@ TreeTransform<Derived>::TransformDependentSizedArrayType(TypeLocBuilder &TLB,
return Result;
}
-template <typename Derived>
-QualType TreeTransform<Derived>::TransformDependentVectorType(
- TypeLocBuilder &TLB, DependentVectorTypeLoc TL) {
- const DependentVectorType *T = TL.getTypePtr();
- QualType ElementType = getDerived().TransformType(T->getElementType());
- if (ElementType.isNull())
- return QualType();
-
- EnterExpressionEvaluationContext Unevaluated(
- SemaRef, Sema::ExpressionEvaluationContext::ConstantEvaluated);
-
- ExprResult Size = getDerived().TransformExpr(T->getSizeExpr());
- Size = SemaRef.ActOnConstantExpression(Size);
- if (Size.isInvalid())
- return QualType();
-
- QualType Result = TL.getType();
- if (getDerived().AlwaysRebuild() || ElementType != T->getElementType() ||
- Size.get() != T->getSizeExpr()) {
- Result = getDerived().RebuildDependentVectorType(
- ElementType, Size.get(), T->getAttributeLoc(), T->getVectorKind());
- if (Result.isNull())
- return QualType();
- }
-
- // Result might be dependent or not.
- if (isa<DependentVectorType>(Result)) {
- DependentVectorTypeLoc NewTL = TLB.push<DependentVectorTypeLoc>(Result);
- NewTL.setNameLoc(TL.getNameLoc());
- } else {
- VectorTypeLoc NewTL = TLB.push<VectorTypeLoc>(Result);
- NewTL.setNameLoc(TL.getNameLoc());
- }
-
- return Result;
-}
-
template<typename Derived>
QualType TreeTransform<Derived>::TransformDependentSizedExtVectorType(
TypeLocBuilder &TLB,
@@ -12423,13 +12377,6 @@ TreeTransform<Derived>::RebuildVectorType(QualType ElementType,
return SemaRef.Context.getVectorType(ElementType, NumElements, VecKind);
}
-template <typename Derived>
-QualType TreeTransform<Derived>::RebuildDependentVectorType(
- QualType ElementType, Expr *SizeExpr, SourceLocation AttributeLoc,
- VectorType::VectorKind VecKind) {
- return SemaRef.BuildVectorType(ElementType, SizeExpr, AttributeLoc);
-}
-
template<typename Derived>
QualType TreeTransform<Derived>::RebuildExtVectorType(QualType ElementType,
unsigned NumElements,
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 0f6beddbe5e..78ca5f7406c 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -6371,17 +6371,6 @@ QualType ASTReader::readTypeRecord(unsigned Index) {
return Context.getPipeType(ElementType, ReadOnly);
}
- case TYPE_DEPENDENT_SIZED_VECTOR: {
- unsigned Idx = 0;
- QualType ElementType = readType(*Loc.F, Record, Idx);
- Expr *SizeExpr = ReadExpr(*Loc.F);
- SourceLocation AttrLoc = ReadSourceLocation(*Loc.F, Record, Idx);
- unsigned VecKind = Record[Idx];
-
- return Context.getDependentVectorType(ElementType, SizeExpr, AttrLoc,
- (VectorType::VectorKind)VecKind);
- }
-
case TYPE_DEPENDENT_SIZED_EXT_VECTOR: {
unsigned Idx = 0;
@@ -6562,10 +6551,6 @@ void TypeLocReader::VisitVectorTypeLoc(VectorTypeLoc TL) {
TL.setNameLoc(ReadSourceLocation());
}
-void TypeLocReader::VisitDependentVectorTypeLoc(DependentVectorTypeLoc TL) {
- TL.setNameLoc(ReadSourceLocation());
-}
-
void TypeLocReader::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
TL.setNameLoc(ReadSourceLocation());
}
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 02a077fcb7f..bc569d17f2f 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -455,14 +455,6 @@ ASTTypeWriter::VisitDependentSizedExtVectorType(
Code = TYPE_DEPENDENT_SIZED_EXT_VECTOR;
}
-void ASTTypeWriter::VisitDependentVectorType(const DependentVectorType *T) {
- Record.AddTypeRef(T->getElementType());
- Record.AddStmt(T->getSizeExpr());
- Record.AddSourceLocation(T->getAttributeLoc());
- Record.push_back(T->getVectorKind());
- Code = TYPE_DEPENDENT_SIZED_VECTOR;
-}
-
void
ASTTypeWriter::VisitDependentAddressSpaceType(
const DependentAddressSpaceType *T) {
@@ -684,10 +676,6 @@ void TypeLocWriter::VisitVectorTypeLoc(VectorTypeLoc TL) {
Record.AddSourceLocation(TL.getNameLoc());
}
-void TypeLocWriter::VisitDependentVectorTypeLoc(DependentVectorTypeLoc TL) {
- Record.AddSourceLocation(TL.getNameLoc());
-}
-
void TypeLocWriter::VisitExtVectorTypeLoc(ExtVectorTypeLoc TL) {
Record.AddSourceLocation(TL.getNameLoc());
}
OpenPOWER on IntegriCloud