Issue |
101718
|
Summary |
[clang++] [frontend] crash on parsing ternary operator with `vector_size` as condition guard
|
Labels |
clang
|
Assignees |
|
Reporter |
pskrgag
|
I've observed clang's frontend crash during compilation of following code
```
#include <stdint.h>
typedef int64_t vec __attribute__((vector_size(32)));
vec foo (vec x, vec y)
{
return *((vec){ 0, 0, 0, 0 } ? &x : &y);
}
```
Reproduces in both C and CXX modes.
Godbolt link: https://godbolt.org/z/sxMhz5eGW
Backtrace:
```
clang++: /home/paskripkin/Documents/git/llvm-project/clang/include/clang/AST/Type.h:957: const clang::ExtQualsTypeCommonBase* clang::QualType::getCommonPtr() const: Assertion `!isNull() && "Cannot retrieve a NULL type pointer"' 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: /home/paskripkin/Documents/git/llvm-project/build/bin/clang++ --analyze -Xclang -analyzer-checker=core.UndefinedBinaryOperatorResult bug.cpp
1. bug.cpp:7:41: current parser token ')'
2. bug.cpp:6:1: parsing function body 'foo'
3. bug.cpp:6:1: in compound statement ('{}')
#0 0x0000000004c6b8b6 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
#1 0x0000000004c6bcf4 PrintStackTraceSignalHandler(void*) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
#2 0x0000000004c6947a llvm::sys::RunSignalHandlers() /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/Signals.cpp:105:20
#3 0x0000000004c6b1a0 llvm::sys::CleanupOnSignal(unsigned long) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/Unix/Signals.inc:367:31
#4 0x0000000004b9f238 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
#5 0x0000000004b9f6c7 CrashRecoverySignalHandler(int) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:391:1
#6 0x00007f7ada65c9a0 __restore_rt (/lib64/libc.so.6+0x3e9a0)
#7 0x00007f7ada6ae834 __pthread_kill_implementation (/lib64/libc.so.6+0x90834)
#8 0x00007f7ada65c8ee gsignal (/lib64/libc.so.6+0x3e8ee)
#9 0x00007f7ada6448ff abort (/lib64/libc.so.6+0x268ff)
#10 0x00007f7ada64481b _nl_load_domain.cold (/lib64/libc.so.6+0x2681b)
#11 0x00007f7ada654c57 (/lib64/libc.so.6+0x36c57)
#12 0x0000000004fcbeb3 clang::QualType::getCommonPtr() const /home/paskripkin/Documents/git/llvm-project/clang/include/clang/AST/Type.h:958:73
#13 0x0000000004fcd7e2 clang::QualType::getTypePtr() const /home/paskripkin/Documents/git/llvm-project/clang/include/clang/AST/Type.h:7744:26
#14 0x0000000004fcc018 clang::QualType::operator->() const /home/paskripkin/Documents/git/llvm-project/clang/include/clang/AST/Type.h:1002:3
#15 0x000000000956fc32 clang::Sema::CheckVectorConditionalTypes(clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::SourceLocation) /home/paskripkin/Documents/git/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:6725:40
#16 0x0000000009570e22 clang::Sema::CXXCheckConditionalOperands(clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::ExprValueKind&, clang::ExprObjectKind&, clang::SourceLocation) /home/paskripkin/Documents/git/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:6934:67
#17 0x000000000929f3eb clang::Sema::CheckConditionalOperands(clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::ActionResult<clang::Expr*, true>&, clang::ExprValueKind&, clang::ExprObjectKind&, clang::SourceLocation) /home/paskripkin/Documents/git/llvm-project/clang/lib/Sema/SemaExpr.cpp:8332:39
#18 0x00000000092a14ad clang::Sema::ActOnConditionalOp(clang::SourceLocation, clang::SourceLocation, clang::Expr*, clang::Expr*, clang::Expr*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Sema/SemaExpr.cpp:8770:45
#19 0x0000000008bbad87 clang::Parser::ParseRHSOfBinaryExpression(clang::ActionResult<clang::Expr*, true>, clang::prec::Level) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:669:55
#20 0x0000000008bb8865 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:185:58
#21 0x0000000008bb85f6 clang::Parser::ParseExpression(clang::Parser::TypeCastState) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:133:43
#22 0x0000000008bc7441 clang::Parser::ParseParenExpression(clang::Parser::ParenParseOption&, bool, bool, clang::OpaquePtr<clang::QualType>&, clang::SourceLocation&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:3348:29
#23 0x0000000008bbd7cf clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:1093:31
#24 0x0000000008bbb0ff clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:712:39
#25 0x0000000008bbf1ad clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:1485:30
#26 0x0000000008bbb0ff clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, clang::Parser::TypeCastState, bool, bool*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:712:39
#27 0x0000000008bb8849 clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:182:39
#28 0x0000000008bb85f6 clang::Parser::ParseExpression(clang::Parser::TypeCastState) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseExpr.cpp:133:43
#29 0x0000000008c49f9c clang::Parser::ParseReturnStatement() /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseStmt.cpp:2469:26
#30 0x0000000008c41936 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseStmt.cpp:350:31
#31 0x0000000008c40a6d clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseStmt.cpp:124:62
#32 0x0000000008c45298 clang::Parser::ParseCompoundStatementBody(bool) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseStmt.cpp:1257:38
#33 0x0000000008c4a44a clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseStmt.cpp:2535:47
#34 0x0000000008b2d1d9 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/Parser.cpp:1525:36
#35 0x0000000008b5f66c clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseDecl.cpp:2471:40
#36 0x0000000008b2bf22 clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/Parser.cpp:1249:24
#37 0x0000000008b2c0b7 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/Parser.cpp:1271:42
#38 0x0000000008b2b370 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/Parser.cpp:1074:50
#39 0x0000000008b2a06c clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/Parser.cpp:763:36
#40 0x0000000008b2513c clang::ParseAST(clang::Sema&, bool, bool) /home/paskripkin/Documents/git/llvm-project/clang/lib/Parse/ParseAST.cpp:171:37
#41 0x0000000005d1a3ce clang::ASTFrontendAction::ExecuteAction() /home/paskripkin/Documents/git/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1192:11
#42 0x0000000005d19d1f clang::FrontendAction::Execute() /home/paskripkin/Documents/git/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1082:38
#43 0x0000000005c3b523 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1061:42
#44 0x0000000005ebca29 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/paskripkin/Documents/git/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:38
#45 0x0000000000e1b113 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/paskripkin/Documents/git/llvm-project/clang/tools/driver/cc1_main.cpp:285:40
#46 0x0000000000e0cf90 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/paskripkin/Documents/git/llvm-project/clang/tools/driver/driver.cpp:215:20
#47 0x0000000000e0d17d clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)::operator()(llvm::SmallVectorImpl<char const*>&) const /home/paskripkin/Documents/git/llvm-project/clang/tools/driver/driver.cpp:356:5
#48 0x0000000000e0e733 int llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::callback_fn<clang_main(int, char**, llvm::ToolContext const&)::'lambda'(llvm::SmallVectorImpl<char const*>&)>(long, llvm::SmallVectorImpl<char const*>&) /home/paskripkin/Documents/git/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:47:3
#49 0x0000000005a905c3 llvm::function_ref<int (llvm::SmallVectorImpl<char const*>&)>::operator()(llvm::SmallVectorImpl<char const*>&) const /home/paskripkin/Documents/git/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:3
#50 0x0000000005a8f332 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()::operator()() const /home/paskripkin/Documents/git/llvm-project/clang/lib/Driver/Job.cpp:440:32
#51 0x0000000005a8f749 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) /home/paskripkin/Documents/git/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:40
#52 0x00000000038eb8ac llvm::function_ref<void ()>::operator()() const /home/paskripkin/Documents/git/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:62
#53 0x0000000004b9f88f llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/paskripkin/Documents/git/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:427:10
#54 0x0000000005a8f51e clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const /home/paskripkin/Documents/git/llvm-project/clang/lib/Driver/Job.cpp:440:7
#55 0x0000000005a313f1 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /home/paskripkin/Documents/git/llvm-project/clang/lib/Driver/Compilation.cpp:199:22
#56 0x0000000005a3171d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const /home/paskripkin/Documents/git/llvm-project/clang/lib/Driver/Compilation.cpp:253:62
#57 0x0000000005a43fb4 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) /home/paskripkin/Documents/git/llvm-project/clang/lib/Driver/Driver.cpp:1943:28
#58 0x0000000000e0e2ef clang_main(int, char**, llvm::ToolContext const&) /home/paskripkin/Documents/git/llvm-project/clang/tools/driver/driver.cpp:391:39
#59 0x0000000000e44b0d main /home/paskripkin/Documents/git/llvm-project/build/tools/clang/tools/driver/clang-driver.cpp:17:20
#60 0x00007f7ada64614a __libc_start_call_main (/lib64/libc.so.6+0x2814a)
#61 0x00007f7ada64620b __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x2820b)
#62 0x0000000000e0c3e5 _start (/home/paskripkin/Documents/git/llvm-project/build/bin/clang+++0xe0c3e5)
clang++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs