This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd29f70670db8: [clang][Interp] Fix binary comma operators 
(authored by tbaeder).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D141784

Files:
  clang/lib/AST/Interp/ByteCodeExprGen.cpp
  clang/test/SemaCXX/constexpr-duffs-device.cpp


Index: clang/test/SemaCXX/constexpr-duffs-device.cpp
===================================================================
--- clang/test/SemaCXX/constexpr-duffs-device.cpp
+++ clang/test/SemaCXX/constexpr-duffs-device.cpp
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 -std=c++1y -verify %s
+// RUN: %clang_cc1 -std=c++1y -verify -fexperimental-new-constant-interpreter 
%s
 
 // expected-no-diagnostics
 constexpr void copy(const char *from, unsigned long count, char *to) {
Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp
===================================================================
--- clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -198,18 +198,6 @@
   const Expr *LHS = BO->getLHS();
   const Expr *RHS = BO->getRHS();
 
-  // Deal with operations which have composite or void types.
-  switch (BO->getOpcode()) {
-  case BO_Comma:
-    if (!discard(LHS))
-      return false;
-    if (!this->visit(RHS))
-      return false;
-    return true;
-  default:
-    break;
-  }
-
   // Typecheck the args.
   std::optional<PrimType> LT = classify(LHS->getType());
   std::optional<PrimType> RT = classify(RHS->getType());
@@ -224,6 +212,13 @@
     return DiscardResult ? this->emitPop(*T, BO) : true;
   };
 
+  // Deal with operations which have composite or void types.
+  if (BO->isCommaOp()) {
+    if (!discard(LHS))
+      return false;
+    return Discard(this->visit(RHS));
+  }
+
   // Pointer arithmetic special case.
   if (BO->getOpcode() == BO_Add || BO->getOpcode() == BO_Sub) {
     if (*T == PT_Ptr || (*LT == PT_Ptr && *RT == PT_Ptr))


Index: clang/test/SemaCXX/constexpr-duffs-device.cpp
===================================================================
--- clang/test/SemaCXX/constexpr-duffs-device.cpp
+++ clang/test/SemaCXX/constexpr-duffs-device.cpp
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 -std=c++1y -verify %s
+// RUN: %clang_cc1 -std=c++1y -verify -fexperimental-new-constant-interpreter %s
 
 // expected-no-diagnostics
 constexpr void copy(const char *from, unsigned long count, char *to) {
Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp
===================================================================
--- clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -198,18 +198,6 @@
   const Expr *LHS = BO->getLHS();
   const Expr *RHS = BO->getRHS();
 
-  // Deal with operations which have composite or void types.
-  switch (BO->getOpcode()) {
-  case BO_Comma:
-    if (!discard(LHS))
-      return false;
-    if (!this->visit(RHS))
-      return false;
-    return true;
-  default:
-    break;
-  }
-
   // Typecheck the args.
   std::optional<PrimType> LT = classify(LHS->getType());
   std::optional<PrimType> RT = classify(RHS->getType());
@@ -224,6 +212,13 @@
     return DiscardResult ? this->emitPop(*T, BO) : true;
   };
 
+  // Deal with operations which have composite or void types.
+  if (BO->isCommaOp()) {
+    if (!discard(LHS))
+      return false;
+    return Discard(this->visit(RHS));
+  }
+
   // Pointer arithmetic special case.
   if (BO->getOpcode() == BO_Add || BO->getOpcode() == BO_Sub) {
     if (*T == PT_Ptr || (*LT == PT_Ptr && *RT == PT_Ptr))
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to