llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.15k stars 11.12k forks source link

boost::optional doesn't compile in trunk: Assertion failed: (FromType->isIntegralOrUnscopedEnumerationType()), function endsWithNarrowing, file SemaInit.cpp, line 2326 #11066

Closed llvmbot closed 12 years ago

llvmbot commented 12 years ago
Bugzilla Link 10694
Resolution FIXED
Resolved on Aug 30, 2011 17:38
Version trunk
OS MacOS X
Attachments Preprocessed sources (/tmp/cc-ZmphkT.ii) zipped
Reporter LLVM Bugzilla Contributor

Extended Description

LLVM revision: 137864 Clang revision: 137864 Attached are the preprocessed sources; at the end mentioned as /tmp/cc-ZmphkT.ii.

Assertion failed: (FromType->isIntegralOrUnscopedEnumerationType()), function endsWithNarrowing, file SemaInit.cpp, line 2326. 0 clang 0x00000001019e6b12 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 818 1 clang 0x00000001019e7a93 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 4787 2 libSystem.B.dylib 0x00007fff875511ba _sigtramp + 26 3 libSystem.B.dylib 0x00007fff5fbec6d0 _sigtramp + 3630806320 4 clang 0x00000001019e6f92 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 1970 5 clang 0x0000000100581b88 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 31704 6 clang 0x000000010058a984 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 68052 7 clang 0x000000010058b939 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 72073 8 clang 0x000000010058bb8d llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 72669 9 clang 0x00000001005928ee llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 100670 10 clang 0x000000010058c337 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 74631 11 clang 0x000000010058cf30 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 77696 12 clang 0x000000010059415c llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 106924 13 clang 0x000000010058834c llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 58268 14 clang 0x0000000100447e37 clang::CodeCompletionBuilder::AddTypedTextChunk(char const) + 119479 15 clang 0x000000010031df67 clang::Parser::LexedMethod::~LexedMethod() + 6551 16 clang 0x0000000100327df2 clang::Parser::LexedMethod::~LexedMethod() + 47138 17 clang 0x000000010033204c clang::Parser::LexedMethod::~LexedMethod() + 88700 18 clang 0x0000000100332135 clang::Parser::LexedMethod::~LexedMethod() + 88933 19 clang 0x000000010036eba2 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 11762 20 clang 0x000000010036f7a6 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 14838 21 clang 0x000000010036fd59 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 16297 22 clang 0x00000001003871ea llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 49898 23 clang 0x00000001003285ac clang::Parser::LexedMethod::~LexedMethod() + 49116 24 clang 0x00000001003848b8 llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 39352 25 clang 0x0000000100384d3e llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 40510 26 clang 0x0000000100389a43 llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 60227 27 clang 0x000000010033a821 clang::Parser::DeclaratorScopeObj::EnterDeclaratorScope() + 29697 28 clang 0x000000010033b28a clang::Parser::DeclaratorScopeObj::EnterDeclaratorScope() + 32362 29 clang 0x00000001003323e3 clang::Parser::LexedMethod::~LexedMethod() + 89619 30 clang 0x0000000100389528 llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 58920 31 clang 0x0000000100389e7a llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 61306 32 clang 0x0000000100318e8b llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter >::CreateGEP(llvm::Value, llvm::Value, llvm::Twine const&) + 859 33 clang 0x00000001002e3d1c llvm::DenseMap<clang::GlobalDecl, long long, llvm::DenseMapInfo, llvm::DenseMapInfo >::grow(unsigned int) + 3852 34 clang 0x000000010002e871 llvm::DenseMap<clang::IdentifierInfo const, unsigned int, llvm::DenseMapInfo<clang::IdentifierInfo const>, llvm::DenseMapInfo >::grow(unsigned int) + 9649 35 clang 0x000000010000b7b3 llvm::raw_ostream::operator<<(char const) + 1891 36 clang 0x0000000100001f4c 37 clang 0x000000010000a4fe std::vector<std::string, std::allocator >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator > >, std::string const&) + 13598 38 clang 0x0000000100001334 39 clang 0x000000000000008a Stack dump:

  1. Program arguments: /Users/tobias/llvm/bin/clang -cc1 -triple x86_64-apple-macosx10.6.8 -emit-obj -disable-free -main-file-name QtUserSearchWindow.cpp -pic-level 1 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 123.2 -g -coverage-file Swift/QtUI/UserSearch/QtUserSearchWindow.o -resource-dir /Users/tobias/llvm/bin/../lib/clang/3.0 -isystem /Users/tobias/dev/gsoc/swift-jingle/3rdParty/Boost/src -D IDNA_STATIC -D BOOST_FILESYSTEM_VERSION=2 -D BOOST_SYSTEM_NO_DEPRECATED -D BOOST_ALL_NO_LIB -D HAVE_GROWL -D QT_CORE_LIB -D QT_GUI_LIB -I /Library/Frameworks/QtCore.framework/Versions/4/Headers -I /Library/Frameworks/QtGui.framework/Versions/4/Headers -I /Library/Frameworks/QtWebKit.framework/Versions/4/Headers -I . -I . -I 3rdParty/LibIDN/src -I 3rdParty/LibMiniUPnPc/src -I /usr/include/libxml2 -I Swift/QtUI -F/Library/Frameworks -O2 -Wextra -Wall -Wnon-virtual-dtor -Wundef -Wold-style-cast -Wno-long-long -Woverloaded-virtual -Wredundant-decls -W#warnings -Wc++0x-compat -Waddress-of-temporary -Wambiguous-member-template -Warray-bounds -Watomic-properties -Wbind-to-temporary-copy -Wbuiltin-macro-redefined -Wc++-compat -Wc++0x-extensions -Wcomments -Wconditional-uninitialized -Wconstant-logical-operand -Wdeclaration-after-statement -Wdeprecated -Wdeprecated-implementations -Wdeprecated-writable-strings -Wduplicate-method-arg -Wempty-body -Wendif-labels -Wenum-compare -Wformat=2 -Wfour-char-constants -Wgnu -Wincomplete-implementation -Winvalid-noreturn -Winvalid-offsetof -Winvalid-token-paste -Wlocal-type-template-args -Wmethod-signatures -Wmicrosoft -Wmissing-declarations -Wnon-pod-varargs -Wnonfragile-abi2 -Wnull-dereference -Wout-of-line-declaration -Woverlength-strings -Wpacked -Wpointer-arith -Wpointer-sign -Wprotocol -Wreadonly-setter-attrs -Wselector -Wshift-overflow -Wshift-sign-overflow -Wstrict-selector-match -Wsuper-class-method-mismatch -Wtautological-compare -Wtypedef-redefinition -Wundeclared-selector -Wunknown-warning-option -Wunnamed-type-template-args -Wunused-exception-parameter -Wunused-member-function -Wused-but-marked-unused -Wvariadic-macros -fdeprecated-macro -ferror-limit 19 -fmessage-length 202 -stack-protector 1 -fblocks -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o Swift/QtUI/UserSearch/QtUserSearchWindow.o -x c++ Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
  2. Swift/QtUI/UserSearch/QtUserSearchWindow.cpp:188:176: current parser token ';'
  3. Swift/QtUI/UserSearch/QtUserSearchWindow.cpp:25:1: parsing namespace 'Swift'
  4. Swift/QtUI/UserSearch/QtUserSearchWindow.cpp:183:83: parsing function body 'setSearchFields'
  5. Swift/QtUI/UserSearch/QtUserSearchWindow.cpp:183:83: in compound statement ('{}') clang: error: unable to execute command: Illegal instruction clang: error: clang frontend command failed due to signal 2 (use -v to see invocation) clang: note: diagnostic msg: Please submit a bug report to http://llvm.org/bugs/ and include command line arguments and all diagnostic information. clang: note: diagnostic msg: Preprocessed source(s) are located at: clang: note: diagnostic msg: /tmp/cc-ZmphkT.ii scons: [Swift/QtUI/UserSearch/QtUserSearchWindow.o] Error 254 scons: building terminated because of errors. make: [default] Error 2
llvmbot commented 12 years ago

Should be fixed by r138838. I'd forgotten that boolean conversions can come from pointers. Sorry for the trouble.

Yeah. Can confirm this. It fixed the problem and my original code now compiles without an error/crash. Thanks for the fast fix again.

llvmbot commented 12 years ago

Should be fixed by r138838. I'd forgotten that boolean conversions can come from pointers. Sorry for the trouble.

llvmbot commented 12 years ago

With further efforts and help of the beautiful delta-tool I was able to reduce a test-case even further which still produces the error message/crashes and compiles with g++ but not with clang. If there's something wrong with the test-case please let me know.

#######

namespace optional_detail { struct optional_tag { }; template class optional_base : public optional_tag { typedef optional_base this_type ; protected: typedef bool (this_type::*unspecified_bool_type)() const; }; } template class optional : public optional_detail::optional_base { typedef optional_detail::optional_base base ; typedef typename base::unspecified_bool_type unspecified_bool_type ; public : operator unspecified_bool_type() const { } };

int main() { optional bang; bool enable[1] = { bang }; return 0; }

llvmbot commented 12 years ago

The zipped preprocessed source file from the example in the previous comment in case you don't have boost optional at hand.

llvmbot commented 12 years ago

include <boost/optional.hpp>

bool foo() { boost::optional bang; bool enable[1] = {bang}; return enable[0]; }

This small example also fails (with similar stack dump) for latest clang trunk and works for g++ 4.2.1 (Apple Inc. build 5666). The version of Boost being 1.46.1.

Following is the output of the compilation:

tobias$ /Users/tobias/llvm/bin/clang -cc1 -triple x86_64-apple-macosx10.6.8 -emit-obj -disable-free -main-file-name ClangBug.cpp -pic-level 1 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 123.2 -g -resource-dir /Users/tobias/llvm/bin/../lib/clang/3.0 -isystem /Users/tobias/dev/rep/swift-trunk/3rdParty/Boost/src -D BOOST_FILESYSTEM_VERSION=2 -D BOOST_SYSTEM_NO_DEPRECATED -D BOOST_ALL_NO_LIB -O2 -fdeprecated-macro -ferror-limit 19 -fmessage-length 202 -stack-protector 1 -fblocks -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o Swift/QtUI/UserSearch/ClangBug.o -x c++ Swift/QtUI/UserSearch/ClangBug.cpp Assertion failed: (FromType->isIntegralOrUnscopedEnumerationType()), function endsWithNarrowing, file SemaInit.cpp, line 2344. 0 clang 0x00000001019ff802 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 818 1 clang 0x0000000101a00783 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 4787 2 libSystem.B.dylib 0x00007fff875511ba _sigtramp + 26 3 libSystem.B.dylib 0x00000001025aea80 _sigtramp + 2063980768 4 clang 0x00000001019ffc82 llvm::SmallVectorTemplateBase<llvm_regmatch_t, false>::grow(unsigned long) + 1970 5 clang 0x0000000100591e38 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 27608 6 clang 0x000000010059cc39 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 72153 7 clang 0x000000010059dc29 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 76233 8 clang 0x000000010059de7d llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 76829 9 clang 0x00000001005a472e llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 103630 10 clang 0x000000010059e627 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 78791 11 clang 0x000000010059f220 llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 81856 12 clang 0x0000000100599a8c llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 59436 13 clang 0x000000010059a60c llvm::cast_retty<clang::PointerType, clang::CanQual >::ret_type llvm::cast<clang::PointerType, clang::CanQual >(clang::CanQual const&) + 62380 14 clang 0x00000001004683b4 clang::CodeCompletionBuilder::AddTypedTextChunk(char const) + 185220 15 clang 0x000000010031fc97 clang::Parser::ConsumeAnyToken() + 7335 16 clang 0x0000000100329b32 clang::Parser::ConsumeAnyToken() + 47938 17 clang 0x0000000100333d9c clang::Parser::ConsumeAnyToken() + 89516 18 clang 0x0000000100333e85 clang::Parser::ConsumeAnyToken() + 89749 19 clang 0x0000000100370c72 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 11762 20 clang 0x0000000100371876 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 14838 21 clang 0x0000000100371e29 clang::PragmaOpenCLExtensionHandler::~PragmaOpenCLExtensionHandler() + 16297 22 clang 0x000000010038952a llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 50442 23 clang 0x000000010032a2ec clang::Parser::ConsumeAnyToken() + 49916 24 clang 0x0000000100385698 llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 34424 25 clang 0x0000000100385bcf llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 35759 26 clang 0x000000010038b2b3 llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 58003 27 clang 0x000000010038b9ba llvm::SmallVectorTemplateBase<clang::ParsedTemplateArgument, false>::grow(unsigned long) + 59802 28 clang 0x000000010031a86b llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter >::CreateGEP(llvm::Value, llvm::Value, llvm::Twine const&) + 859 29 clang 0x00000001002e5a1c llvm::DenseMap<clang::GlobalDecl, long long, llvm::DenseMapInfo, llvm::DenseMapInfo >::grow(unsigned int) + 3820 30 clang 0x000000010002ec61 llvm::DenseMap<clang::IdentifierInfo const, unsigned int, llvm::DenseMapInfo<clang::IdentifierInfo const>, llvm::DenseMapInfo >::grow(unsigned int) + 9649 31 clang 0x000000010000bcd7 llvm::raw_ostream::operator<<(char const) + 1895 32 clang 0x000000010000244c 33 clang 0x000000010000aa1e std::vector<std::string, std::allocator >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*, std::vector<std::string, std::allocator > >, std::string const&) + 13614 34 clang 0x0000000100001834 35 clang 0x000000000000002d Stack dump:

  1. Program arguments: /Users/tobias/llvm/bin/clang -cc1 -triple x86_64-apple-macosx10.6.8 -emit-obj -disable-free -main-file-name ClangBug.cpp -pic-level 1 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 123.2 -g -resource-dir /Users/tobias/llvm/bin/../lib/clang/3.0 -isystem /Users/tobias/dev/rep/swift-trunk/3rdParty/Boost/src -D BOOST_FILESYSTEM_VERSION=2 -D BOOST_SYSTEM_NO_DEPRECATED -D BOOST_ALL_NO_LIB -O2 -fdeprecated-macro -ferror-limit 19 -fmessage-length 202 -stack-protector 1 -fblocks -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o Swift/QtUI/UserSearch/ClangBug.o -x c++ Swift/QtUI/UserSearch/ClangBug.cpp
  2. Swift/QtUI/UserSearch/ClangBug.cpp:5:25: current parser token ';'
  3. Swift/QtUI/UserSearch/ClangBug.cpp:3:12: parsing function body 'foo'
  4. Swift/QtUI/UserSearch/ClangBug.cpp:3:12: in compound statement ('{}') Illegal instruction