diff options
author | Rainer Orth <ro@gcc.gnu.org> | 2022-02-10 16:09:50 +0100 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2022-03-01 14:22:00 -0800 |
commit | 3001b0d519630e2f1f0e2c4710379b3dbb43b715 (patch) | |
tree | 4d6b3ca358371a88bf2fd203123248ee3d403c23 | |
parent | 41d4f89e38b718b3a291fb24ff0e2b654ee1ff79 (diff) |
[fir] Fix FlangOptimizerTests link on Solaris
As reported in Issue #53690,
`tools/flang/unittests/Optimizer/FlangOptimizerTests` `FAIL`s to link on
Solaris:
Undefined first referenced
symbol in file
_ZN3fir7runtimeL8getModelIcEEPFN4mlir4TypeEPNS2_11MLIRContextEEv lib/libFIRBuilder.a(Reduction.cpp.o)
which is `mlir::Type (*fir::runtime::getModel<char>())(mlir::MLIRContext*)`.
`clang++` warn's
In file included from /var/llvm/llvm-14.0.0-rc1/rc1/llvm-project/flang/lib/Optimizer/Builder/Runtime/Reduction.cpp:14:
/var/llvm/llvm-14.0.0-rc1/rc1/llvm-project/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h:60:34: warning: function 'fir::runtime::getModel<char>' has internal linkage but is not defined [-Wundefined-internal]
static constexpr TypeBuilderFunc getModel();
^
/var/llvm/llvm-14.0.0-rc1/rc1/llvm-project/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h:289:29: note: used here
TypeBuilderFunc ret = getModel<RT>();
^
Fixed by adding an explicit template instantiation for `getModel<char>`. I
suppose this is necessary because on Solaris `char` is `signed`.
Tested on `sparcv9-sun-solaris2.11`.
Differential Revision: https://reviews.llvm.org/D119438
(cherry picked from commit c2b9e9674d5259c12a055055f4e06eba5b8d0fa6)
-rw-r--r-- | flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h index 072e3f26a49b..8fea99e00873 100644 --- a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h +++ b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h @@ -100,6 +100,12 @@ constexpr TypeBuilderFunc getModel<const char32_t *>() { }; } template <> +constexpr TypeBuilderFunc getModel<char>() { + return [](mlir::MLIRContext *context) -> mlir::Type { + return mlir::IntegerType::get(context, 8 * sizeof(char)); + }; +} +template <> constexpr TypeBuilderFunc getModel<signed char>() { return [](mlir::MLIRContext *context) -> mlir::Type { return mlir::IntegerType::get(context, 8 * sizeof(signed char)); |