由于没有匹配函数,LLVM构建错误

时间:2017-10-23 15:42:37

标签: c++ llvm llvm-clang

我克隆了LLVM git存储库并遵循https://llvm.org/docs/GettingStarted.html。用

配置后
cmake $SOURCEDIR -G "Unix Makefiles" \
 -DCLANG_DEFAULT_CXX_STDLIB=libc++ \
 -DC_INCLUDE_DIRS=:/usr/include \
 -DLLVM_ENABLE_WERROR=OFF \
 -DCMAKE_BUILD_TYPE=DEBUG \
 -DCMAKE_C_COMPILER=$CC \
 -DCMAKE_CXX_COMPILER=$CXX \
 -DCMAKE_EXE_LINKER_FLAGS="${LDFLAGS}" \
 -DCMAKE_CXX_FLAGS_RELEASE="${CXXFLAGS}" \
 -DCMAKE_INSTALL_PREFIX=$INSTALLDIR \
 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

我尝试使用

构建LLVM和Clang
make -j 24

但它很糟糕(我添加了新行以提高可读性):

/home/myUserName/LLVM/sources/tools/clang/utils/TableGen/ClangAttrEmitter.cpp: 
In constructor ‘{anonymous}::EnumArgument::EnumArgument(const llvm::Record&, llvm::StringRef)’:

/home/myUserName/LLVM/sources/tools/clang/utils/TableGen/ClangAttrEmitter.cpp:740:42: 
error: no matching function for call to 
‘std::vector<std::__cxx11::basic_string<char> >::vector(std::vector<llvm::StringRef>)’
     uniques(uniqueEnumsInOrder(enums))
                                      ^

不幸的是我不明白为什么会出现问题,因为这个函数应该在

中声明
tools/clang/utils/TableGen/ClangAttrEmitter.cpp:722.

这是相应代码的摘录:

// Unique the enums, but maintain the original declaration ordering.
std::vector<std::string>
uniqueEnumsInOrder(const std::vector<std::string> &enums) {
 std::vector<std::string> uniques;
 SmallDenseSet<StringRef, 8> unique_set;
 for (const auto &i : enums) {
   if (unique_set.insert(i).second)
     uniques.push_back(i);
 }    
 return uniques;
}

class EnumArgument : public Argument {
 std::string type;
 std::vector<std::string> values, enums, uniques;
public:
 EnumArgument(const Record &Arg, StringRef Attr)
   : Argument(Arg, Attr), type(Arg.getValueAsString("Type")),
     values(Arg.getValueAsListOfStrings("Values")),
     enums(Arg.getValueAsListOfStrings("Enums")),
     uniques(uniqueEnumsInOrder(enums))
 {    
   // FIXME: Emit a proper error
   assert(!uniques.empty());
 }  

我使用gcc 7.2.0和Ubuntu 16.04.3 LTS。

更新

与此同时,我有机会使用gcc 5.4.0构建LLVM + Clang,并且构建成功完成。这是否意味着存在编译器错误或者问题分别是gcc标准?

0 个答案:

没有答案