From 74751f4b0c312592494c6cc9922bea1ec71372a8 Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Mon, 7 Feb 2022 12:17:02 +0100 Subject: [PATCH] [flang] Add lowering for ASCII character constant Lower character constant of KIND = 1 with the `createStringLiteral` helper function. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: kiranchandramohan, schweitz Differential Revision: https://reviews.llvm.org/D118992 --- flang/lib/Lower/ConvertExpr.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp index 2f159fe0f3fd..f97e4409aae9 100644 --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -292,6 +292,16 @@ public: } } + /// Convert a ascii scalar literal CHARACTER to IR. (specialization) + ExtValue + genAsciiScalarLit(const Fortran::evaluate::Scalar> &value, + int64_t len) { + assert(value.size() == static_cast(len) && + "value.size() doesn't match with len"); + return fir::factory::createStringLiteral(builder, getLoc(), value); + } + template ExtValue genval(const Fortran::evaluate::Constant> @@ -302,7 +312,9 @@ public: opt = con.GetScalarValue(); assert(opt.has_value() && "constant has no value"); if constexpr (TC == Fortran::common::TypeCategory::Character) { - TODO(getLoc(), "genval char constant"); + if constexpr (KIND == 1) + return genAsciiScalarLit(opt.value(), con.LEN()); + TODO(getLoc(), "genval for Character with KIND != 1"); } else { return genScalarLit(opt.value()); }