[PATCH] D76384: Move FPFeatures from BinaryOperator bitfields to Trailing storage

Melanie Blower via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 20 10:50:43 PDT 2020


mibintc marked 3 inline comments as done.
mibintc added a comment.

In D76384#1929774 <https://reviews.llvm.org/D76384#1929774>, @mibintc wrote:

> There's a bug in this patch that i haven't solved yet. I think it's just 1 bug. The bug is that the AST statement visitor is going to the "fallback" instead of the right destination when walking CompoundAssignmentOperator.  This patch collapses CompoundAssignmentOperator class into BinaryOperator class.  In a spot check, i think all the failing tests are because the Visitor walk isn't working correctly for CompoundAssign (for example += ). These are the test fails reported by check-clang in my sandbox,
>  Failing Tests (15):
>
>   Clang :: Analysis/loopexit-cfg-output.cpp
>   Clang :: CXX/drs/dr2xx.cpp
>   Clang :: CXX/expr/expr.const/p2-0x.cpp
>   Clang :: CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p17.cpp
>   Clang :: CodeGen/ffp-contract-fast-option.cpp
>   Clang :: CodeGenCXX/const-init-cxx1y.cpp
>   Clang :: CodeGenCXX/const-init-cxx2a.cpp
>   Clang :: CodeGenCXX/non-const-init-cxx2a.cpp
>   Clang :: Sema/warn-unreachable.c
>   Clang :: Sema/warn-unsequenced.c
>   Clang :: SemaCXX/constant-expression-cxx1y.cpp
>   Clang :: SemaCXX/constant-expression-cxx2a.cpp
>   Clang :: SemaCXX/decomposed-condition.cpp
>   Clang :: SemaCXX/integer-overflow.cpp
>   Clang :: SemaCXX/warn-unsequenced.cpp


The new revision corrects all these fails. i have a couple questions about test cases, i've inline those in the test case modification. Also need to do clang-format and also some changes to CXXCallOperator to remove redundant accessor



================
Comment at: clang/include/clang/AST/ExprCXX.h:168
   // operations on floating point types.
   void setFPFeatures(FPOptions F) {
+    FPFeatures = F;
----------------
i can get rid of these 2 accessor functions, we get them from CallExpr


================
Comment at: clang/test/Analysis/loopexit-cfg-output.cpp:211
 // CHECK:       [B3]
-// CHECK-NEXT:   1: j
-// CHECK-NEXT:   2: 2
-// CHECK-NEXT:   3: [B3.1] += [B3.2]
+// CHECK-NEXT:   1: 2
+// CHECK-NEXT:   2: j
----------------
With these changes, the blocks print out in a different order but the semantic meaning appears to be the same. Is this difference acceptable? 


================
Comment at: clang/test/Sema/warn-unreachable.c:86
   case 8:
-    i
-      +=        // expected-warning {{will never be executed}}
+    i           // expected-warning {{will never be executed}}
+      +=
----------------
The srcpos for compound assignment is now the same as srcpos for ordinary binary operator, so i changed the test case to move the diagnostic,  ok?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76384/new/

https://reviews.llvm.org/D76384





More information about the cfe-commits mailing list