summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorBruno Ricci <riccibrun@gmail.com>2019-01-28 18:40:26 +0000
committerBruno Ricci <riccibrun@gmail.com>2019-01-28 18:40:26 +0000
commit586d949b9c554d5e5b7b445a49c122ce3d0e5c53 (patch)
tree263b96fd67d4eec5829b13a3e447d47db359bdd4 /clang/lib
parent7db82d7257f9a2793858159f96dc65e117b27918 (diff)
downloadbcm5719-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.cpp10
-rw-r--r--clang/lib/AST/StmtPrinter.cpp6
-rw-r--r--clang/lib/AST/StmtProfile.cpp7
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp16
-rw-r--r--clang/lib/Sema/SemaPseudoObject.cpp22
-rw-r--r--clang/lib/Sema/TreeTransform.h11
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());
OpenPOWER on IntegriCloud