[PATCH] Sema: Properly perform lookup when acting on fields for	desig inits
    Richard Smith 
    richard at metafoo.co.uk
       
    Sat Aug  9 22:16:36 PDT 2014
    
    
  
================
Comment at: lib/Sema/SemaInit.cpp:1923-1931
@@ -1973,16 +1922,11 @@
 
-      if (!KnownField) {
-        // The replacement field comes from typo correction; find it
-        // in the list of fields.
-        FieldIndex = 0;
-        Field = RT->getDecl()->field_begin();
-        for (; Field != FieldEnd; ++Field) {
-          if (Field->isUnnamedBitfield())
-            continue;
-
-          if (ReplacementField == *Field ||
-              Field->getIdentifier() == ReplacementField->getIdentifier())
-            break;
-
-          ++FieldIndex;
+        if (!ReplacementField) {
+          // Name lookup found something, but it wasn't a field.
+          SemaRef.Diag(D->getFieldLoc(), diag::err_field_designator_nonfield)
+              << FieldName;
+          SemaRef.Diag(Lookup.front()->getLocation(),
+                       diag::note_field_designator_found);
+          ++Index;
+          return true;
         }
+
----------------
This looks to be unreachable now.
I think you should rearrange this a little: if `lookup` found something, but didn't find a field, then issue this diagnostic. Otherwise, fall through to here and do typo correction.
================
Comment at: lib/Sema/SemaInit.cpp:1933-1934
@@ +1932,4 @@
+
+        // The replacement field comes from typo correction;
+        // find it in the list of fields.
+        KnownField = ReplacementField;
----------------
This comment doesn't make sense any more.
http://reviews.llvm.org/D4839
    
    
More information about the cfe-commits
mailing list