[clang] e805b77 - [clang][Interp] Support ObjCEncodeExprs
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 11 06:07:45 PDT 2024
Author: Timm Bäder
Date: 2024-06-11T15:07:28+02:00
New Revision: e805b77107c8a26ad129fb2a46cdec01c90628be
URL: https://github.com/llvm/llvm-project/commit/e805b77107c8a26ad129fb2a46cdec01c90628be
DIFF: https://github.com/llvm/llvm-project/commit/e805b77107c8a26ad129fb2a46cdec01c90628be.diff
LOG: [clang][Interp] Support ObjCEncodeExprs
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/lib/AST/Interp/ByteCodeExprGen.h
clang/test/CodeGenObjC/encode-test-3.m
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 0899a98b3b95a..0385ca4b3a063 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -1688,6 +1688,17 @@ bool ByteCodeExprGen<Emitter>::VisitObjCStringLiteral(
return this->delegate(E->getString());
}
+template <class Emitter>
+bool ByteCodeExprGen<Emitter>::VisitObjCEncodeExpr(const ObjCEncodeExpr *E) {
+ auto &A = Ctx.getASTContext();
+ std::string Str;
+ A.getObjCEncodingForType(E->getEncodedType(), Str);
+ StringLiteral *SL =
+ StringLiteral::Create(A, Str, StringLiteralKind::Ordinary,
+ /*Pascal=*/false, E->getType(), E->getAtLoc());
+ return this->delegate(SL);
+}
+
template <class Emitter>
bool ByteCodeExprGen<Emitter>::VisitSYCLUniqueStableNameExpr(
const SYCLUniqueStableNameExpr *E) {
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.h b/clang/lib/AST/Interp/ByteCodeExprGen.h
index 7ab14b6ab383e..295cfef0525cd 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.h
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.h
@@ -91,6 +91,7 @@ class ByteCodeExprGen : public ConstStmtVisitor<ByteCodeExprGen<Emitter>, bool>,
bool VisitAbstractConditionalOperator(const AbstractConditionalOperator *E);
bool VisitStringLiteral(const StringLiteral *E);
bool VisitObjCStringLiteral(const ObjCStringLiteral *E);
+ bool VisitObjCEncodeExpr(const ObjCEncodeExpr *E);
bool VisitSYCLUniqueStableNameExpr(const SYCLUniqueStableNameExpr *E);
bool VisitCharacterLiteral(const CharacterLiteral *E);
bool VisitCompoundAssignOperator(const CompoundAssignOperator *E);
diff --git a/clang/test/CodeGenObjC/encode-test-3.m b/clang/test/CodeGenObjC/encode-test-3.m
index 0856b770d65a5..30557fccf02df 100644
--- a/clang/test/CodeGenObjC/encode-test-3.m
+++ b/clang/test/CodeGenObjC/encode-test-3.m
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -triple=i686-apple-darwin9 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple=i686-apple-darwin9 -emit-llvm -o - %s -fexperimental-new-constant-interpreter | FileCheck %s
int main(void) {
int n;
More information about the cfe-commits
mailing list