diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 482e1062d88c..50dfeebdbcde 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1458,7 +1458,7 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const } FieldDecl *Expr::getBitField() { - Expr *E = this->IgnoreParenCasts(); + Expr *E = this->IgnoreParens(); if (MemberExpr *MemRef = dyn_cast(E)) if (FieldDecl *Field = dyn_cast(MemRef->getMemberDecl())) diff --git a/clang/test/Sema/bitfield-promote.c b/clang/test/Sema/bitfield-promote.c new file mode 100644 index 000000000000..42d4f5a19603 --- /dev/null +++ b/clang/test/Sema/bitfield-promote.c @@ -0,0 +1,10 @@ +// RUN: clang -fsyntax-only -Xclang -verify %s +struct {unsigned x : 2;} x; +__typeof__((x.x+=1)+1) y; +__typeof__(x.x<<1) y; +int y; + + +struct { int x : 8; } x1; +long long y1; +__typeof__(((long long)x1.x + 1)) y1; \ No newline at end of file