Fixed in r178502, thanks for the report.<br><br><div class="gmail_quote">On Mon, Apr 1, 2013 at 6:32 AM, zhangxiongpang <span dir="ltr"><<a href="mailto:zhangxiongpang@gmail.com" target="_blank">zhangxiongpang@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>





<div style="MARGIN:10px">
<div> </div>
<div>Hello, Rafael.</div>
<div> </div>
<div style="TEXT-INDENT:2em"> I've commited it with a bug id 15633 .</div>
<div> </div>
<hr style="WIDTH:210px;min-height:1px" align="left" color="#b5c4df" size="1">

<div><span>zhangxiongpang</span></div>
<div> </div>
<div style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;PADDING-BOTTOM:0cm;PADDING-LEFT:0cm;PADDING-RIGHT:0cm;BORDER-TOP:#b5c4df 1pt solid;BORDER-RIGHT:medium none;PADDING-TOP:3pt">
<div style="padding-right:8px;padding-left:8px;padding-top:8px;font-size:12px;background:#efefef;padding-bottom:8px">
<div><b>From:</b> <a href="mailto:rafael.espindola@gmail.com" target="_blank">Rafael 
Espíndola</a></div>
<div><b>Date:</b> <a href="tel:2013-04-01%C2%A021" value="+12013040121" target="_blank">2013-04-01 21</a>:10</div>
<div><b>To:</b> <a href="mailto:zhangxiongpang@gmail.com" target="_blank">ZhangXiongpang</a></div>
<div><b>CC:</b> <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">clang-dev 
Developers</a></div>
<div><b>Subject:</b> Re: [cfe-dev] [C++11][Forwarding declaration of 
enumerations] a bug involving defining enumeration outside of template class 
body</div></div></div><div><div class="h5">
<div>
<div>Can you please report a bug in <a href="http://llvm.org/bugs" target="_blank">llvm.org/bugs</a>?</div>
<div> </div>
<div>Thanks,</div>
<div>Rafael</div>
<div> </div>
<div> </div>
<div>On 1 April 2013 03:39, ZhangXiongpang <<a href="mailto:zhangxiongpang@gmail.com" target="_blank">zhangxiongpang@gmail.com</a>> wrote:</div>
<div>> Platform: linux, x86_84, clang++3.3 (trunk 177699), g++4.7.2</div>
<div>></div>
<div>> Today I wrote some code testing c++11 "Forwarding declaration of</div>
<div>> enumerations".</div>
<div>> And a strange thing occurred. The following code makes clang++ core dump and</div>
<div>> makes g++ got into a dead loop.</div>
<div>> ----------------------------------</div>
<div>> template <class T></div>
<div>> struct X {</div>
<div>>     struct Y {</div>
<div>>         enum class E : T;</div>
<div>>     };</div>
<div>> };</div>
<div>></div>
<div>> template <class T></div>
<div>> enum class X<T>::Y::E : T { e1, e2 };</div>
<div>></div>
<div>> template class X<int>;</div>
<div>> ----------------------------------</div>
<div>></div>
<div>> The core dump information is as follows:</div>
<div>> ----------------------------------</div>
<div>> clang:</div>
<div>> /root/work/newdisk/zhang/llvm/llvm/tools/clang/lib/Sema/SemaTemplate.cpp:863:</div>
<div>> clang::DeclResult clang::Sema::CheckClassTemplate(clang::Scope*, unsigned</div>
<div>> int, clang::Sema::TagUseKind, clang::SourceLocation, clang::CXXScopeSpec&,</div>
<div>> clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*,</div>
<div>> clang::TemplateParameterList*, clang::AccessSpecifier,</div>
<div>> clang::SourceLocation, unsigned int, clang::TemplateParameterList**):</div>
<div>> Assertion `Kind != TTK_Enum && "can't build template of enumerated type"'</div>
<div>> failed.</div>
<div>> 0  clang           0x0000000002f4e50d llvm::sys::PrintStackTrace(_IO_FILE*)</div>
<div>> + 38</div>
<div>> 1  clang           0x0000000002f4e78a</div>
<div>> 2  clang           0x0000000002f4e1e2</div>
<div>> 3  libpthread.so.0 0x0000003ffd40f4c0</div>
<div>> 4  libc.so.6       0x0000003ffcc329a5 gsignal + 53</div>
<div>> 5  libc.so.6       0x0000003ffcc34185 abort + 373</div>
<div>> 6  libc.so.6       0x0000003ffcc2b935 __assert_fail + 245</div>
<div>> 7  clang           0x00000000014514e6</div>
<div>> clang::Sema::CheckClassTemplate(clang::Scope*, unsigned int,</div>
<div>> clang::Sema::TagUseKind, clang::SourceLocation, clang::CXXScopeSpec&,</div>
<div>> clang::IdentifierInfo*, clang::SourceLocation, clang::AttributeList*,</div>
<div>> clang::TemplateParameterList*, clang::AccessSpecifier,</div>
<div>> clang::SourceLocation, unsigned int, clang::TemplateParameterList**) + 290</div>
<div>> 8  clang           0x0000000001222119 clang::Sema::ActOnTag(clang::Scope*,</div>
<div>> unsigned int, clang::Sema::TagUseKind, clang::SourceLocation,</div>
<div>> clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::SourceLocation,</div>
<div>> clang::AttributeList*, clang::AccessSpecifier, clang::SourceLocation,</div>
<div>> llvm::MutableArrayRef<clang::TemplateParameterList*>, bool&, bool&,</div>
<div>> clang::SourceLocation, bool,</div>
<div>> clang::ActionResult<clang::OpaquePtr&lt;clang::QualType>, false>) + 637</div>
<div>> 9  clang           0x00000000010fe46c</div>
<div>> clang::Parser::ParseEnumSpecifier(clang::SourceLocation, clang::DeclSpec&,</div>
<div>> clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,</div>
<div>> clang::Parser::DeclSpecContext) + 4258</div>
<div>> 10 clang           0x00000000010fc207</div>
<div>> clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,</div>
<div>> clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,</div>
<div>> clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) + 9139</div>
<div>> 11 clang           0x000000000114b09b</div>
<div>> clang::Parser::ParseSingleDeclarationAfterTemplate(unsigned int,</div>
<div>> clang::Parser::ParsedTemplateInfo const&, clang::ParsingDeclRAIIObject&,</div>
<div>> clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*) + 425</div>
<div>> 12 clang           0x000000000114aea4</div>
<div>> clang::Parser::ParseTemplateDeclarationOrSpecialization(unsigned int,</div>
<div>> clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*) +</div>
<div>> 1046</div>
<div>> 13 clang           0x000000000114a9e5</div>
<div>> clang::Parser::ParseDeclarationStartingWithTemplate(unsigned int,</div>
<div>> clang::SourceLocation&, clang::AccessSpecifier, clang::AttributeList*) + 217</div>
<div>> 14 clang           0x00000000010f6d0e</div>
<div>> clang::Parser::ParseDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&,</div>
<div>> unsigned int, clang::SourceLocation&,</div>
<div>> clang::Parser::ParsedAttributesWithRange&) + 242</div>
<div>> 15 clang           0x00000000010e5a32</div>
<div>> clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,</div>
<div>> clang::ParsingDeclSpec*) + 1622</div>
<div>> 16 clang           0x00000000010e53ab</div>
<div>> clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) +</div>
<div>> 413</div>
<div>> 17 clang           0x00000000010e1db2 clang::ParseAST(clang::Sema&, bool,</div>
<div>> bool) + 610</div>
<div>> 18 clang           0x0000000000cd5ef4</div>
<div>> clang::ASTFrontendAction::ExecuteAction() + 298</div>
<div>> 19 clang           0x0000000000f056e6 clang::CodeGenAction::ExecuteAction()</div>
<div>> + 1296</div>
<div>> 20 clang           0x0000000000cd5a76 clang::FrontendAction::Execute() + 200</div>
<div>> 21 clang           0x0000000000caabc4</div>
<div>> clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 722</div>
<div>> 22 clang           0x0000000000c7acee</div>
<div>> clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1048</div>
<div>> 23 clang           0x0000000000c6ab87 cc1_main(char const**, char const**,</div>
<div>> char const*, void*) + 673</div>
<div>> 24 clang           0x0000000000c7528d main + 484</div>
<div>> 25 libc.so.6       0x0000003ffcc1ec5d __libc_start_main + 253</div>
<div>> 26 clang           0x0000000000c6a309</div>
<div>> Stack dump:</div>
<div>> 0.      Program arguments:</div>
<div>> /root/work/newdisk/zhang/llvm/build/Debug+Asserts/bin/clang -cc1 -triple</div>
<div>> x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name</div>
<div>> test.cpp -mrelocation-model static -mdisable-fp-elim -fmath-errno</div>
<div>> -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64</div>
<div>> -target-linker-version 2.20.51.0.2 -momit-leaf-frame-pointer -coverage-file</div>
<div>> /root/work/newdisk/zhang/c++11/20130401/forward_declarations_for_enums/test.o</div>
<div>> -resource-dir</div>
<div>> /root/work/newdisk/zhang/llvm/build/Debug+Asserts/bin/../lib/clang/3.3</div>
<div>> -I/opt/intel/composer_xe_2013.1.117/mkl/include</div>
<div>> -I/opt/intel/composer_xe_2013.1.117/tbb/include -internal-isystem</div>
<div>> /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../include/c++/4.4.4</div>
<div>> -internal-isystem</div>
<div>> /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../include/c++/4.4.4/x86_64-redhat-linux</div>
<div>> -internal-isystem</div>
<div>> /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../include/c++/4.4.4/backward</div>
<div>> -internal-isystem</div>
<div>> /usr/lib/gcc/x86_64-redhat-linux/4.4.4/../../../../include/x86_64-redhat-linux/c++/4.4.4</div>
<div>> -internal-isystem /usr/local/include -internal-isystem</div>
<div>> /root/work/newdisk/zhang/llvm/build/Debug+Asserts/bin/../lib/clang/3.3/include</div>
<div>> -internal-externc-isystem /include -internal-externc-isystem /usr/include</div>
<div>> -std=c++11 -fdeprecated-macro -fdebug-compilation-dir</div>
<div>> /root/work/newdisk/zhang/c++11/20130401/forward_declarations_for_enums</div>
<div>> -ferror-limit 19 -fmessage-length 114 -mstackrealign -fobjc-runtime=gcc</div>
<div>> -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions</div>
<div>> -fdiagnostics-show-option -fcolor-diagnostics -backend-option</div>
<div>> -vectorize-loops -o test.o -x c++ test.cpp</div>
<div>> 1.      test.cpp:11:27: current parser token '{'</div>
<div>> clang: error: unable to execute command: Aborted (core dumped)</div>
<div>> clang: error: clang frontend command failed due to signal (use -v to see</div>
<div>> invocation)</div>
<div>> clang version 3.3 (trunk 177699) (llvm/trunk 177691)</div>
<div>> Target: x86_64-unknown-linux-gnu</div>
<div>> Thread model: posix</div>
<div>> clang: note: diagnostic msg: PLEASE submit a bug report to</div>
<div>> <a href="http://llvm.org/bugs/" target="_blank">http://llvm.org/bugs/</a> and include the crash backtrace, preprocessed source,</div>
<div>> and associated run script.</div>
<div>> clang: note: diagnostic msg:</div>
<div>> ********************</div>
<div>></div>
<div>> PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:</div>
<div>> Preprocessed source(s) and associated run script(s) are located at:</div>
<div>> clang: note: diagnostic msg: /tmp/test-9ucxjN.cpp</div>
<div>> clang: note: diagnostic msg: /tmp/test-9ucxjN.sh</div>
<div>> clang: note: diagnostic msg:</div>
<div>></div>
<div>> ********************</div>
<div>> ----------------------------------</div>
<div>></div>
<div>></div>
<div>></div>
<div>></div>
<div>> --</div>
<div>> View this message in context: <a href="http://clang-developers.42468.n3.nabble.com/C-11-Forwarding-declaration-of-enumerations-a-bug-involving-defining-enumeration-outside-of-templatey-tp4031237.html" target="_blank">http://clang-developers.42468.n3.nabble.com/C-11-Forwarding-declaration-of-enumerations-a-bug-involving-defining-enumeration-outside-of-templatey-tp4031237.html</a></div>

<div>> Sent from the Clang Developers mailing list archive at Nabble.com.</div>
<div>> _______________________________________________</div>
<div>> cfe-dev mailing list</div>
<div>> <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a></div>
<div>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a></div></div></div></div></div>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br>