[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