From: Eli Friedman Date: Wed, 13 Jul 2011 02:05:57 +0000 (+0000) Subject: Silliness with commas, as reported at http://blog.regehr.org/archives/558 . As it... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42068e9d420889014ee26894e421fead336b239d;p=clang Silliness with commas, as reported at http://blog.regehr.org/archives/558 . As it turns out, this is my fault for not noticing this was an issue when I was looking at this a long time ago. :( git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135026 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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(E)) + if (BinaryOperator *BinOp = dyn_cast(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;