[clang] 5bb9c08 - [clang][Interp] Reject compound assign operators pre-C++14
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 9 06:25:44 PDT 2024
Author: Timm Bäder
Date: 2024-06-09T14:58:21+02:00
New Revision: 5bb9c08d8895e9d5122411c8612521e9a84220b4
URL: https://github.com/llvm/llvm-project/commit/5bb9c08d8895e9d5122411c8612521e9a84220b4
DIFF: https://github.com/llvm/llvm-project/commit/5bb9c08d8895e9d5122411c8612521e9a84220b4.diff
LOG: [clang][Interp] Reject compound assign operators pre-C++14
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/test/SemaCXX/for-range-examples.cpp
clang/test/SemaCXX/integer-overflow.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 05921e833d7cc..ac245e7a0f24c 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -1834,6 +1834,9 @@ bool ByteCodeExprGen<Emitter>::VisitCompoundAssignOperator(
std::optional<PrimType> RT = classify(RHS->getType());
std::optional<PrimType> ResultT = classify(E->getType());
+ if (!Ctx.getLangOpts().CPlusPlus14)
+ return this->visit(RHS) && this->visit(LHS) && this->emitError(E);
+
if (!LT || !RT || !ResultT || !LHSComputationT)
return false;
diff --git a/clang/test/SemaCXX/for-range-examples.cpp b/clang/test/SemaCXX/for-range-examples.cpp
index d129d50d673e1..c06bf0102bcfe 100644
--- a/clang/test/SemaCXX/for-range-examples.cpp
+++ b/clang/test/SemaCXX/for-range-examples.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 -fexperimental-new-constant-interpreter
namespace value_range_detail {
template<typename T>
diff --git a/clang/test/SemaCXX/integer-overflow.cpp b/clang/test/SemaCXX/integer-overflow.cpp
index 6049458b93bbd..d1cc8bee566f6 100644
--- a/clang/test/SemaCXX/integer-overflow.cpp
+++ b/clang/test/SemaCXX/integer-overflow.cpp
@@ -1,6 +1,10 @@
// RUN: %clang_cc1 %s -verify -fsyntax-only -std=gnu++98 -triple x86_64-pc-linux-gnu
// RUN: %clang_cc1 %s -verify -fsyntax-only -std=gnu++2a -triple x86_64-pc-linux-gnu
+// RUN: %clang_cc1 %s -verify -fsyntax-only -std=gnu++98 -triple x86_64-pc-linux-gnu -fexperimental-new-constant-interpreter
+// RUN: %clang_cc1 %s -verify -fsyntax-only -std=gnu++2a -triple x86_64-pc-linux-gnu -fexperimental-new-constant-interpreter
+
+
typedef unsigned long long uint64_t;
typedef unsigned int uint32_t;
More information about the cfe-commits
mailing list