[clang] [RISCV][FMV] Support target_clones (PR #85786)

Piyou Chen via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 6 06:32:43 PDT 2024


BeMg wrote:

> A test case will crash, missing `+` before `zbc`:
> 
> ```
> __attribute__((target_clones("default", "arch=+zbb,zbc;priority=-1", "priority=-2;arch=+zba", "priority=3;arch=+zbb,+zba"))) int foo1(void) { return 2; }
> 
> 
> int bar() { return foo1(); }
> ```
> 
> ```
> $ clang -cc1 -triple riscv64-linux-gnu -target-feature +i -emit-llvm foo.c
> clang: /home/kitoc/llvm-workspace/llvm-project/llvm/lib/TargetParser/RISCVISAInfo.cpp:455: static llvm::Expected<std::unique_ptr<llvm::RISCVISAInfo> > llvm::RISCVISAInfo::parseFeatures(unsigned int, const std::vector<std::__cxx11::basic_string<char> >&): Assertion `ExtName.size() > 1 && (ExtName[0] == '+' || ExtName[0] == '-')' failed.
> PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
> Stack dump:
> 0.      Program arguments: ./bin/clang -cc1 -triple riscv64-linux-gnu -target-feature +i -emit-llvm attr-target-clones-riscv.c
> 1.      attr-target-clones-riscv.c:7:1: current parser token 'int'
> 2.      attr-target-clones-riscv.c:4:130: LLVM IR generation of declaration 'foo1'
> 3.      attr-target-clones-riscv.c:4:130: Generating code for declaration 'foo1'
>  #0 0x00007f4ed63e00d0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/kitoc/llvm-workspace/build-upstream/bin/../lib/libLLVMSupport.so.20.0git+0x1e00d0)
> ...
> #11 0x00007f4eda71a854 llvm::RISCVISAInfo::parseFeatures(unsigned int, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) (/scratch/kitoc/llvm-workspace/build-upstream/bin/../lib/libLLVMTargetParser.so.20.0git+0x3d854)
> #12 0x00007f4ed825b8e0 clang::targets::RISCVTargetInfo::initFeatureMap(llvm::StringMap<bool, llvm::MallocAllocator>&, clang::DiagnosticsEngine&, llvm::StringRef, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&) const (/scratch/kitoc/llvm-workspace/build-upstream/bin/../lib/libclangBasic.so.20.0git+0x45b8e0)
> ...
> Aborted (core dumped)
> ```

Fixed and add new test.


https://github.com/llvm/llvm-project/pull/85786


More information about the cfe-commits mailing list