diff --git a/pkg/analyzer/lib/src/fasta/resolution_applier.dart b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
index 99c1af3..2125919 100644
--- a/pkg/analyzer/lib/src/fasta/resolution_applier.dart
+++ b/pkg/analyzer/lib/src/fasta/resolution_applier.dart
@@ -672,6 +672,7 @@
     for (var argument in argumentList.arguments) {
       if (argument is NamedExpression) {
         argument.expression.accept(this);
+        argument.staticType = argument.expression.staticType;
       } else {
         argument.accept(this);
       }
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
index eb42be1..0b26443 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_kernel_test.dart
@@ -105,13 +105,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_instanceCreation_name_11() async {
-    await super.test_unresolved_instanceCreation_name_11();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_instanceCreation_name_21() async {
     await super.test_unresolved_instanceCreation_name_21();
   }
@@ -133,13 +126,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_instanceCreation_name_32() async {
-    await super.test_unresolved_instanceCreation_name_32();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_instanceCreation_name_33() async {
     await super.test_unresolved_instanceCreation_name_33();
   }
@@ -154,13 +140,6 @@
   @override
   @failingTest
   @potentialAnalyzerProblem
-  test_unresolved_methodInvocation_target_resolved() async {
-    await super.test_unresolved_methodInvocation_target_resolved();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
   test_unresolved_methodInvocation_target_unresolved() async {
     await super.test_unresolved_methodInvocation_target_unresolved();
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 685a711..8e06650 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -125,13 +125,11 @@
 
       SimpleIdentifier nameIdentifier = named.name.label;
       expect(nameIdentifier.staticElement, isNull);
-      if (useCFE) {
-        expect(nameIdentifier.staticType, isDynamicType);
-      }
+      expect(nameIdentifier.staticType, isNull);
 
-      SimpleIdentifier arg2Node = named.expression;
-      expect(arg2Node.staticElement, same(variable.getter));
-      expect(arg2Node.staticType, variable.type);
+      SimpleIdentifier expression = named.expression;
+      expect(expression.staticElement, same(variable.getter));
+      expect(expression.staticType, variable.type);
     };
   }
 
@@ -8310,6 +8308,7 @@
       if (argument is NamedExpression) {
         SimpleIdentifier name = argument.name.label;
         expect(name.staticElement, same(actualParameter));
+        expect(name.staticType, isNull);
       }
     }
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 255f585..9409dc1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -66,6 +66,7 @@
         DynamicType,
         Expression,
         Initializer,
+        InvalidConstructorInvocationJudgment,
         InvalidType,
         Member,
         Name,
@@ -792,11 +793,13 @@
   @override
   Expression invokeConstructor(List<DartType> typeArguments, String name,
       Arguments arguments, Token nameToken, Constness constness) {
+    helper.storeTypeUse(offsetForToken(token), const InvalidType());
     if (typeArguments != null) {
       assert(forest.argumentsTypeArguments(arguments).isEmpty);
       forest.argumentsSetTypeArguments(arguments, typeArguments);
     }
-    return new SyntheticExpressionJudgment(buildError(arguments));
+    var error = buildError(arguments);
+    return new InvalidConstructorInvocationJudgment(error, null, arguments);
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 31f9b75..143ea69 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -2857,8 +2857,8 @@
   }
 }
 
-/// Synthetic judgment class representing an attempt to invoke a constructor
-/// that cannot be invoked.
+/// Synthetic judgment class representing an attempt to invoke an unresolved
+/// constructor, or a constructor that cannot be invoked.
 class InvalidConstructorInvocationJudgment extends SyntheticExpressionJudgment {
   final Constructor constructor;
   final Arguments arguments;
@@ -2874,13 +2874,21 @@
       ShadowTypeInferrer inferrer,
       Factory<Expression, Statement, Initializer, Type> factory,
       DartType typeContext) {
-    var calleeType = constructor.function.functionType;
-    var inferenceResult = inferrer.inferInvocation(
+    FunctionType calleeType;
+    DartType returnType;
+    if (constructor != null) {
+      calleeType = constructor.function.functionType;
+      returnType = computeConstructorReturnType(constructor);
+    } else {
+      calleeType = new FunctionType([], const DynamicType());
+      returnType = const DynamicType();
+    }
+    ExpressionInferenceResult inferenceResult = inferrer.inferInvocation(
         factory,
         typeContext,
         fileOffset,
         calleeType,
-        computeConstructorReturnType(constructor),
+        returnType,
         argumentJudgments);
     this.inferredType = inferenceResult.type;
     inferrer.listener.constructorInvocation(
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 64ee7d5..e03c017 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1750,6 +1750,7 @@
       // TODO(paulberry): handle this case.
     } else if (node is InvalidType) {
       // TODO(paulberry): handle this case.
+      listener.storeClassReference(offset, null, const DynamicType());
     } else {
       // TODO(paulberry): handle this case.
       return unhandled("${node.runtimeType}", "storeTypeUse", offset, uri);
diff --git a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
index f6b2dd6..f7f9eda 100644
--- a/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
+++ b/pkg/front_end/testcases/expression/lib_nonshown_ctor.expression.yaml.expect
@@ -1,5 +1,6 @@
 Errors: {
   Method not found: 'Directory'. (@4)
+  Too many positional arguments: 0 allowed, 1 given. (@0)
 }
 method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
   return throw new dart.core::NoSuchMethodError::withInvocation(null, new dart.core::_InvocationMirror::_withType(#Directory, 32, const <dart.core::Type>[], dart.core::List::unmodifiable<dynamic>(<dynamic>["test"]), dart.core::Map::unmodifiable<dart.core::Symbol, dynamic>(const <dart.core::Symbol, dynamic>{})));
