Skip to content

Commit 3001b0d

Browse files
rorthtstellar
authored andcommitted
[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 c2b9e96)
1 parent 41d4f89 commit 3001b0d

File tree

1 file changed

+6
-0
lines changed
  • flang/include/flang/Optimizer/Builder/Runtime

1 file changed

+6
-0
lines changed

flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,12 @@ constexpr TypeBuilderFunc getModel<const char32_t *>() {
100100
};
101101
}
102102
template <>
103+
constexpr TypeBuilderFunc getModel<char>() {
104+
return [](mlir::MLIRContext *context) -> mlir::Type {
105+
return mlir::IntegerType::get(context, 8 * sizeof(char));
106+
};
107+
}
108+
template <>
103109
constexpr TypeBuilderFunc getModel<signed char>() {
104110
return [](mlir::MLIRContext *context) -> mlir::Type {
105111
return mlir::IntegerType::get(context, 8 * sizeof(signed char));

0 commit comments

Comments
 (0)