[flang-commits] [PATCH] D88794: [flang] Fix pimpl idiom for IntrinsicProcTable.
Michael Kruse via Phabricator via flang-commits
flang-commits at lists.llvm.org
Fri Oct 23 21:33:58 PDT 2020
Meinersbur updated this revision to Diff 300455.
Meinersbur added a comment.
- Sort includes
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D88794/new/
https://reviews.llvm.org/D88794
Files:
flang/include/flang/Common/idioms.h
flang/include/flang/Evaluate/intrinsics.h
flang/lib/Evaluate/intrinsics.cpp
Index: flang/lib/Evaluate/intrinsics.cpp
===================================================================
--- flang/lib/Evaluate/intrinsics.cpp
+++ flang/lib/Evaluate/intrinsics.cpp
@@ -2221,16 +2221,12 @@
return DynamicType{category, defaults_.GetDefaultKind(category)};
}
-IntrinsicProcTable::~IntrinsicProcTable() {
- // Discard the configured tables.
- delete impl_;
- impl_ = nullptr;
-}
+IntrinsicProcTable::~IntrinsicProcTable() = default;
IntrinsicProcTable IntrinsicProcTable::Configure(
const common::IntrinsicTypeDefaultKinds &defaults) {
IntrinsicProcTable result;
- result.impl_ = new IntrinsicProcTable::Implementation(defaults);
+ result.impl_ = std::make_unique<IntrinsicProcTable::Implementation>(defaults);
return result;
}
Index: flang/include/flang/Evaluate/intrinsics.h
===================================================================
--- flang/include/flang/Evaluate/intrinsics.h
+++ flang/include/flang/Evaluate/intrinsics.h
@@ -15,6 +15,7 @@
#include "flang/Common/default-kinds.h"
#include "flang/Parser/char-block.h"
#include "flang/Parser/message.h"
+#include <memory>
#include <optional>
#include <string>
@@ -64,8 +65,12 @@
private:
class Implementation;
+ IntrinsicProcTable() = default;
+
public:
~IntrinsicProcTable();
+ IntrinsicProcTable(IntrinsicProcTable &&) = default;
+
static IntrinsicProcTable Configure(
const common::IntrinsicTypeDefaultKinds &);
@@ -100,7 +105,7 @@
llvm::raw_ostream &Dump(llvm::raw_ostream &) const;
private:
- Implementation *impl_{nullptr}; // owning pointer
+ std::unique_ptr<Implementation> impl_;
};
// Check if an intrinsic explicitly allows its INTENT(OUT) arguments to be
Index: flang/include/flang/Common/idioms.h
===================================================================
--- flang/include/flang/Common/idioms.h
+++ flang/include/flang/Common/idioms.h
@@ -26,6 +26,7 @@
#include "llvm/Support/Compiler.h"
#include <functional>
#include <list>
+#include <memory>
#include <optional>
#include <string>
#include <tuple>
@@ -142,6 +143,14 @@
return *p;
}
+template <typename T>
+constexpr T &Deref(const std::unique_ptr<T> &p, const char *file, int line) {
+ if (!p) {
+ Fortran::common::die("nullptr dereference at %s(%d)", file, line);
+ }
+ return *p;
+}
+
// Given a const reference to a value, return a copy of the value.
template <typename A> A Clone(const A &x) { return x; }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D88794.300455.patch
Type: text/x-patch
Size: 2458 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20201024/098c9bb6/attachment.bin>
More information about the flang-commits
mailing list