Skip to content

Parsers assertion fail after mistyped _For_any declaration #1091

Open
@john-h-kastner

Description

@john-h-kastner
_Forany(T) void foo(void);
_For_any(T) void bar(void);

It looks like the first (mistyped) declaration is parsed as a K&R style prototype for a function _Forany, so it expects the following lines to be parameter declarations. Something about encountering _For_any in that context causes an assertion to fail.

for_any_typo.c:1:17: error: parameter named 'foo' is missing
_Forany(T) void foo(void);
                ^
clang: /home/john/checkedc-clang/clang/lib/Sema/SemaDecl.cpp:14281: clang::ParmVarDecl* clang::Sema::ActOnParamDeclarator(clang::Scope*, clang::Declarator&): Assertion `S->isFunctionPrototypeScope()' failed.
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 for_any_typo.c 
1.	for_any_typo.c:2:27: current parser token ';'
 #0 0x0000562844fb1381 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/john/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:564:22
 #1 0x0000562844fb1418 PrintStackTraceSignalHandler(void*) /home/john/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:625:1
 #2 0x0000562844faf16b llvm::sys::RunSignalHandlers() /home/john/checkedc-clang/llvm/build/../lib/Support/Signals.cpp:68:20
 #3 0x0000562844fb0b87 llvm::sys::CleanupOnSignal(unsigned long) /home/john/checkedc-clang/llvm/build/../lib/Support/Unix/Signals.inc:361:31
 #4 0x0000562844ef1728 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) /home/john/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:77:5
 #5 0x0000562844ef1c1a CrashRecoverySignalHandler(int) /home/john/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:383:1
 #6 0x00007fc006da23c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0)
 #7 0x00007fc00684218b raise /build/glibc-eX1tMB/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #8 0x00007fc006821859 abort /build/glibc-eX1tMB/glibc-2.31/stdlib/abort.c:81:7
 #9 0x00007fc006821729 get_sysdep_segment_value /build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:509:8
#10 0x00007fc006821729 _nl_load_domain /build/glibc-eX1tMB/glibc-2.31/intl/loadmsgcat.c:970:34
#11 0x00007fc006832f36 (/lib/x86_64-linux-gnu/libc.so.6+0x36f36)
#12 0x00005628485880cc clang::Sema::ActOnParamDeclarator(clang::Scope*, clang::Declarator&) /home/john/checkedc-clang/clang/lib/Sema/SemaDecl.cpp:14282:3
#13 0x000056284803e637 clang::Parser::ParseKNRParamDeclarations(clang::Declarator&) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:1482:37
#14 0x000056284803d15e clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:1205:25
#15 0x000056284805cd31 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) /home/john/checkedc-clang/clang/lib/Parse/ParseDecl.cpp:2013:36
#16 0x000056284803ce74 clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:1138:59
#17 0x000056284803cf67 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:1154:57
#18 0x000056284803c2d1 clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) (.localalias) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:956:58
#19 0x000056284803b42a clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:704:42
#20 0x000056284803adc9 clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) /home/john/checkedc-clang/clang/lib/Parse/Parser.cpp:572:43
#21 0x0000562848036d0a clang::ParseAST(clang::Sema&, bool, bool) /home/john/checkedc-clang/clang/lib/Parse/ParseAST.cpp:157:47
#22 0x0000562845c02b11 clang::ASTFrontendAction::ExecuteAction() /home/john/checkedc-clang/clang/lib/Frontend/FrontendAction.cpp:1057:11
#23 0x000056284657f7e3 clang::CodeGenAction::ExecuteAction() /home/john/checkedc-clang/clang/lib/CodeGen/CodeGenAction.cpp:1185:1
#24 0x0000562845c02468 clang::FrontendAction::Execute() /home/john/checkedc-clang/clang/lib/Frontend/FrontendAction.cpp:954:38
#25 0x0000562845b92d6f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/john/checkedc-clang/clang/lib/Frontend/CompilerInstance.cpp:984:42
#26 0x0000562845d9e4db clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/john/checkedc-clang/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:278:38
#27 0x000056284363c91b cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/john/checkedc-clang/clang/tools/driver/cc1_main.cpp:240:40
#28 0x00005628436317e3 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) /home/john/checkedc-clang/clang/tools/driver/driver.cpp:330:20
#29 0x0000562845a88659 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/john/checkedc-clang/clang/lib/Driver/Job.cpp:400:32
#30 0x0000562845a88f22 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/john/checkedc-clang/llvm/include/llvm/ADT/STLExtras.h:186:40
#31 0x0000562844ee4636 llvm::function_ref<void ()>::operator()() const /home/john/checkedc-clang/llvm/build/../include/llvm/ADT/STLExtras.h:203:62
#32 0x0000562844ef1e2c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) /home/john/checkedc-clang/llvm/build/../lib/Support/CrashRecoveryContext.cpp:419:10
#33 0x0000562845a88881 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/john/checkedc-clang/clang/lib/Driver/Job.cpp:400:7
#34 0x0000562845a3b6af clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&) const /home/john/checkedc-clang/clang/lib/Driver/Compilation.cpp:195:22
#35 0x0000562845a3ba12 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const /home/john/checkedc-clang/clang/lib/Driver/Compilation.cpp:246:53
#36 0x0000562845a4b8c2 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) /home/john/checkedc-clang/clang/lib/Driver/Driver.cpp:1509:28
#37 0x00005628436327b7 main /home/john/checkedc-clang/clang/tools/driver/driver.cpp:502:39
#38 0x00007fc0068230b3 __libc_start_main /build/glibc-eX1tMB/glibc-2.31/csu/../csu/libc-start.c:342:3
#39 0x000056284362fe7e _start (/home/john/checkedc-clang/llvm/build/bin/clang-11+0x2601e7e)

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:3This labels bugs that are not very critical but still need to be addressed.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions