[clang] ba451c8 - [clang][Interp][NFC] Only set result invalid if empty

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Sat Feb 10 10:45:57 PST 2024


Author: Timm Bäder
Date: 2024-02-10T19:45:10+01:00
New Revision: ba451c80ba67ab6834305f35d47e36b6b446ce83

URL: https://github.com/llvm/llvm-project/commit/ba451c80ba67ab6834305f35d47e36b6b446ce83
DIFF: https://github.com/llvm/llvm-project/commit/ba451c80ba67ab6834305f35d47e36b6b446ce83.diff

LOG: [clang][Interp][NFC] Only set result invalid if empty

This is currently NFC but required for later changes. A Ret op
might fail and set the result to invalid, causing another setInvalid()
call, which asserts that the result is still empty.

Added: 
    

Modified: 
    clang/lib/AST/Interp/EvalEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/EvalEmitter.cpp b/clang/lib/AST/Interp/EvalEmitter.cpp
index a60f893de8bda7..945b78d7a609d7 100644
--- a/clang/lib/AST/Interp/EvalEmitter.cpp
+++ b/clang/lib/AST/Interp/EvalEmitter.cpp
@@ -36,7 +36,7 @@ EvalEmitter::~EvalEmitter() {
 EvaluationResult EvalEmitter::interpretExpr(const Expr *E) {
   EvalResult.setSource(E);
 
-  if (!this->visitExpr(E))
+  if (!this->visitExpr(E) && EvalResult.empty())
     EvalResult.setInvalid();
 
   return std::move(this->EvalResult);
@@ -45,7 +45,7 @@ EvaluationResult EvalEmitter::interpretExpr(const Expr *E) {
 EvaluationResult EvalEmitter::interpretDecl(const VarDecl *VD) {
   EvalResult.setSource(VD);
 
-  if (!this->visitDecl(VD))
+  if (!this->visitDecl(VD) && EvalResult.empty())
     EvalResult.setInvalid();
 
   return std::move(this->EvalResult);


        


More information about the cfe-commits mailing list