Index: lib/Sema/TreeTransform.h =================================================================== --- lib/Sema/TreeTransform.h +++ lib/Sema/TreeTransform.h @@ -10956,23 +10956,19 @@ // Transform and check key. ExprResult Key = getDerived().TransformExpr(OrigElement.Key); - if (Key.isInvalid()) - return ExprError(); - - if (Key.get() != OrigElement.Key) + if (!Key.isInvalid() && Key.get() != OrigElement.Key) ArgChanged = true; // Transform and check value. ExprResult Value = getDerived().TransformExpr(OrigElement.Value); - if (Value.isInvalid()) - return ExprError(); - - if (Value.get() != OrigElement.Value) + if (!Value.isInvalid() && Value.get() != OrigElement.Value) ArgChanged = true; ObjCDictionaryElement Element = { - Key.get(), Value.get(), SourceLocation(), None + Key.isInvalid() ? OrigElement.Key : Key.get(), + Value.isInvalid() ? OrigElement.Value : Value.get(), SourceLocation(), + None }; Elements.push_back(Element); } Index: test/SemaObjC/objc-dictionary-literal.m =================================================================== --- test/SemaObjC/objc-dictionary-literal.m +++ test/SemaObjC/objc-dictionary-literal.m @@ -63,3 +63,11 @@ return 0; } +enum XXXYYYZZZType { XXXYYYZZZTypeAny }; // expected-note {{'XXXYYYZZZTypeAny' declared here}} + +void foo() { + NSDictionary *d = @{ + @"A" : @(XXXYYYZZZTypeA), // expected-error {{use of undeclared identifier 'XXXYYYZZZTypeA'; did you mean 'XXXYYYZZZTypeAny'}} + @"F" : @(XXXYYYZZZTypeSomethingSomething), // expected-error {{use of undeclared identifier 'XXXYYYZZZTypeSomethingSomething'}} + }; +}