diff a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symtab.java
@@ -224,12 +224,10 @@
     public final Type restrictedInternalType;
     public final Type typeDescriptorType;
     public final Type recordType;
     public final Type switchBootstrapsType;
     public final Type constantBootstrapsType;
-    public final Type valueBasedType;
-    public final Type valueBasedInternalType;
     public final Type classDescType;
     public final Type enumDescType;
     public final Type ioType;
 
     // For serialization lint checking
@@ -241,10 +239,20 @@
     // For externalization lint checking
     public final Type externalizableType;
     public final Type objectInputType;
     public final Type objectOutputType;
 
+    // valhalla
+    public final Type valueBasedType;
+    public final Type valueBasedInternalType;
+    public final Type migratedValueClassType;
+    public final Type migratedValueClassInternalType;
+    public final Type strictType;
+    /** The symbol representing the finalize method on Object */
+    public final MethodSymbol objectFinalize;
+    public final Type numberType;
+
     /** The symbol representing the length field of an array.
      */
     public final VarSymbol lengthVar;
 
     /** The symbol representing the final finalize method on enums */
@@ -533,19 +541,24 @@
         // Get the initial completer for ModuleSymbols from Modules
         moduleCompleter = Modules.instance(context).getCompleter();
 
         // Enter predefined classes. All are assumed to be in the java.base module.
         objectType = enterClass("java.lang.Object");
+        throwableType = enterClass("java.lang.Throwable");
+        objectFinalize = new MethodSymbol(PROTECTED,
+                names.finalize,
+                new MethodType(List.nil(), voidType,
+                        List.of(throwableType), methodClass),
+                objectType.tsym);
         objectMethodsType = enterClass("java.lang.runtime.ObjectMethods");
         exactConversionsSupportType = enterClass("java.lang.runtime.ExactConversionsSupport");
         objectsType = enterClass("java.util.Objects");
         classType = enterClass("java.lang.Class");
         stringType = enterClass("java.lang.String");
         stringBufferType = enterClass("java.lang.StringBuffer");
         stringBuilderType = enterClass("java.lang.StringBuilder");
         cloneableType = enterClass("java.lang.Cloneable");
-        throwableType = enterClass("java.lang.Throwable");
         serializableType = enterClass("java.io.Serializable");
         serializedLambdaType = enterClass("java.lang.invoke.SerializedLambda");
         varHandleType = enterClass("java.lang.invoke.VarHandle");
         methodHandleType = enterClass("java.lang.invoke.MethodHandle");
         methodHandlesType = enterClass("java.lang.invoke.MethodHandles");
@@ -609,10 +622,13 @@
         recordType = enterClass("java.lang.Record");
         switchBootstrapsType = enterClass("java.lang.runtime.SwitchBootstraps");
         constantBootstrapsType = enterClass("java.lang.invoke.ConstantBootstraps");
         valueBasedType = enterClass("jdk.internal.ValueBased");
         valueBasedInternalType = enterSyntheticAnnotation("jdk.internal.ValueBased+Annotation");
+        strictType = enterSyntheticAnnotation("jdk.internal.vm.annotation.Strict");
+        migratedValueClassType = enterClass("jdk.internal.MigratedValueClass");
+        migratedValueClassInternalType = enterSyntheticAnnotation("jdk.internal.MigratedValueClass+Annotation");
         classDescType = enterClass("java.lang.constant.ClassDesc");
         enumDescType = enterClass("java.lang.Enum$EnumDesc");
         ioType = enterClass("java.io.IO");
         // For serialization lint checking
         objectStreamFieldType = enterClass("java.io.ObjectStreamField");
@@ -631,10 +647,12 @@
         synthesizeEmptyInterfaceIfMissing(stringConcatFactory);
         synthesizeBoxTypeIfMissing(doubleType);
         synthesizeBoxTypeIfMissing(floatType);
         synthesizeBoxTypeIfMissing(voidType);
 
+        numberType = enterClass("java.lang.Number");
+
         // Enter a synthetic class that is used to mark internal
         // proprietary classes in ct.sym.  This class does not have a
         // class file.
         proprietaryType = enterSyntheticAnnotation("sun.Proprietary+Annotation");
 
