More AtomicXFieldUpdater initializer tests with handlers.
Bug: b/453628974
Change-Id: Ia5adb3be3e352236566226e4f72365bbd230d6f3
diff --git a/src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/reference/AtomicFieldUpdaterCatchInitTest.java b/src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/AtomicFieldUpdaterCatchInitTest.java
similarity index 74%
rename from src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/reference/AtomicFieldUpdaterCatchInitTest.java
rename to src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/AtomicFieldUpdaterCatchInitTest.java
index 3b377ac..43878a2 100644
--- a/src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/reference/AtomicFieldUpdaterCatchInitTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/atomicfieldupdater/AtomicFieldUpdaterCatchInitTest.java
@@ -1,7 +1,7 @@
// Copyright (c) 2026, the R8 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.
-package com.android.tools.r8.optimize.atomicfieldupdater.reference;
+package com.android.tools.r8.optimize.atomicfieldupdater;
import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -10,8 +10,9 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
-import com.android.tools.r8.optimize.atomicfieldupdater.AtomicFieldUpdaterBase;
import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicLongFieldUpdater;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -42,6 +43,8 @@
isOptimizationOn(),
diagnostics ->
diagnostics.assertInfosMatch(
+ diagnosticMessage(containsString("Cannot instrument")),
+ diagnosticMessage(containsString("Cannot instrument")),
diagnosticMessage(containsString("Cannot instrument"))))
.inspect(
inspector -> {
@@ -51,20 +54,26 @@
assertThat(classInitializer, not(INVOKES_UNSAFE));
})
.run(parameters.getRuntime(), testClass)
- .assertSuccessWithOutputLines("Hello");
+ .assertSuccessWithOutputLines("Hello", "42", "42");
}
- // Corresponding to simple kotlin usage of `atomic("Hello")` via atomicfu.
+ // Corresponding to simple kotlin usage of `atomic(..)` via atomicfu.
public static class TestClass {
private volatile Object myString;
+ private volatile int myInt;
+ private volatile long myLong;
private static final AtomicReferenceFieldUpdater<TestClass, Object> myString$FU;
+ private static final AtomicIntegerFieldUpdater<TestClass> myInt$FU;
+ private static final AtomicLongFieldUpdater<TestClass> myLong$FU;
static {
try {
myString$FU =
AtomicReferenceFieldUpdater.newUpdater(TestClass.class, Object.class, "myString");
+ myInt$FU = AtomicIntegerFieldUpdater.newUpdater(TestClass.class, "myInt");
+ myLong$FU = AtomicLongFieldUpdater.newUpdater(TestClass.class, "myLong");
} catch (Exception e) {
// The try block never throws. This is here to test the rewriting with catch handlers.
throw new RuntimeException(e);
@@ -74,11 +83,15 @@
public TestClass() {
super();
myString = "Hello";
+ myInt = 42;
+ myLong = 42L;
}
public static void main(String[] args) {
TestClass instance = new TestClass();
System.out.println(myString$FU.get(instance));
+ System.out.println(myInt$FU.get(instance));
+ System.out.println(myLong$FU.get(instance));
}
}
}