this is the final bugfix, i've tested with the test cases in the test directory, and this doesnt changed the result, so it doesnt break any other stuff :)<br><br><br>Index: Sema/SemaDecl.cpp<br>===================================================================
<br>--- Sema/SemaDecl.cpp (revision 46258)<br>+++ Sema/SemaDecl.cpp (working copy)<br>@@ -296,8 +296,8 @@<br> if (hasUndefinedLength(NewAT) || hasUndefinedLength(OldAT)) {<br> if (NewAT->getIndexTypeQualifier() != OldAT->getIndexTypeQualifier())
<br> return false;<br>- NewQType = NewAT->getElementType();<br>- OldQType = OldAT->getElementType();<br>+ NewQType = NewAT->getElementType().getCanonicalType();<br>+ OldQType = OldAT->getElementType().getCanonicalType();
<br> }<br><br> return NewQType == OldQType;<br>@@ -338,10 +338,14 @@<br> return New;<br> }<br> // We've verified the types match, now check if Old is "extern".<br>- if (Old->getStorageClass() != VarDecl::Extern) {
<br>+ if (Old->getStorageClass() != VarDecl::Extern && New->getStorageClass() != VarDecl::Extern) {<br> Diag(New->getLocation(), diag::err_redefinition, New->getName());<br> Diag(Old->getLocation(), diag::err_previous_definition);
<br> }<br>+ // Use non "extern" decl if available<br>+ if (New->getStorageClass() == VarDecl::Extern) {<br>+ return Old;<br>+ }<br> return New;<br> }<br><br>cheers,<br>Csaba<br>