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>