Author: Timm Bäder Date: 2024-05-26T10:50:44+02:00 New Revision: 5220b7bea8b01f46e9f7326b9c9a7e550e8451d1
URL: https://github.com/llvm/llvm-project/commit/5220b7bea8b01f46e9f7326b9c9a7e550e8451d1 DIFF: https://github.com/llvm/llvm-project/commit/5220b7bea8b01f46e9f7326b9c9a7e550e8451d1.diff LOG: [clang][Interp] Handle objc strings Added: Modified: clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/lib/AST/Interp/ByteCodeExprGen.h clang/lib/AST/Interp/Context.cpp clang/test/AST/Interp/objc.mm Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 6607727b5246f..f00421d0c2ea9 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1637,6 +1637,12 @@ bool ByteCodeExprGen<Emitter>::VisitStringLiteral(const StringLiteral *E) { return true; } +template <class Emitter> +bool ByteCodeExprGen<Emitter>::VisitObjCStringLiteral( + const ObjCStringLiteral *E) { + return this->delegate(E->getString()); +} + 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 a2e283c866332..c648b0e4be704 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.h +++ b/clang/lib/AST/Interp/ByteCodeExprGen.h @@ -90,6 +90,7 @@ class ByteCodeExprGen : public ConstStmtVisitor<ByteCodeExprGen<Emitter>, bool>, bool VisitOpaqueValueExpr(const OpaqueValueExpr *E); bool VisitAbstractConditionalOperator(const AbstractConditionalOperator *E); bool VisitStringLiteral(const StringLiteral *E); + bool VisitObjCStringLiteral(const ObjCStringLiteral *E); bool VisitSYCLUniqueStableNameExpr(const SYCLUniqueStableNameExpr *E); bool VisitCharacterLiteral(const CharacterLiteral *E); bool VisitCompoundAssignOperator(const CompoundAssignOperator *E); diff --git a/clang/lib/AST/Interp/Context.cpp b/clang/lib/AST/Interp/Context.cpp index d51a57e5e92ea..4ecfa0f9bfd75 100644 --- a/clang/lib/AST/Interp/Context.cpp +++ b/clang/lib/AST/Interp/Context.cpp @@ -164,7 +164,8 @@ std::optional<PrimType> Context::classify(QualType T) const { T->isFunctionType() || T->isSpecificBuiltinType(BuiltinType::BoundMember)) return PT_FnPtr; - if (T->isReferenceType() || T->isPointerType()) + if (T->isReferenceType() || T->isPointerType() || + T->isObjCObjectPointerType()) return PT_Ptr; if (const auto *AT = T->getAs<AtomicType>()) diff --git a/clang/test/AST/Interp/objc.mm b/clang/test/AST/Interp/objc.mm index 44b74d193b66a..e48fa3c0ac709 100644 --- a/clang/test/AST/Interp/objc.mm +++ b/clang/test/AST/Interp/objc.mm @@ -6,3 +6,7 @@ @interface A { static_assert(a, ""); // both-error {{static assertion expression is not an integral constant expression}} } @end + +@interface NSString +@end +constexpr NSString *t0 = @"abc"; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits