Skip to content

Commit 2bc383f

Browse files
committed
LLVM: Support expr as assert message
1 parent 30591a1 commit 2bc383f

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/libasr/codegen/asr_to_llvm.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6371,10 +6371,22 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
63716371
{fmt_ptr, fmt_ptr1});
63726372
}
63736373
if (x.m_msg) {
6374-
char* s = ASR::down_cast<ASR::StringConstant_t>(x.m_msg)->m_s;
6375-
llvm::Value *fmt_ptr = builder->CreateGlobalStringPtr("AssertionError: %s\n");
6376-
llvm::Value *fmt_ptr2 = builder->CreateGlobalStringPtr(s);
6377-
print_error(context, *module, *builder, {fmt_ptr, fmt_ptr2});
6374+
std::vector<std::string> fmt;
6375+
std::vector<llvm::Value *> args;
6376+
fmt.push_back("%s");
6377+
args.push_back(builder->CreateGlobalStringPtr("AssertionError: "));
6378+
compute_fmt_specifier_and_arg(fmt, args, x.m_msg, x.base.base.loc);
6379+
fmt.push_back("%s");
6380+
args.push_back(builder->CreateGlobalStringPtr("\n"));
6381+
std::string fmt_str;
6382+
for (size_t i=0; i<fmt.size(); i++) {
6383+
fmt_str += fmt[i];
6384+
}
6385+
llvm::Value *fmt_ptr = builder->CreateGlobalStringPtr(fmt_str);
6386+
std::vector<llvm::Value *> print_error_args;
6387+
print_error_args.push_back(fmt_ptr);
6388+
print_error_args.insert(print_error_args.end(), args.begin(), args.end());
6389+
print_error(context, *module, *builder, print_error_args);
63786390
} else {
63796391
llvm::Value *fmt_ptr = builder->CreateGlobalStringPtr("AssertionError\n");
63806392
print_error(context, *module, *builder, {fmt_ptr});

0 commit comments

Comments
 (0)