Issue 147121
Summary clang++ front end crash on combination of explicit object parameter, static_assert()
Labels clang
Assignees
Reporter m2
    I encountered this with clang 20.1.2, 20.1.7 as installed from the Ubuntu PPA. Trying on godbolt.org, the "assertions trunk" version encounters this but x86-64 20.1.0 does not, so an "assertions" build seems relevant.

With the following code as bug.cpp:
```
#include <iterator>

struct X
{};

struct S1
{
  using difference_type = int;

  template<typename Self>
  Self operator++(this Self&& self, int) {
    return self;
  }

 template<typename Self>
  bool operator==(this Self&& self, const X&) {
 return true;
  }
};

struct S2 : public S1
{
  using value_type = char;

  char operator*() const {
    return {};
  }

  S2& operator++() {
    return *this;
  }

  using S1::operator++;
};

int main()
{
  static_assert(std::weakly_incrementable<S2>); // crash 

  return 0;
}
```
`clang++ -std=c++2c -stdlib=libc++ bug.cpp
`
yields:
```
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: /usr/lib/llvm-20/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name bug.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/tmp -fcoverage-compilation-dir=/tmp -resource-dir /usr/lib/llvm-20/lib/clang/20 -internal-isystem /usr/lib/llvm-20/bin/../include/c++/v1 -internal-isystem /usr/lib/llvm-20/lib/clang/20/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++2c -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fno-implicit-modules -fskip-odr-check-in-gmf -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/bug-a73dec.o -x c++ bug.cpp
1.	bug.cpp:39:46: current parser token ')'
2.	bug.cpp:38:1: parsing function body 'main'
3.	bug.cpp:38:1: in compound statement ('{}')
4.	/usr/lib/llvm-20/bin/../include/c++/v1/__iterator/incrementable_traits.h:64:8: instantiating class definition 'std::iterator_traits<S2>'
#0 0x000079eace21f816 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-20/bin/../lib/libLLVM.so.20.1+0x101f816)
#1 0x000079eace21d410 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-20/bin/../lib/libLLVM.so.20.1+0x101d410)
#2 0x000079eace21fecb (/usr/lib/llvm-20/bin/../lib/libLLVM.so.20.1+0x101fecb)
#3 0x000079eacca42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000079ead9262301 (/usr/lib/llvm-20/bin/../lib/libclang-cpp.so.20.1+0x3662301)
clang++: error: unable to execute command: Segmentation fault
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 20.1.7 (++20250613062716+6146a88f6049-1~exp1~20250613062748.129)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-20/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/bug-07fa73.cpp
clang++: note: diagnostic msg: /tmp/bug-07fa73.sh
clang++: note: diagnostic msg: 

********************
```

I intentionally didn't include the "PLEASE ATTACH" files yet because the requested .cpp is 760K and I'm assuming this can easily be reproduced with the source included above.

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to