Merge "Support --pg-conf in Disassemble for class-file input"
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 24b2cc9..0ba40b3 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.2.19-dev";
+  public static final String LABEL = "1.2.20-dev";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
index 6599591..90b863c 100644
--- a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
+++ b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
@@ -77,7 +77,11 @@
 
     for (int i = 0; i < flags.size(); i++) {
       String flag = flags.get(i);
-      if (flag.startsWith("--positions")) {
+      if (flag.startsWith("--positions=")) {
+        String positionsValue = flag.substring("--positions=".length());
+        if (positionsValue.startsWith("throwing") || positionsValue.startsWith("important")) {
+          noLocals = true;
+        }
         continue;
       }
       if (flag.startsWith("--num-threads=")) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexCallSite.java b/src/main/java/com/android/tools/r8/graph/DexCallSite.java
index e690317..11bca5a 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCallSite.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCallSite.java
@@ -118,10 +118,14 @@
   public void collectIndexedItems(IndexedItemCollection indexedItems,
       DexMethod method, int instructionOffset) {
     assert method != null;
+    // Since collectIndexedItems() is called in transactions that may be rolled back, we may end up
+    // setting this.method and this.instructionOffset more than once. If we do set them more than
+    // once, then we must have the same values for method and instructionOffset every time.
+    assert this.method == null || this.method == method;
+    assert this.instructionOffset == 0 || this.instructionOffset == instructionOffset;
+    this.method = method;
+    this.instructionOffset = instructionOffset;
     if (indexedItems.addCallSite(this)) {
-      assert this.method == null;
-      this.method = method;
-      this.instructionOffset = instructionOffset;
       methodName.collectIndexedItems(indexedItems, method, instructionOffset);
       methodProto.collectIndexedItems(indexedItems, method, instructionOffset);
       bootstrapMethod.collectIndexedItems(indexedItems, method, instructionOffset);
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 92c68aa..68796ac 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.DexIndexedConsumer;
 import com.android.tools.r8.ProgramConsumer;
 import com.android.tools.r8.StringConsumer;
+import com.android.tools.r8.Version;
 import com.android.tools.r8.dex.Marker;
 import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.InvalidDebugInfoException;
@@ -97,7 +98,8 @@
   public boolean enableClassMerging = false;
   public boolean enableDevirtualization = true;
   public boolean enableNonNullTracking = true;
-  public boolean enableInlining = true;
+  public boolean enableInlining =
+      !Version.isDev() || System.getProperty("com.android.tools.r8.disableinlining") == null;
   public boolean enableClassInlining = true;
   public int inliningInstructionLimit = 5;
   public boolean enableSwitchMapRemoval = true;
diff --git a/third_party/gmscore/gmscore_v10.tar.gz.sha1 b/third_party/gmscore/gmscore_v10.tar.gz.sha1
index 15cab81..535f285 100644
--- a/third_party/gmscore/gmscore_v10.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v10.tar.gz.sha1
@@ -1 +1 @@
-43838ee1687ff48e866396dfd4b99415662fbea6
\ No newline at end of file
+fd2bc157ba2d61a19804107df47e0f87926b210d
\ 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 5983b5b..0ff5779 100644
--- a/third_party/gmscore/gmscore_v9.tar.gz.sha1
+++ b/third_party/gmscore/gmscore_v9.tar.gz.sha1
@@ -1 +1 @@
-0066065faeb293c5a850d3319f2cb8a48d1e760d
\ No newline at end of file
+4bfdee0d2287b061164f984dfa4ad6ec8617effa
\ No newline at end of file
diff --git a/tools/upload_to_x20.py b/tools/upload_to_x20.py
index 08e48d9..1efacf5 100755
--- a/tools/upload_to_x20.py
+++ b/tools/upload_to_x20.py
@@ -39,7 +39,7 @@
   dest = os.path.join(GMSCORE_DEPS, sha1)
   print 'Uploading to %s' % dest
   shutil.copyfile(filename, dest)
-  os.chmod(dest, stat.S_IRWXU | stat.S_IROTH | stat.S_IXOTH | stat.S_IRWXG)
+  subprocess.check_call(['chmod', '664', dest])
   sha1_file = '%s.sha1' % filename
   with open(sha1_file, 'w') as output:
     output.write(sha1)