[clang] 0211389 - [clang][Interp] Handle __datasizeof.
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 17 08:34:07 PDT 2024
Author: Timm Bäder
Date: 2024-03-17T16:33:39+01:00
New Revision: 0211389064a1d493e826512a54ae547cb9859223
URL: https://github.com/llvm/llvm-project/commit/0211389064a1d493e826512a54ae547cb9859223
DIFF: https://github.com/llvm/llvm-project/commit/0211389064a1d493e826512a54ae547cb9859223.diff
LOG: [clang][Interp] Handle __datasizeof.
Added:
Modified:
clang/lib/AST/Interp/ByteCodeExprGen.cpp
clang/test/SemaCXX/datasizeof.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 2e48ec2c508775..2557126e7b91bb 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -1096,9 +1096,9 @@ template <class Emitter>
bool ByteCodeExprGen<Emitter>::VisitUnaryExprOrTypeTraitExpr(
const UnaryExprOrTypeTraitExpr *E) {
UnaryExprOrTypeTrait Kind = E->getKind();
- ASTContext &ASTCtx = Ctx.getASTContext();
+ const ASTContext &ASTCtx = Ctx.getASTContext();
- if (Kind == UETT_SizeOf) {
+ if (Kind == UETT_SizeOf || Kind == UETT_DataSizeOf) {
QualType ArgType = E->getTypeOfArgument();
// C++ [expr.sizeof]p2: "When applied to a reference or a reference type,
@@ -1113,7 +1113,10 @@ bool ByteCodeExprGen<Emitter>::VisitUnaryExprOrTypeTraitExpr(
if (ArgType->isDependentType() || !ArgType->isConstantSizeType())
return false;
- Size = ASTCtx.getTypeSizeInChars(ArgType);
+ if (Kind == UETT_SizeOf)
+ Size = ASTCtx.getTypeSizeInChars(ArgType);
+ else
+ Size = ASTCtx.getTypeInfoDataSizeInChars(ArgType).Width;
}
if (DiscardResult)
diff --git a/clang/test/SemaCXX/datasizeof.cpp b/clang/test/SemaCXX/datasizeof.cpp
index 5baf2ecb24ed7a..43135c00496638 100644
--- a/clang/test/SemaCXX/datasizeof.cpp
+++ b/clang/test/SemaCXX/datasizeof.cpp
@@ -1,4 +1,5 @@
// RUN: %clang_cc1 -fsyntax-only -triple x86_64-linux-gnu -verify %s
+// RUN: %clang_cc1 -fsyntax-only -triple x86_64-linux-gnu -verify %s -fexperimental-new-constant-interpreter
#if !__has_extension(datasizeof)
# error "Expected datasizeof extension"
More information about the cfe-commits
mailing list