diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
index 29a467c0bd4..69515e61457 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java
@@ -326,16 +326,6 @@ void checkAssignable(DiagnosticPosition pos, VarSymbol v, JCTree base, Env<AttrC
                 return;
             }
         }
-
-        if (!env.info.ctorPrologue &&
-                v.isStrict() &&
-                v.owner.kind == TYP &&
-                v.owner == env.enclClass.sym &&
-                (v.flags() & STATIC) == 0 &&
-                (base == null ||
-                        TreeInfo.isExplicitThisReference(types, (ClassType)env.enclClass.type, base))) {
-            log.error(pos, Errors.CantRefAfterCtorCalled(v));
-        }
     }
 
     /** Does tree represent a static reference to an identifier?
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java
index 24d6c9fa4d5..996ae3cbbdd 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java
@@ -3092,6 +3092,17 @@ public void visitApply(JCMethodInvocation tree) {
                 // If super(): at this point all initialization blocks will execute
 
                 if (name == names._super) {
+                    // strict fields should have been initialized at this point
+                    for (int i = firstadr; i < nextadr; i++) {
+                        JCVariableDecl vardecl = vardecls[i];
+                        VarSymbol var = vardecl.sym;
+                        boolean isInstanceRecordField = var.enclClass().isRecord() &&
+                                (var.flags_field & (Flags.PRIVATE | Flags.FINAL | Flags.GENERATED_MEMBER | Flags.RECORD)) != 0 &&
+                                var.owner.kind == TYP;
+                        if (var.owner == classDef.sym && !var.isStatic() && var.isStrict() && !isInstanceRecordField) {
+                            checkInit(TreeInfo.diagEndPos(tree), var, Errors.StrictFieldNotHaveBeenInitializedBeforeSuper(var));
+                        }
+                    }
                     forEachInitializer(classDef, false, def -> {
                         scan(def);
                         clearPendingExits(false);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
index 59cbabe2511..9697d6aa682 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
@@ -4256,13 +4256,13 @@ compiler.err.concrete.supertype.for.value.class=\
 compiler.err.super.class.method.cannot.be.synchronized=\
     The method {0} in the super class {2} of the value class {1} is synchronized. This is disallowed
 
-# 0: symbol or name
-compiler.err.cant.ref.after.ctor.called=\
-    cannot assign to {0} after supertype constructor has been called
-
 compiler.err.non.abstract.value.class.cant.be.sealed.or.non.sealed=\
     ''sealed'' or ''non-sealed'' modifiers are only applicable to abstract value classes
 
+# 0: symbol
+compiler.err.strict.field.not.have.been.initialized.before.super=\
+    strict field {0} is not initialized before the supertype constructor has been called
+
 # 0: symbol
 compiler.err.deconstruction.pattern.only.records=\
     deconstruction patterns can only be applied to records, {0} is not a record
diff --git a/test/langtools/tools/javac/diags/examples/FieldAssigmentAfterSuper.java b/test/langtools/tools/javac/diags/examples/FieldAssigmentAfterSuper.java
index 03d2f822886..f376ff6dc05 100644
--- a/test/langtools/tools/javac/diags/examples/FieldAssigmentAfterSuper.java
+++ b/test/langtools/tools/javac/diags/examples/FieldAssigmentAfterSuper.java
@@ -21,7 +21,7 @@
  * questions.
  */
 
-// key: compiler.err.cant.ref.after.ctor.called
+// key: compiler.err.strict.field.not.have.been.initialized.before.super
 // key: compiler.note.preview.filename
 // key: compiler.note.preview.recompile
 // options: --enable-preview -source ${jdk.version}
diff --git a/test/langtools/tools/javac/diags/examples/StrictFieldNotInitialized.java b/test/langtools/tools/javac/diags/examples/StrictFieldNotInitialized.java
new file mode 100644
index 00000000000..5633b85045c
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/StrictFieldNotInitialized.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.err.strict.field.not.have.been.initialized.before.super
+// key: compiler.note.preview.filename
+// key: compiler.note.preview.recompile
+// options: --enable-preview -source ${jdk.version}
+
+value class Point {
+    int x;
+    int y;
+    Point (int x, int y) {
+        this.x = x;
+        // y hasn't been initialized
+    }
+}
\ No newline at end of file
diff --git a/test/langtools/tools/javac/valhalla/value-objects/ValueObjectCompilationTests.java b/test/langtools/tools/javac/valhalla/value-objects/ValueObjectCompilationTests.java
index 02d5754d5a6..0fd0acf4cf3 100644
--- a/test/langtools/tools/javac/valhalla/value-objects/ValueObjectCompilationTests.java
+++ b/test/langtools/tools/javac/valhalla/value-objects/ValueObjectCompilationTests.java
@@ -331,7 +331,7 @@ void foo(Point p) {
                     """
             ),
             new TestData(
-                    "compiler.err.var.might.not.have.been.initialized",
+                    "compiler.err.strict.field.not.have.been.initialized.before.super",
                     """
                     value class Point {
                         int x;
@@ -891,7 +891,7 @@ void m() {}
                 }
                 """
         );
-        assertFail("compiler.err.cant.ref.after.ctor.called",
+        assertFail("compiler.err.strict.field.not.have.been.initialized.before.super",
                 """
                 value class Test {
                     int i;
@@ -924,7 +924,7 @@ value class Test {
                 }
                 """
         );
-        assertFail("compiler.err.cant.ref.after.ctor.called",
+        assertFail("compiler.err.strict.field.not.have.been.initialized.before.super",
                 """
                 value class Test {
                     int f;
@@ -1095,7 +1095,7 @@ value class SValue {
                     }
                     """
             );
-            assertFail("compiler.err.var.not.initialized.in.default.constructor",
+            assertFail("compiler.err.strict.field.not.have.been.initialized.before.super",
                     """
                     import jdk.internal.vm.annotation.Strict;
                     class Test {
@@ -1103,7 +1103,7 @@ class Test {
                     }
                     """
             );
-            assertFail("compiler.err.cant.ref.after.ctor.called",
+            assertFail("compiler.err.strict.field.not.have.been.initialized.before.super",
                     """
                     import jdk.internal.vm.annotation.Strict;
                     class Test {