Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assertion fail durring bounds widening #1153

Closed
john-h-kastner opened this issue Aug 11, 2021 · 1 comment · Fixed by #1154
Closed

Assertion fail durring bounds widening #1153

john-h-kastner opened this issue Aug 11, 2021 · 1 comment · Fixed by #1154
Assignees
Labels
bug This labels issues that are bugs.

Comments

@john-h-kastner
Copy link
Contributor

char *realpath(const char *__name, char *__resolved);
void vsf_sysutil_realpath(void) {
  _Nt_array_ptr<char> b = 0;
  _Nt_array_ptr<char> a = 0;
  a = (_Nt_array_ptr<char>) realpath(b, 0);
}
Unknown builtin type!
UNREACHABLE executed at /home/cc/checkedc-clang/clang/lib/AST/ASTContext.cpp:1977!
PLEASE submit a bug report to https://github.com/Microsoft/checkedc-clang/issues and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.	Program arguments: clang -c test.c
1.	<eof> parser at end of file
2.	test.c:2:33: parsing function body 'vsf_sysutil_realpath'
 #0 0x0000557e565b3512 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/cc/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:565:22
 #1 0x0000557e565b35cd PrintStackTraceSignalHandler(void*) /home/cc/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:632:1
 #2 0x0000557e565b1243 llvm::sys::RunSignalHandlers() /home/cc/checkedc-clang/llvm/build/../lib/Support/Signals.cpp:71:20
 #3 0x0000557e565b2d33 llvm::sys::CleanupOnSignal(unsigned long) /home/cc/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:361:31
 #4 0x0000557e564d3f16 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/cc/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:75:5
 #5 0x0000557e564d444f CrashRecoverySignalHandler(int) /home/cc/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:389:1
 #6 0x00007f8423eaf420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x15420)
 #7 0x00007f842394e18b raise /build/glibc-YbNSs7/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #8 0x00007f842392d859 abort /build/glibc-YbNSs7/glibc-2.31/stdlib/abort.c:81:7
 #9 0x0000557e564dc73b bindingsErrorHandler(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) /home/cc/checkedc-clang/llvm/build/../lib/Support/ErrorHandling.cpp:222:55
#10 0x0000557e5b734144 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const /home/cc/checkedc-clang/clang/lib/AST/ASTContext.cpp:1980:13
#11 0x0000557e5b733a3b clang::ASTContext::getTypeInfo(clang::Type const*) const /home/cc/checkedc-clang/clang/lib/AST/ASTContext.cpp:1883:34
#12 0x0000557e569a7640 clang::ASTContext::getTypeInfo(clang::QualType) const /home/cc/checkedc-clang/clang/include/clang/AST/ASTContext.h:2174:80
#13 0x0000557e569a7669 clang::ASTContext::getTypeSize(clang::QualType) const /home/cc/checkedc-clang/clang/include/clang/AST/ASTContext.h:2180:73
#14 0x0000557e5bb89fd1 clang::InverseUtil::IsCastExprInvertible(clang::Sema&, clang::Expr*, clang::CastExpr*) /home/cc/checkedc-clang/clang/lib/AST/ExprUtils.cpp:593:41
#15 0x0000557e5bb89ac2 clang::InverseUtil::IsInvertible(clang::Sema&, clang::Expr*, clang::Expr*) /home/cc/checkedc-clang/clang/lib/AST/ExprUtils.cpp:488:63
#16 0x0000557e5a32c074 clang::BoundsWideningAnalysis::CheckStmtInvertibility(clang::BoundsWideningAnalysis::ElevatedCFGBlock*, clang::Stmt const*, llvm::SmallPtrSet<clang::VarDecl const*, 2u>) const /home/cc/checkedc-clang/clang/lib/Sema/BoundsWideningAnalysis.cpp:896:3
#17 0x0000557e5a32bdb6 clang::BoundsWideningAnalysis::GetVarsAndBoundsForModifiedVars(clang::BoundsWideningAnalysis::ElevatedCFGBlock*, clang::Stmt const*, llvm::DenseMap<clang::VarDecl const*, clang::RangeBoundsExpr*, llvm::DenseMapInfo<clang::VarDecl const*>, llvm::detail::DenseMapPair<clang::VarDecl const*, clang::RangeBoundsExpr*> >&) /home/cc/checkedc-clang/clang/lib/Sema/BoundsWideningAnalysis.cpp:825:25
#18 0x0000557e5a32a21b clang::BoundsWideningAnalysis::ComputeStmtGenKillSets(clang::BoundsWideningAnalysis::ElevatedCFGBlock*, clang::Stmt const*, llvm::SmallPtrSet<clang::Stmt const*, 16u>) /home/cc/checkedc-clang/clang/lib/Sema/BoundsWideningAnalysis.cpp:298:22
#19 0x0000557e5a329da6 clang::BoundsWideningAnalysis::ComputeGenKillSets(clang::BoundsWideningAnalysis::ElevatedCFGBlock*, llvm::SmallPtrSet<clang::Stmt const*, 16u>) /home/cc/checkedc-clang/clang/lib/Sema/BoundsWideningAnalysis.cpp:202:27
#20 0x0000557e5a3294c9 clang::BoundsWideningAnalysis::WidenBounds(clang::FunctionDecl*, llvm::SmallPtrSet<clang::Stmt const*, 16u>) /home/cc/checkedc-clang/clang/lib/Sema/BoundsWideningAnalysis.cpp:48:23
#21 0x0000557e59fb0194 (anonymous namespace)::CheckBoundsDeclarations::TraverseCFG(clang::AvailableFactsAnalysis&, clang::FunctionDecl*) /home/cc/checkedc-clang/clang/lib/Sema/SemaBounds.cpp:2797:40
#22 0x0000557e59fbc260 clang::Sema::CheckFunctionBodyBoundsDecls(clang::FunctionDecl*, clang::Stmt*) /home/cc/checkedc-clang/clang/lib/Sema/SemaBounds.cpp:6139:54
#23 0x0000557e5a72e1e8 clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*, bool) /home/cc/checkedc-clang/clang/lib/Sema/SemaDecl.cpp:15636:9
#24 0x0000557e5a72d95b clang::Sema::ActOnFinishFunctionBody(clang::Decl*, clang::Stmt*) /home/cc/checkedc-clang/clang/lib/Sema/SemaDecl.cpp:15568:1
#25 0x0000557e59c05265 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&, clang::CheckedScopeSpecifier) /home/cc/checkedc-clang/clang/lib/Parse/ParseStmt.cpp:2354:41
#26 0x0000557e59b59f1d clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) /home/cc/checkedc-clang/clang/lib/Parse/Parser.cpp:1435:36
#27 0x0000557e59b7276a clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) /home/cc/checkedc-clang/clang/lib/Parse/ParseDecl.cpp:2066:36
#28 0x0000557e59b58bde clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /home/cc/checkedc-clang/clang/lib/Parse/Parser.cpp:1173:52
#29 0x0000557e59b58cd1 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /home/cc/checkedc-clang/clang/lib/Parse/Parser.cpp:1189:57
#30 0x0000557e59b58038 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (.localalias) /home/cc/checkedc-clang/clang/lib/Parse/Parser.cpp:991:58
#31 0x0000557e59b5713e clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) /home/cc/checkedc-clang/clang/lib/Parse/Parser.cpp:737:42
#32 0x0000557e59b52642 clang::ParseAST(clang::Sema&, bool, bool) /home/cc/checkedc-clang/clang/lib/Parse/ParseAST.cpp:158:37
#33 0x0000557e575e0153 clang::ASTFrontendAction::ExecuteAction() /home/cc/checkedc-clang/clang/lib/Frontend/FrontendAction.cpp:1056:11
#34 0x0000557e57794f94 clang::CodeGenAction::ExecuteAction() /home/cc/checkedc-clang/clang/lib/CodeGen/CodeGenAction.cpp:1083:5
#35 0x0000557e575dfa12 clang::FrontendAction::Execute() /home/cc/checkedc-clang/clang/lib/Frontend/FrontendAction.cpp:953:38
#36 0x0000557e574d4aee clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/cc/checkedc-clang/clang/lib/Frontend/CompilerInstance.cpp:949:42
#37 0x0000557e5778222f clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/cc/checkedc-clang/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
#38 0x0000557e549e7075 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/cc/checkedc-clang/clang/tools/driver/cc1_main.cpp:240:40
#39 0x0000557e549daf4e ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) /home/cc/checkedc-clang/clang/tools/driver/driver.cpp:330:20
#40 0x0000557e573be667 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()::operator()() const /home/cc/checkedc-clang/clang/lib/Driver/Job.cpp:404:32
#41 0x0000557e573bef2a void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const::'lambda'()>(long) /home/cc/checkedc-clang/llvm/include/llvm/ADT/STLExtras.h:186:40
#42 0x0000557e564c5aee llvm::function_ref<void ()>::operator()() const /home/cc/checkedc-clang/llvm/build/../include/llvm/ADT/STLExtras.h:209:62
#43 0x0000557e564d4662 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/cc/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:425:10
#44 0x0000557e573be876 clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, bool*) const /home/cc/checkedc-clang/clang/lib/Driver/Job.cpp:404:7
#45 0x0000557e573650b0 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const /home/cc/checkedc-clang/clang/lib/Driver/Compilation.cpp:195:22
#46 0x0000557e57365438 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const /home/cc/checkedc-clang/clang/lib/Driver/Compilation.cpp:248:53
#47 0x0000557e57375220 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) /home/cc/checkedc-clang/clang/lib/Driver/Driver.cpp:1517:28
#48 0x0000557e549dbf6f main /home/cc/checkedc-clang/clang/tools/driver/driver.cpp:502:39
#49 0x00007f842392f0b3 __libc_start_main /build/glibc-YbNSs7/glibc-2.31/csu/../csu/libc-start.c:342:3
#50 0x0000557e549d95ee _start (/home/cc/checkedc-clang/llvm/build/bin/clang-11+0x84a05ee)
clang-11: error: clang frontend command failed with exit code 134 (use -v to see invocation)
@mgrang mgrang self-assigned this Aug 12, 2021
@mgrang mgrang added the bug This labels issues that are bugs. label Aug 12, 2021
@mgrang
Copy link
Contributor

mgrang commented Aug 12, 2021

Thanks for reporting this issue.

The community has introduced a new annotation called "contains-errors" on AST
nodes that contain semantic errors. As a result, after the upgrade of Checked C
sources to LLVM 12 we need to check if an expr contains errors before operating
on the expr. One such place is in InverseUtil::IsInvertible where we need to
check if the input modifying expr contains errors.

I have fixed this in PR #1154

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug This labels issues that are bugs.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants