summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/AST/Expr.cpp6
-rw-r--r--clang/test/Sema/bitfield.c1
2 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 5d8789fddab..4611ae36996 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/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/clang/test/Sema/bitfield.c b/clang/test/Sema/bitfield.c
index 49c1c7d4436..a1ce894037f 100644
--- a/clang/test/Sema/bitfield.c
+++ b/clang/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;
OpenPOWER on IntegriCloud