RIscRIpt added a comment. Regarding new interpreter.
It takes more time and effort than I expected. Here's what I found: 1. Assertion in ByteCodeExprGen<Emitter>::VisitPredefinedExpr <https://github.com/llvm/llvm-project/blob/6dfe55569d88ff654d13e6c09267eff0cd9c9f0d/clang/lib/AST/Interp/ByteCodeExprGen.cpp#L1256> seems unnecessary. 2. StringLiteral of PredefinedExpr gets initialized in ByteCodeExprGen<Emitter>::VisitStringLiteral <https://github.com/llvm/llvm-project/blob/6dfe55569d88ff654d13e6c09267eff0cd9c9f0d/clang/lib/AST/Interp/ByteCodeExprGen.cpp#L844>; I observe creation of InitMap, and initialization of each element of array. 3. However when I am at the following call-stack (just before exiting constexpr interpreter and doing final checks): 00 00000066`04580990 00007ff6`55fb7257 clang!clang::interp::CheckArrayInitialized+0x257 [C:\projects\my-llvm\clang\lib\AST\Interp\Interp.cpp @ 425] 01 00000066`04580b50 00007ff6`55f67ae6 clang!clang::interp::CheckCtorCall+0xc7 [C:\projects\my-llvm\clang\lib\AST\Interp\Interp.cpp @ 476] 02 00000066`04580bb0 00007ff6`55ebdd17 clang!clang::interp::CheckGlobalCtor+0x36 [C:\projects\my-llvm\clang\lib\AST\Interp\Interp.h @ 1681] 03 00000066`04580bf0 00007ff6`55fb3e3d clang!clang::interp::EvalEmitter::emitCheckGlobalCtor+0x57 [C:\projects\my-llvm\build\tools\clang\lib\AST\Opcodes.inc @ 4133] 04 00000066`04580c20 00007ff6`55fb4db1 clang!clang::interp::ByteCodeExprGen<clang::interp::EvalEmitter>::visitGlobalInitializer+0xdd [C:\projects\my-llvm\clang\lib\AST\Interp\ByteCodeExprGen.h @ 180] 05 00000066`04580c90 00007ff6`55fb33ce clang!clang::interp::ByteCodeExprGen<clang::interp::EvalEmitter>::visitVarDecl+0x291 [C:\projects\my-llvm\clang\lib\AST\Interp\ByteCodeExprGen.cpp @ 1827] 06 00000066`04580e40 00007ff6`55eb7023 clang!clang::interp::ByteCodeExprGen<clang::interp::EvalEmitter>::visitDecl+0x8e [C:\projects\my-llvm\clang\lib\AST\Interp\ByteCodeExprGen.cpp @ 1772] 07 00000066`04580f30 00007ff6`55d18d54 clang!clang::interp::EvalEmitter::interpretDecl+0x33 [C:\projects\my-llvm\clang\lib\AST\Interp\EvalEmitter.cpp @ 39] 08 00000066`04580f90 00007ff6`55633abf clang!clang::interp::Context::evaluateAsInitializer+0xf4 [C:\projects\my-llvm\clang\lib\AST\Interp\Context.cpp @ 74] 09 00000066`04581290 00007ff6`553b4398 clang!clang::Expr::EvaluateAsInitializer+0x28f [C:\projects\my-llvm\clang\lib\AST\ExprConstant.cpp @ 15545] 0a 00000066`04581880 00007ff6`553b4744 clang!clang::VarDecl::evaluateValueImpl+0x148 [C:\projects\my-llvm\clang\lib\AST\Decl.cpp @ 2555] 0b 00000066`04581940 00007ff6`537e94fc clang!clang::VarDecl::checkForConstantInitialization+0xe4 [C:\projects\my-llvm\clang\lib\AST\Decl.cpp @ 2625] 0c 00000066`04581980 00007ff6`537f8109 clang!clang::Sema::CheckCompleteVariableDeclaration+0xddc [C:\projects\my-llvm\clang\lib\Sema\SemaDecl.cpp @ 14315] 0d 00000066`04582770 00000000`00000000 clang!clang::Sema::AddInitializerToDecl+0x2669 [C:\projects\my-llvm\clang\lib\Sema\SemaDecl.cpp @ 13712] In CheckArrayInitialized <https://github.com/llvm/llvm-project/blob/6dfe55569d88ff654d13e6c09267eff0cd9c9f0d/clang/lib/AST/Interp/Interp.cpp#L426> `BasePtr.atIndex(I).isInitialized()` returns false, because InitMap does not exist. And it seems that `BasePtr` points to a different object, not the one which corresponds to StringLiteral (at step 2). This new interpreter does not use clang's AST, so it becomes difficult to understand what's happening. Any help would be appreciated. cc @tbaeder. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D158591/new/ https://reviews.llvm.org/D158591 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits