lpython icon indicating copy to clipboard operation
lpython copied to clipboard

Build errors with Clang on macOS: `KaleidoscopeJIT.h: error: use of undeclared identifier 'Optional'; did you mean 'std::optional'?` etc.

Open barracuda156 opened this issue 1 year ago • 2 comments

I noticed that originally Clang-17 was used with LLVM-16:

[ 75%] Building CXX object src/libasr/CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o
cd /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/build/src/libasr && /opt/local/bin/clang++-mp-17 -DHAVE_TARGET_AARCH64=1 -DHAVE_WHEREAMI=1 -DHAVE_ZLIB=1 -DLCOMPILERS_FAST_ALLOC=1 -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/build/src/libasr/.. -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/.. -isystem /opt/local/libexec/llvm-16/include -isystem /opt/local/include -pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Wall -Wextra -O3 -march=native -funroll-loops -DNDEBUG -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -mmacosx-version-min=14.0 -fPIC -fno-rtti -std=gnu++17 -Wno-deprecated-declarations -MD -MT src/libasr/CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o -MF CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o.d -o CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o -c /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/llvm_utils.cpp
In file included from /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:57:
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/../libasr/codegen/KaleidoscopeJIT.h:74:15: error: use of undeclared identifier 'Optional'; did you mean 'std::optional'?
   74 |     auto RM = Optional<Reloc::Model>();
      |               ^
/opt/local/libexec/llvm-17/bin/../include/c++/v1/optional:695:36: note: 'std::optional' declared here
  695 | class _LIBCPP_DECLSPEC_EMPTY_BASES optional
      |                                    ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:181:38: error: expected '(' for function-style cast or type construction
  181 |     llvm::Optional<llvm::Reloc::Model> RM = llvm::Reloc::Model::PIC_;
      |                    ~~~~~~~~~~~~~~~~~~^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:181:11: error: no member named 'Optional' in namespace 'llvm'
  181 |     llvm::Optional<llvm::Reloc::Model> RM = llvm::Reloc::Model::PIC_;
      |     ~~~~~~^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:181:40: error: use of undeclared identifier 'RM'
  181 |     llvm::Optional<llvm::Reloc::Model> RM = llvm::Reloc::Model::PIC_;
      |                                        ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/llvm_utils.cpp:1380:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
 1380 |         fn->getBasicBlockList().push_back(bb);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-16/include/llvm/IR/Function.h:728:29: note: declared private here
  728 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:182:73: error: use of undeclared identifier 'RM'
  182 |     TM = target->createTargetMachine(target_triple, CPU, features, opt, RM);
      |                                                                         ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/asr_to_llvm.cpp:248:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
  248 |         fn->getBasicBlockList().push_back(bb);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-16/include/llvm/IR/Function.h:728:29: note: declared private here
  728 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/asr_to_llvm.cpp:4856:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
 4856 |         fn->getBasicBlockList().push_back(blockend);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-16/include/llvm/IR/Function.h:728:29: note: declared private here
  728 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
1 error generated.

However with LLVM-17 it still fails:

[ 75%] Building CXX object src/libasr/CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o
cd /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/build/src/libasr && /opt/local/bin/clang++-mp-17 -DHAVE_TARGET_AARCH64=1 -DHAVE_WHEREAMI=1 -DHAVE_ZLIB=1 -DLCOMPILERS_FAST_ALLOC=1 -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/build/src/libasr/.. -I/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/.. -isystem /opt/local/libexec/llvm-17/include -isystem /opt/local/include -pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Wall -Wextra -O3 -march=native -funroll-loops -DNDEBUG -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -mmacosx-version-min=14.0 -fPIC -fno-rtti -std=gnu++17 -Wno-deprecated-declarations -MD -MT src/libasr/CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o -MF CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o.d -o CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o -c /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/llvm_utils.cpp
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/evaluator.cpp:39:10: fatal error: 'llvm/Transforms/IPO/PassManagerBuilder.h' file not found
   39 | #include <llvm/Transforms/IPO/PassManagerBuilder.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [src/libasr/CMakeFiles/asr.dir/codegen/evaluator.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/llvm_utils.cpp:1380:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
 1380 |         fn->getBasicBlockList().push_back(bb);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-17/include/llvm/IR/Function.h:738:29: note: declared private here
  738 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/asr_to_llvm.cpp:248:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
  248 |         fn->getBasicBlockList().push_back(bb);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-17/include/llvm/IR/Function.h:738:29: note: declared private here
  738 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
1 error generated.
make[2]: *** [src/libasr/CMakeFiles/asr.dir/codegen/llvm_utils.cpp.o] Error 1
/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_lang_lpython/lpython/work/lpython-0.20.0/src/libasr/codegen/asr_to_llvm.cpp:4856:13: error: 'getBasicBlockList' is a private member of 'llvm::Function'
 4856 |         fn->getBasicBlockList().push_back(blockend);
      |         ~~~~^~~~~~~~~~~~~~~~~
/opt/local/libexec/llvm-17/include/llvm/IR/Function.h:738:29: note: declared private here
  738 |         BasicBlockListType &getBasicBlockList()       { return BasicBlocks; }
      |                             ^
2 errors generated.
make[2]: *** [src/libasr/CMakeFiles/asr.dir/codegen/asr_to_llvm.cpp.o] Error 1

barracuda156 avatar Jan 10 '24 06:01 barracuda156

Without linking to LLVM it builds fine.

barracuda156 avatar Jan 10 '24 07:01 barracuda156

LLVM 17 is not supported yet, but LLVM 16 should work. We need to fix that.

certik avatar Jan 10 '24 18:01 certik