diff options
author | Bruno Ricci <riccibrun@gmail.com> | 2019-01-28 18:40:26 +0000 |
---|---|---|
committer | Bruno Ricci <riccibrun@gmail.com> | 2019-01-28 18:40:26 +0000 |
commit | 586d949b9c554d5e5b7b445a49c122ce3d0e5c53 (patch) | |
tree | 263b96fd67d4eec5829b13a3e447d47db359bdd4 /clang/lib | |
parent | 7db82d7257f9a2793858159f96dc65e117b27918 (diff) | |
download | bcm5719-llvm-586d949b9c554d5e5b7b445a49c122ce3d0e5c53.tar.gz bcm5719-llvm-586d949b9c554d5e5b7b445a49c122ce3d0e5c53.zip |
Revert "[AST] Introduce GenericSelectionExpr::Association"
This breaks GCC 4.8.4. Reported by email by Hans Wennborg.
llvm-svn: 352403
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ASTDumper.cpp | 10 | ||||
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 6 | ||||
-rw-r--r-- | clang/lib/AST/StmtProfile.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 16 | ||||
-rw-r--r-- | clang/lib/Sema/SemaPseudoObject.cpp | 22 | ||||
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 11 |
6 files changed, 32 insertions, 40 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp index 5c99dab356f..b91dab5aa38 100644 --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -1462,21 +1462,21 @@ void ASTDumper::VisitGenericSelectionExpr(const GenericSelectionExpr *E) { dumpStmt(E->getControllingExpr()); dumpTypeAsChild(E->getControllingExpr()->getType()); // FIXME: remove - for (const auto &Assoc : E->associations()) { + for (unsigned I = 0, N = E->getNumAssocs(); I != N; ++I) { dumpChild([=] { - if (const TypeSourceInfo *TSI = Assoc.getTypeSourceInfo()) { + if (const TypeSourceInfo *TSI = E->getAssocTypeSourceInfo(I)) { OS << "case "; NodeDumper.dumpType(TSI->getType()); } else { OS << "default"; } - if (Assoc.isSelected()) + if (!E->isResultDependent() && E->getResultIndex() == I) OS << " selected"; - if (const TypeSourceInfo *TSI = Assoc.getTypeSourceInfo()) + if (const TypeSourceInfo *TSI = E->getAssocTypeSourceInfo(I)) dumpTypeAsChild(TSI->getType()); - dumpStmt(Assoc.getAssociationExpr()); + dumpStmt(E->getAssocExpr(I)); }); } } diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index acf19aaaf41..221d134d338 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -1261,15 +1261,15 @@ void StmtPrinter::VisitUnaryExprOrTypeTraitExpr(UnaryExprOrTypeTraitExpr *Node){ void StmtPrinter::VisitGenericSelectionExpr(GenericSelectionExpr *Node) { OS << "_Generic("; PrintExpr(Node->getControllingExpr()); - for (const GenericSelectionExpr::Association &Assoc : Node->associations()) { + for (unsigned i = 0; i != Node->getNumAssocs(); ++i) { OS << ", "; - QualType T = Assoc.getType(); + QualType T = Node->getAssocType(i); if (T.isNull()) OS << "default"; else T.print(OS, Policy); OS << ": "; - PrintExpr(Assoc.getAssociationExpr()); + PrintExpr(Node->getAssocExpr(i)); } OS << ")"; } diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp index e302b058821..805056f1f70 100644 --- a/clang/lib/AST/StmtProfile.cpp +++ b/clang/lib/AST/StmtProfile.cpp @@ -1260,14 +1260,13 @@ void StmtProfiler::VisitBlockExpr(const BlockExpr *S) { void StmtProfiler::VisitGenericSelectionExpr(const GenericSelectionExpr *S) { VisitExpr(S); - for (const GenericSelectionExpr::ConstAssociation &Assoc : - S->associations()) { - QualType T = Assoc.getType(); + for (unsigned i = 0; i != S->getNumAssocs(); ++i) { + QualType T = S->getAssocType(i); if (T.isNull()) ID.AddPointer(nullptr); else VisitType(T); - VisitExpr(Assoc.getAssociationExpr()); + VisitExpr(S->getAssocExpr(i)); } } diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index fdb59874cc9..4ca3b851c18 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -4332,16 +4332,14 @@ Expr *Sema::stripARCUnbridgedCast(Expr *e) { assert(!gse->isResultDependent()); unsigned n = gse->getNumAssocs(); - SmallVector<Expr *, 4> subExprs; - SmallVector<TypeSourceInfo *, 4> subTypes; - subExprs.reserve(n); - subTypes.reserve(n); - for (const GenericSelectionExpr::Association &assoc : gse->associations()) { - subTypes.push_back(assoc.getTypeSourceInfo()); - Expr *sub = assoc.getAssociationExpr(); - if (assoc.isSelected()) + SmallVector<Expr*, 4> subExprs(n); + SmallVector<TypeSourceInfo*, 4> subTypes(n); + for (unsigned i = 0; i != n; ++i) { + subTypes[i] = gse->getAssocTypeSourceInfo(i); + Expr *sub = gse->getAssocExpr(i); + if (i == gse->getResultIndex()) sub = stripARCUnbridgedCast(sub); - subExprs.push_back(sub); + subExprs[i] = sub; } return GenericSelectionExpr::Create( diff --git a/clang/lib/Sema/SemaPseudoObject.cpp b/clang/lib/Sema/SemaPseudoObject.cpp index 28a4d62b03e..37dd7b1e8d2 100644 --- a/clang/lib/Sema/SemaPseudoObject.cpp +++ b/clang/lib/Sema/SemaPseudoObject.cpp @@ -140,23 +140,19 @@ namespace { unsigned resultIndex = gse->getResultIndex(); unsigned numAssocs = gse->getNumAssocs(); - SmallVector<Expr *, 8> assocExprs; - SmallVector<TypeSourceInfo *, 8> assocTypes; - assocExprs.reserve(numAssocs); - assocTypes.reserve(numAssocs); - - for (const GenericSelectionExpr::Association &assoc : - gse->associations()) { - Expr *assocExpr = assoc.getAssociationExpr(); - if (assoc.isSelected()) - assocExpr = rebuild(assocExpr); - assocExprs.push_back(assocExpr); - assocTypes.push_back(assoc.getTypeSourceInfo()); + SmallVector<Expr*, 8> assocs(numAssocs); + SmallVector<TypeSourceInfo*, 8> assocTypes(numAssocs); + + for (unsigned i = 0; i != numAssocs; ++i) { + Expr *assoc = gse->getAssocExpr(i); + if (i == resultIndex) assoc = rebuild(assoc); + assocs[i] = assoc; + assocTypes[i] = gse->getAssocTypeSourceInfo(i); } return GenericSelectionExpr::Create( S.Context, gse->getGenericLoc(), gse->getControllingExpr(), - assocTypes, assocExprs, gse->getDefaultLoc(), gse->getRParenLoc(), + assocTypes, assocs, gse->getDefaultLoc(), gse->getRParenLoc(), gse->containsUnexpandedParameterPack(), resultIndex); } diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index e411a2ad47c..1631ce83aa9 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -9073,10 +9073,10 @@ TreeTransform<Derived>::TransformGenericSelectionExpr(GenericSelectionExpr *E) { SmallVector<Expr *, 4> AssocExprs; SmallVector<TypeSourceInfo *, 4> AssocTypes; - for (const GenericSelectionExpr::Association &Assoc : E->associations()) { - TypeSourceInfo *TSI = Assoc.getTypeSourceInfo(); - if (TSI) { - TypeSourceInfo *AssocType = getDerived().TransformType(TSI); + for (unsigned i = 0; i != E->getNumAssocs(); ++i) { + TypeSourceInfo *TS = E->getAssocTypeSourceInfo(i); + if (TS) { + TypeSourceInfo *AssocType = getDerived().TransformType(TS); if (!AssocType) return ExprError(); AssocTypes.push_back(AssocType); @@ -9084,8 +9084,7 @@ TreeTransform<Derived>::TransformGenericSelectionExpr(GenericSelectionExpr *E) { AssocTypes.push_back(nullptr); } - ExprResult AssocExpr = - getDerived().TransformExpr(Assoc.getAssociationExpr()); + ExprResult AssocExpr = getDerived().TransformExpr(E->getAssocExpr(i)); if (AssocExpr.isInvalid()) return ExprError(); AssocExprs.push_back(AssocExpr.get()); |