Multiple results from LookupSameContext (ExternalASTMerger.cpp)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Multiple results from LookupSameContext (ExternalASTMerger.cpp)

Adam Cieszkiel via cfe-dev
Hi all,

In our local build of clang we see a crash in one of the clang tests
running clang-import-test. Specifically, LookupSameContext finds two
results (shown below), and the fact that there are two of them triggers
the assertion.

This is where the assertion occurs:
   size_t SearchResultSize = SearchResult.size();
   // Handle multiple candidates once we have a test for it.
   // This may turn up when we import template specializations correctly.
   assert(SearchResultSize < 2);

The __va_list... is not something defined in any of the sources in the
test, it's a builtin type for Hexagon's handling of va_arg.

Does anyone have any pointers as to what the problem may be? Could this
be a legitimate case of multiple results, or these two type declarations
should not have been found/backed up/etc.?

result 1:
TypedefDecl 0x229d2a0 <<invalid sloc>> <invalid sloc> implicit
__va_list_tag 'struct __va_list_tag'
`-RecordType 0x229d1c0 'struct __va_list_tag'
   `-CXXRecord 0x229d110 '__va_list_tag'

result 2:
CXXRecordDecl 0x229d110 <<invalid sloc>> <invalid sloc> implicit struct
__va_list_tag definition
|-TypeVisibilityAttr 0x229d1e0 <<invalid sloc>> Implicit Default
`-<undeserialized declarations>



The test:

clang-import-test --import test/Import/conflicting-struct/Inputs/S1.cpp
--import test/Import/conflicting-struct/Inputs/S2.cpp -expression
test/Import/conflicting-struct/test.cpp

Full stack trace:

clang-import-test: lib/AST/ExternalASTMerger.cpp:71: Source<const
clang::DeclContext *> (anonymous
namespace)::LookupSameContext(Source<clang::TranslationUnitDecl *>,
const clang::DeclContext *, clang::ASTImporter &): Assertion
`SearchResultSize < 2' failed.
#0 0x000000000050bf54 PrintStackTraceSignalHandler(void*)
(clang-import-test+0x50bf54)
#1 0x000000000050c1b6 SignalHandler(int) (clang-import-test+0x50c1b6)
#2 0x00007f0fc10fa330 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x10330)
#3 0x00007f0fbfae8c37 gsignal
/build/eglibc-MjiXCM/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#4 0x00007f0fbfaec028 abort
/build/eglibc-MjiXCM/eglibc-2.19/stdlib/abort.c:91:0
#5 0x00007f0fbfae1bf6 __assert_fail_base
/build/eglibc-MjiXCM/eglibc-2.19/assert/assert.c:92:0
#6 0x00007f0fbfae1ca2 (/lib/x86_64-linux-gnu/libc.so.6+0x2fca2)
#7 0x0000000000655a43 (anonymous
namespace)::LookupSameContext((anonymous
namespace)::Source<clang::TranslationUnitDecl*>, clang::DeclContext
const*, clang::ASTImporter&) (clang-import-test+0x655a43)
#8 0x000000000065527b
clang::ExternalASTMerger::FindExternalLexicalDecls(clang::DeclContext
const*, llvm::function_ref<bool (clang::Decl::Kind)>,
llvm::SmallVectorImpl<clang::Decl*>&) (clang-import-test+0x65527b)
#9 0x000000000059cfdd clang::RecordDecl::LoadFieldsFromExternalStorage()
const (clang-import-test+0x59cfdd)
#10 0x000000000059cf1b clang::RecordDecl::field_begin() const
(clang-import-test+0x59cf1b)
#11 0x0000000000732900 (anonymous
namespace)::IsStructurallyEquivalent(clang::StructuralEquivalenceContext&,
clang::RecordDecl*, clang::RecordDecl*) (clang-import-test+0x732900)
#12 0x000000000072d8c7 clang::StructuralEquivalenceContext::Finish()
(clang-import-test+0x72d8c7)
#13 0x000000000072efc5
clang::StructuralEquivalenceContext::IsStructurallyEquivalent(clang::QualType,
clang::QualType) (clang-import-test+0x72efc5)
#14 0x000000000071391e
clang::ASTImporter::IsStructurallyEquivalent(clang::QualType,
clang::QualType, bool) (clang-import-test+0x71391e)
#15 0x0000000000713543
clang::ASTNodeImporter::VisitTypedefNameDecl(clang::TypedefNameDecl*,
bool) (clang-import-test+0x713543)
#16 0x000000000070f311 clang::ASTImporter::Import(clang::Decl*)
(clang-import-test+0x70f311)
#17 0x00000000006550dc
clang::ExternalASTMerger::FindExternalVisibleDeclsByName(clang::DeclContext
const*, clang::DeclarationName) (clang-import-test+0x6550dc)
#18 0x00000000005b2a5c
clang::DeclContext::makeDeclVisibleInContextImpl(clang::NamedDecl*,
bool) (clang-import-test+0x5b2a5c)
#19 0x00000000005b2102
clang::DeclContext::makeDeclVisibleInContextWithFlags(clang::NamedDecl*,
bool, bool) (clang-import-test+0x5b2102)
#20 0x0000000000f25019 clang::Sema::PushOnScopeChains(clang::NamedDecl*,
clang::Scope*, bool) (clang-import-test+0xf25019)
#21 0x0000000000e5d5c9 clang::Sema::Initialize()
(clang-import-test+0xe5d5c9)
#22 0x0000000000c43cdc clang::Parser::Initialize()
(clang-import-test+0xc43cdc)
#23 0x0000000000c3f7b4 clang::ParseAST(clang::Sema&, bool, bool)
(clang-import-test+0xc3f7b4)
#24 0x0000000000c3f676 clang::ParseAST(clang::Preprocessor&,
clang::ASTConsumer*, clang::ASTContext&, bool,
clang::TranslationUnitKind, clang::CodeCompleteConsumer*, bool)
(clang-import-test+0xc3f676)
#25 0x0000000000413f4d (anonymous
namespace)::Parse(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&,
llvm::ArrayRef<std::__1::unique_ptr<clang::CompilerInstance,
std::__1::default_delete<clang::CompilerInstance> > >)
(clang-import-test+0x413f4d)
#26 0x00000000004138fc main (clang-import-test+0x4138fc)
#27 0x00007f0fbfad3f45 __libc_start_main
/build/eglibc-MjiXCM/eglibc-2.19/csu/libc-start.c:321:0
#28 0x0000000000412a17 _start (clang-import-test+0x412a17)


-Krzysztof

--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation
_______________________________________________
cfe-dev mailing list
[hidden email]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
Loading...