From f97731c76501788c61012156adfae138f4013500 Mon Sep 17 00:00:00 2001 From: Kiran Chandramohan Date: Mon, 13 Dec 2021 16:11:32 +0000 Subject: [PATCH] [Flang][Unit Test] Move the declaration of kindMap to the class kindMap variable is declared in the Setup function but passed as a reference to the firBuilder class. The firBuilder is declared in the class and hence its lifetime exceeds that of kindMap. This can lead to undefined behaviour. Move the kindMap variable into the class to avoid this. This is part of the upstreaming effort from the fir-dev branch in [1]. [1] https://github.com/flang-compiler/f18-llvm-project Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D115631 --- flang/unittests/Optimizer/Builder/CharacterTest.cpp | 5 +++-- flang/unittests/Optimizer/Builder/DoLoopHelperTest.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/flang/unittests/Optimizer/Builder/CharacterTest.cpp b/flang/unittests/Optimizer/Builder/CharacterTest.cpp index 7cf15b0..563ee27 100644 --- a/flang/unittests/Optimizer/Builder/CharacterTest.cpp +++ b/flang/unittests/Optimizer/Builder/CharacterTest.cpp @@ -16,7 +16,7 @@ struct CharacterTest : public testing::Test { public: void SetUp() override { - fir::KindMapping kindMap(&context, + kindMap = std::make_unique(&context, "i10:80,l3:24,a1:8,r54:Double,c20:X86_FP80,r11:PPC_FP128," "r12:FP128,r13:X86_FP80,r14:Double,r15:Float,r16:Half,r23:BFloat"); mlir::OpBuilder builder(&context); @@ -32,12 +32,13 @@ public: builder.setInsertionPointToStart(entryBlock); fir::support::loadDialects(context); - firBuilder = std::make_unique(mod, kindMap); + firBuilder = std::make_unique(mod, *kindMap); } fir::FirOpBuilder &getBuilder() { return *firBuilder; } mlir::MLIRContext context; + std::unique_ptr kindMap; std::unique_ptr firBuilder; }; diff --git a/flang/unittests/Optimizer/Builder/DoLoopHelperTest.cpp b/flang/unittests/Optimizer/Builder/DoLoopHelperTest.cpp index 8cc2446..3484382 100644 --- a/flang/unittests/Optimizer/Builder/DoLoopHelperTest.cpp +++ b/flang/unittests/Optimizer/Builder/DoLoopHelperTest.cpp @@ -15,9 +15,9 @@ struct DoLoopHelperTest : public testing::Test { public: void SetUp() { - fir::KindMapping kindMap(&context); + kindMap = std::make_unique(&context); mlir::OpBuilder builder(&context); - firBuilder = new fir::FirOpBuilder(builder, kindMap); + firBuilder = new fir::FirOpBuilder(builder, *kindMap); fir::support::loadDialects(context); } void TearDown() { delete firBuilder; } @@ -25,6 +25,7 @@ public: fir::FirOpBuilder &getBuilder() { return *firBuilder; } mlir::MLIRContext context; + std::unique_ptr kindMap; fir::FirOpBuilder *firBuilder; }; -- 2.7.4