[dart2js] Fix for issue 33572

Change-Id: If33e59880c882885b4368a8be91663298deb207c
Reviewed-on: https://dart-review.googlesource.com/61965
Commit-Queue: Stephen Adams <sra@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 7069820..0ce6141 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -13,6 +13,7 @@
 import '../js_emitter/code_emitter_task.dart';
 import '../options.dart';
 import '../universe/world_builder.dart';
+import 'allocator_analysis.dart' show JAllocatorAnalysis;
 import 'constant_system_javascript.dart';
 import 'js_backend.dart';
 import 'namer.dart';
@@ -40,6 +41,7 @@
   final CodegenWorldBuilder _worldBuilder;
   final RuntimeTypesNeed _rtiNeed;
   final RuntimeTypesEncoder _rtiEncoder;
+  final JAllocatorAnalysis _allocatorAnalysis;
   final Namer _namer;
   final CodeEmitterTask _task;
   final _ConstantReferenceGenerator constantReferenceGenerator;
@@ -56,6 +58,7 @@
       this._worldBuilder,
       this._rtiNeed,
       this._rtiEncoder,
+      this._allocatorAnalysis,
       this._namer,
       this._task,
       this.constantReferenceGenerator,
@@ -325,7 +328,9 @@
         _emitter.constructorAccess(constant.type.element);
     List<jsAst.Expression> fields = <jsAst.Expression>[];
     _worldBuilder.forEachInstanceField(element, (_, FieldEntity field) {
-      fields.add(constantReferenceGenerator(constant.fields[field]));
+      if (!_allocatorAnalysis.isInitializedInAllocator(field)) {
+        fields.add(constantReferenceGenerator(constant.fields[field]));
+      }
     });
     if (_rtiNeed.classNeedsTypeArguments(constant.type.element)) {
       fields.add(_reifiedTypeArguments(constant, constant.type.typeArguments));
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index 407b49e..19692ba 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -166,6 +166,7 @@
         compiler.codegenWorldBuilder,
         _closedWorld.rtiNeed,
         compiler.backend.rtiEncoder,
+        _closedWorld.allocatorAnalysis,
         namer,
         task,
         this.constantReference,
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index edda727..46bce90 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -83,6 +83,7 @@
         compiler.codegenWorldBuilder,
         _closedWorld.rtiNeed,
         compiler.backend.rtiEncoder,
+        _closedWorld.allocatorAnalysis,
         namer,
         task,
         this.generateConstantReference,
diff --git a/tests/compiler/dart2js_extra/33572_test.dart b/tests/compiler/dart2js_extra/33572_test.dart
new file mode 100644
index 0000000..b8d475f
--- /dev/null
+++ b/tests/compiler/dart2js_extra/33572_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for issue 32853.
+
+import "package:expect/expect.dart";
+import "package:meta/dart2js.dart" show noInline;
+
+class A {
+  final x = null;
+  final y;
+  const A(this.y);
+}
+
+main() {
+  var a1 = new A(1);
+  var a2 = const A(2);
+  test(a1, null, 1);
+  test(a2, null, 2);
+}
+
+@noInline
+test(a, expectedX, expectedY) {
+  Expect.equals(expectedX, a.x);
+  Expect.equals(expectedY, a.y);
+}