aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/AST/Expr.cpp6
-rw-r--r--test/Sema/bitfield.c1
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 5d8789fdda..4611ae3699 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -2529,10 +2529,14 @@ FieldDecl *Expr::getBitField() {
if (Field->isBitField())
return Field;
- if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(E))
+ if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(E)) {
if (BinOp->isAssignmentOp() && BinOp->getLHS())
return BinOp->getLHS()->getBitField();
+ if (BinOp->getOpcode() == BO_Comma && BinOp->getRHS())
+ return BinOp->getRHS()->getBitField();
+ }
+
return 0;
}
diff --git a/test/Sema/bitfield.c b/test/Sema/bitfield.c
index 49c1c7d443..a1ce894037 100644
--- a/test/Sema/bitfield.c
+++ b/test/Sema/bitfield.c
@@ -32,6 +32,7 @@ int y;
struct {unsigned x : 2;} x2;
__typeof__((x.x+=1)+1) y;
+__typeof__((0,x.x)+1) y;
__typeof__(x.x<<1) y;
int y;