Store resolution for out of range integer literals.

R=brianwilkerson@google.com

Change-Id: Ice783c3fc279bfd34a5aeebf4e9e9f5f014c000b
Reviewed-on: https://dart-review.googlesource.com/68423
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index f87713a..9113894 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -562,18 +562,6 @@
 
   @override
   @failingTest
-  test_integerLiteralOutOfRange_negative() async {
-    await super.test_integerLiteralOutOfRange_negative();
-  }
-
-  @override
-  @failingTest
-  test_integerLiteralOutOfRange_positive() async {
-    await super.test_integerLiteralOutOfRange_positive();
-  }
-
-  @override
-  @failingTest
   test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
     return super
         .test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation();
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 6e147a8..9e5ec5e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -181,9 +181,10 @@
   }
 
   @override
-  IntJudgment literalInt(int value, Token token) {
+  IntJudgment literalInt(int value, Token token, {Expression desugaredError}) {
     return new IntJudgment(
-        typeInferenceTokensSaver?.intLiteralTokens(token), value)
+        typeInferenceTokensSaver?.intLiteralTokens(token), value,
+        desugaredError: desugaredError)
       ..fileOffset = offsetForToken(token);
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index b66c371..5b4ee73 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -73,7 +73,7 @@
 
   /// Return a representation of an integer literal at the given [location]. The
   /// literal has the given [value].
-  Expression literalInt(int value, Token location);
+  Expression literalInt(int value, Token location, {Expression desugaredError});
 
   /// Return a representation of a list literal. The [constKeyword] is the
   /// location of the `const` keyword, or `null` if there is no keyword. The
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 7f5ea50..0cd8f04 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -1427,23 +1427,30 @@
       : super(helper, token);
 
   @override
-  Expression _makeSimpleRead() => new SyntheticExpressionJudgment(buildError());
+  Expression _makeSimpleRead() {
+    return _buildErrorIntLiteral();
+  }
 
   @override
   Expression _makeSimpleWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return new SyntheticExpressionJudgment(buildError());
+    return _buildErrorIntLiteral();
   }
 
   @override
   Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
-    return new SyntheticExpressionJudgment(buildError());
+    return _buildErrorIntLiteral();
   }
 
   @override
   Expression _makeWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return new SyntheticExpressionJudgment(buildError());
+    return _buildErrorIntLiteral();
+  }
+
+  Expression _buildErrorIntLiteral() {
+    var error = buildError();
+    return forest.literalInt(0, token, desugaredError: error);
   }
 }
 
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 43062df..bcbb99f 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
@@ -1597,16 +1597,21 @@
 /// Concrete shadow object representing an integer literal in kernel form.
 class IntJudgment extends IntLiteral implements ExpressionJudgment {
   IntLiteralTokens tokens;
+  final kernel.Expression desugaredError;
 
   DartType inferredType;
 
-  IntJudgment(this.tokens, int value) : super(value);
+  IntJudgment(this.tokens, int value, {this.desugaredError}) : super(value);
 
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
     inferredType = inferrer.coreTypes.intClass.rawType;
     inferrer.listener.intLiteral(this, fileOffset, tokens, value, inferredType);
+    if (desugaredError != null) {
+      parent.replaceChild(this, desugaredError);
+      parent = null;
+    }
     return null;
   }
 }