diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index ebde0b4..e7d1ebc 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.3.12-dev";
+  public static final String LABEL = "1.3.13-dev";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 519bd58..b151ef8 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -123,7 +123,7 @@
     DexCode code = method.getCode().asDexCode();
     // As we have rewritten the code, we now know that its highest string index that is not
     // a jumbo-string is firstJumboString (actually the previous string, but we do not have that).
-    method.setDexCode(new DexCode(
+    method.setCode(new DexCode(
         code.registerSize,
         code.incomingRegisterSize,
         code.outgoingRegisterSize,
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index e41120d..d588ab5 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -206,6 +206,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return internalBuild(encodedMethod, appInfo, graphLense, options, null, null, origin);
   }
 
@@ -218,6 +219,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     assert valueNumberGenerator != null;
     assert callerPosition != null;
     return internalBuild(
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 0484a63..187756a 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -16,6 +16,18 @@
 
 public abstract class Code extends CachedHashValueDexItem {
 
+  private DexEncodedMethod owner;
+
+  public void setOwner(DexEncodedMethod encodedMethod) {
+    // When this Code is un/linked to DexEncodedMethod, the ownership should be updated accordingly.
+    owner = encodedMethod;
+  }
+
+  public DexEncodedMethod getOwner() {
+    // build*IR() will check if the current Code belongs to the given DexEncodedMethod.
+    return owner;
+  }
+
   public abstract IRCode buildIR(
       DexEncodedMethod encodedMethod,
       AppInfo appInfo,
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index d0c40e1..d5f8001 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -193,6 +193,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     DexSourceCode source =
         new DexSourceCode(
             this,
@@ -213,6 +214,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     DexSourceCode source =
         new DexSourceCode(
             this,
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index e90839c..c540d24 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -116,6 +116,7 @@
     this.parameterAnnotationsList = parameterAnnotationsList;
     this.code = code;
     assert code == null || !accessFlags.isAbstract();
+    setCodeOwnership();
   }
 
   public DexEncodedMethod(
@@ -276,7 +277,9 @@
   }
 
   public void setCode(Code code) {
+    voidCodeOwnership();
     this.code = code;
+    setCodeOwnership();
   }
 
   public void setCode(
@@ -284,7 +287,7 @@
       RegisterAllocator registerAllocator,
       InternalOptions options) {
     final DexBuilder builder = new DexBuilder(ir, registerAllocator, options);
-    code = builder.build(method.getArity());
+    setCode(builder.build(method.getArity()));
   }
 
   @Override
@@ -316,12 +319,21 @@
     return code;
   }
 
-  public void setDexCode(DexCode code) {
-    this.code = code;
+  public void removeCode() {
+    voidCodeOwnership();
+    code = null;
   }
 
-  public void removeCode() {
-    code = null;
+  private void setCodeOwnership() {
+    if (code != null) {
+      code.setOwner(this);
+    }
+  }
+
+  private void voidCodeOwnership() {
+    if (code != null) {
+      code.setOwner(null);
+    }
   }
 
   public boolean hasDebugPositions() {
@@ -389,6 +401,7 @@
 
   public DexEncodedMethod toAbstractMethod() {
     accessFlags.setAbstract();
+    voidCodeOwnership();
     this.code = null;
     return this;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index 28143ad..629017b 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -113,6 +113,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     triggerDelayedParsingIfNeccessary();
     return options.debug
         ? internalBuildWithLocals(encodedMethod, appInfo, graphLense, options, null, null)
@@ -128,6 +129,7 @@
       ValueNumberGenerator generator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     assert generator != null;
     triggerDelayedParsingIfNeccessary();
     return options.debug
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index b6eb879..f1c1700 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -146,6 +146,8 @@
     assert this.context != null;
     this.code = code;
     this.context = null;
+    // Propagate the ownership of LazyCfCode to CfCode.
+    code.setOwner(this.getOwner());
   }
 
   @Override
@@ -180,6 +182,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return asCfCode().buildIR(encodedMethod, appInfo, graphLense, options, origin);
   }
 
@@ -192,6 +195,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return asCfCode()
         .buildInliningIR(
             encodedMethod,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 5f8fd6b..5397be4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -1170,6 +1170,7 @@
         GraphLense graphLense,
         InternalOptions options,
         Origin origin) {
+      assert getOwner() == encodedMethod;
       OutlineSourceCode source = new OutlineSourceCode(outline);
       return new IRBuilder(encodedMethod, appInfo, source, options).build();
     }
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
index aa6be96..df273a7 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
@@ -53,6 +53,7 @@
       GraphLense graphLense,
       InternalOptions options,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     return new IRBuilder(encodedMethod, appInfo, sourceCodeProvider.get(), options).build();
   }
 
@@ -65,6 +66,7 @@
       ValueNumberGenerator valueNumberGenerator,
       Position callerPosition,
       Origin origin) {
+    assert getOwner() == encodedMethod;
     IRBuilder builder =
         new IRBuilder(
             encodedMethod, appInfo, sourceCodeProvider.get(), options, valueNumberGenerator);
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 64387ce..27d3d3b 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1827,7 +1827,9 @@
       this.noSideEffects = previous.noSideEffects;
       assert lense.assertNotModified(previous.assumedValues.keySet());
       this.assumedValues = previous.assumedValues;
-      assert lense.assertNotModified(previous.alwaysInline);
+      assert lense.assertNotModified(
+          previous.alwaysInline.stream().map(this::definitionFor).filter(Objects::nonNull)
+              .collect(Collectors.toList()));
       this.alwaysInline = previous.alwaysInline;
       this.forceInline = rewriteMethodsWithRenamedSignature(previous.forceInline, lense);
       this.neverInline = rewriteMethodsWithRenamedSignature(previous.neverInline, lense);
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index a2dd383..8dec498 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -61,10 +61,12 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.tree.MethodNode;
 
@@ -542,7 +544,13 @@
     timing.begin("fixup");
     GraphLense result = new TreeFixer().fixupTypeReferences(mergingGraphLense);
     timing.end();
-    assert result.assertNotModified(appInfo.alwaysInline);
+    assert result.assertNotModified(
+        appInfo
+            .alwaysInline
+            .stream()
+            .map(appInfo::definitionFor)
+            .filter(Objects::nonNull)
+            .collect(Collectors.toList()));
     assert result.assertNotModified(appInfo.noSideEffects.keySet());
     // TODO(christofferqa): Enable this assert.
     // assert result.assertNotModified(appInfo.pinnedItems);
diff --git a/third_party/gmail/gmail_android_170604.16.tar.gz.sha1 b/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
index 9d9985c..f57ba90 100644
--- a/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
+++ b/third_party/gmail/gmail_android_170604.16.tar.gz.sha1
@@ -1 +1 @@
-a6d49ef4fb2094672a6f6be039c971727cc9fd34
\ No newline at end of file
+161c569821a5c9b4cb8e99de764f3449191af084
\ No newline at end of file
diff --git a/third_party/gmscore/gmscore_v10.tar.gz.sha1 b/third_party/gmscore/gmscore_v10.tar.gz.sha1
index 535f285..15cab81 100644
--- a/third_party/gmscore/gmscore_v10.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v10.tar.gz.sha1
@@ -1 +1 @@
-fd2bc157ba2d61a19804107df47e0f87926b210d
\ No newline at end of file
+43838ee1687ff48e866396dfd4b99415662fbea6
\ No newline at end of file
diff --git a/third_party/gmscore/gmscore_v9.tar.gz.sha1 b/third_party/gmscore/gmscore_v9.tar.gz.sha1
index 0ff5779..5983b5b 100644
--- a/third_party/gmscore/gmscore_v9.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v9.tar.gz.sha1
@@ -1 +1 @@
-4bfdee0d2287b061164f984dfa4ad6ec8617effa
\ No newline at end of file
+0066065faeb293c5a850d3319f2cb8a48d1e760d
\ No newline at end of file
diff --git a/third_party/youtube/youtube.android_12.22.tar.gz.sha1 b/third_party/youtube/youtube.android_12.22.tar.gz.sha1
index 056ff59..8f6813c 100644
--- a/third_party/youtube/youtube.android_12.22.tar.gz.sha1
+++ b/third_party/youtube/youtube.android_12.22.tar.gz.sha1
@@ -1 +1 @@
-57b5c53a80ba010d1faef7da1b643f8c72b3e4e8
\ No newline at end of file
+73c4880898d734064815d0426d8fe84ee6d075b4
\ No newline at end of file
