diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
index cfd03f4094ea0d5aa04ca51bd8c949ac2d2bb0d0..6837ec9a35d7193ad1bb68ade5755c93c88eee71 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/REngine.java
@@ -120,7 +120,7 @@ final class REngine implements Engine, Engine.Timings {
     /**
      * The accumulated time spent by child processes on behalf of this engine.
      */
-    @CompilationFinal private long[] childTimes;
+    private long[] childTimes;
     /**
      * The {@link RContext} that this engine is associated with (1-1).
      */
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RInteropScalarMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RInteropScalarMR.java
index d904aa2171893fb5433e80805af01b2c8eff4291..0ae18bbe9de7a97cf20fc6b8b4e97198d3c8b119 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RInteropScalarMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RInteropScalarMR.java
@@ -22,7 +22,6 @@
  */
 package com.oracle.truffle.r.engine.interop;
 
-import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.interop.CanResolve;
 import com.oracle.truffle.api.interop.MessageResolution;
 import com.oracle.truffle.api.interop.Resolve;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
index fab198672dd600476fc59d33672bfe909ac5b20b..42325e9757f5c0822e37f34d38c0c357e9efbdaa 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
@@ -32,7 +32,6 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.object.DynamicObject;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.nodes.attributes.GetAttributeNode;
@@ -49,7 +48,6 @@ import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RAttributable;
 import com.oracle.truffle.r.runtime.data.RAttributesLayout;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
-import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java
index fd08cfc07a0c32c57c71217f1f8b1622b053167b..dc67759ab247512bf3874f8bb7d12c843877287b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java
@@ -11,14 +11,11 @@
 
 package com.oracle.truffle.r.nodes.builtin.base;
 
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.anyValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asIntegerVector;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.asStringVector;
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.chain;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.integerValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue;
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.shouldBe;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.typeName;
 import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE;
@@ -38,7 +35,6 @@ import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
-import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
 import com.oracle.truffle.r.runtime.ops.na.NACheck;
 
 public class BitwiseFunctions {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
index 0756c474f93e034c77905a1b5d3ce1de18cf3a39..e34c53f9cc48f0c2ea0a0498e84044607bd694ce 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LaFunctions.java
@@ -260,7 +260,7 @@ public class LaFunctions {
     @RBuiltin(name = "La_qr", kind = INTERNAL, parameterNames = {"in"}, behavior = PURE)
     public abstract static class Qr extends RBuiltinNode.Arg1 {
 
-        @CompilationFinal private static final String[] NAMES = new String[]{"qr", "rank", "qraux", "pivot"};
+        @CompilationFinal(dimensions = 1) private static final String[] NAMES = new String[]{"qr", "rank", "qraux", "pivot"};
 
         static {
             Casts casts = new Casts(Qr.class);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SeqFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SeqFunctions.java
index bc951e221bd5010a19ddf800a1ce22ed3663291c..b5303c48c00d30ff72135915d7318e26659be3ff 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SeqFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SeqFunctions.java
@@ -60,7 +60,6 @@ import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RIntSequence;
 import com.oracle.truffle.r.runtime.data.RIntVector;
 import com.oracle.truffle.r.runtime.data.RMissing;
-import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RSequence;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.RTypes;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
index 62eb8e262084a42cbc86ff7471bc9eafb87fdd00..ac25b54d6af35464384e56095b67c3eadead91ee 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
@@ -32,7 +32,6 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
-import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.profiles.LoopConditionProfile;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
index 50fce23643fd2166344fa2b9128ea88834da9480..aca907a1efa5861e376db0f6cae68b19d0a37882 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
@@ -32,7 +32,6 @@ import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.r.nodes.attributes.RemoveAttributeNode;
 import com.oracle.truffle.r.nodes.attributes.SetAttributeNode;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastrDqrls.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastrDqrls.java
index 043cfb754430f72f058c3e9b69e9990ea807fee0..47f7e66ea42b3325d297d573edf5171ddbeff747 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastrDqrls.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastrDqrls.java
@@ -11,8 +11,6 @@
  */
 package com.oracle.truffle.r.nodes.builtin.fastr;
 
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.missingValue;
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue;
 import static com.oracle.truffle.r.runtime.RVisibility.OFF;
 import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE;
 import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
index 0cf2cec1a7b4ff575a71ba46cabadb79aff66f8e..f0cccef4459b5b57ae5934c4c1d3fc8ad4951629 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
@@ -23,7 +23,6 @@
 package com.oracle.truffle.r.nodes.access.vector;
 
 import com.oracle.truffle.api.CompilerAsserts;
-import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.ImportStatic;
@@ -32,7 +31,6 @@ import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.InteropException;
 import com.oracle.truffle.api.interop.KeyInfo;
-import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.UnknownIdentifierException;
 import com.oracle.truffle.api.interop.UnsupportedMessageException;
@@ -143,8 +141,7 @@ public abstract class ExtractVectorNode extends Node {
             if (ForeignAccess.sendIsNull(isNullNode, (TruffleObject) obj)) {
                 return RNull.instance;
             }
-            Boolean isBoxed = (Boolean) ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) obj);
-            if (isBoxed) {
+            if (ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) obj)) {
                 return RRuntime.java2R(ForeignAccess.sendUnbox(unboxNode, (TruffleObject) obj));
             }
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
index 3400150763e1a8d057b8f1d9b6ccda5526c2028c..dcaab1397e5254f321c47f018e8ef863c3b4a3dc 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java
@@ -166,7 +166,7 @@ public abstract class ClassHierarchyNode extends UnaryNode {
     }
 
     @Specialization
-    protected RStringVector getClassHr(@SuppressWarnings("unused") RInteropScalar arg) {
+    protected RStringVector getClassHr(RInteropScalar arg) {
         return withImplicitTypes ? ImplicitClassHierarchyNode.getImplicitClass(arg.getRType(), forDispatch) : null;
     }
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
index 79d3635e48cbea9dd3adc96bb69d3959cf3a7bcc..4cd7f7ffc2041169795b2b0774b60aae2eb094b3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
@@ -28,7 +28,6 @@ import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.r.nodes.helpers.InheritsCheckNode;
 import com.oracle.truffle.r.runtime.RRuntime;
-import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
 import com.oracle.truffle.r.runtime.data.RComplexVector;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RList;
diff --git a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jni/JNI_PkgInit.java b/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jni/JNI_PkgInit.java
index 0cf12986f0869a1a7d5bf39ec1c75cc62332af46..2bd8a296eeb095541668b31897819c0036e5dc28 100644
--- a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jni/JNI_PkgInit.java
+++ b/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jni/JNI_PkgInit.java
@@ -44,13 +44,11 @@ final class JNI_PkgInit {
         dllInfo.setNativeSymbols(nstOrd, array);
     }
 
-    @SuppressWarnings("unused")
     private static void registerCCallable(String pkgName, String functionName, long address) {
         DLLInfo lib = safeFindLibrary(pkgName);
         lib.registerCEntry(new CEntry(functionName, new SymbolHandle(address)));
     }
 
-    @SuppressWarnings("unused")
     public static long getCCallable(String pkgName, String functionName) {
         DLLInfo lib = safeFindLibrary(pkgName);
         CEntry result = lib.lookupCEntry(functionName);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Arguments.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Arguments.java
index e599ec89e528ac32c9dd43c0ecf40fde33771ea8..2936e7123714dd4570fb5065eb173590b7cc95d5 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Arguments.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/Arguments.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, 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
@@ -49,7 +49,7 @@ public class Arguments<T> {
     /**
      * Array of arguments; semantics have to be specified by child classes.
      */
-    @CompilationFinal private final T[] values;
+    @CompilationFinal(dimensions = 1) private final T[] values;
 
     /**
      * Array of arguments; semantics have to be specified by child classes.
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
index d5b2a0fd389ec17fdc974497bfbca268f42cf772..ca2ec69bbd8f5615607da8898b48296b20b6997d 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
@@ -46,7 +46,7 @@ public final class ArgumentsSignature implements Iterable<String> {
     public static final String VARARG_NAME = "...";
     public static final int NO_VARARG = -1;
 
-    @CompilationFinal private static final ArgumentsSignature[] EMPTY_SIGNATURES = new ArgumentsSignature[32];
+    @CompilationFinal(dimensions = 1) private static final ArgumentsSignature[] EMPTY_SIGNATURES = new ArgumentsSignature[32];
     public static final ArgumentsSignature INVALID_SIGNATURE = new ArgumentsSignature(new String[]{"<<invalid>>"});
 
     static {
@@ -73,9 +73,9 @@ public final class ArgumentsSignature implements Iterable<String> {
         return get(new String[length]);
     }
 
-    @CompilationFinal private final String[] names;
-    @CompilationFinal private final int[] varArgIndexes;
-    @CompilationFinal private final boolean[] isVarArg;
+    @CompilationFinal(dimensions = 1) private final String[] names;
+    @CompilationFinal(dimensions = 1) private final int[] varArgIndexes;
+    @CompilationFinal(dimensions = 1) private final boolean[] isVarArg;
     private final int varArgIndex;
     private final int nonNullCount;
 
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
index 4b34f2b46d44749447c232785181bc6f170c3b1e..d5a95388201ad5c3bc91b398e87617eee8c36532 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
@@ -60,7 +60,7 @@ public final class RError extends RuntimeException {
         private static final long serialVersionUID = 1L;
 
         private final RError.Message msg;
-        @CompilationFinal private final Object[] args;
+        @CompilationFinal(dimensions = 1) private final Object[] args;
 
         @TruffleBoundary
         protected RErrorException(RError.Message msg, Object[] args) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java
index d80fe43d1b3578985e0c98a8257f844cbd4db456..28425664c60a0e00e51f826fd6d7fed07ac1ec27 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java
@@ -192,7 +192,7 @@ public class RRuntime {
     public static final RSymbol PSEUDO_NULL = new RSymbol("\u0001NULL\u0001");
     public static final String UNBOUND = "UNBOUND";
 
-    @CompilationFinal private static final String[] numberStringCache = new String[4096];
+    @CompilationFinal(dimensions = 1) private static final String[] numberStringCache = new String[4096];
     private static final int MIN_CACHED_NUMBER = -numberStringCache.length / 2;
     private static final int MAX_CACHED_NUMBER = numberStringCache.length / 2 - 1;
 
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/builtins/RBuiltinDescriptor.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/builtins/RBuiltinDescriptor.java
index 5ca12b5a0433fecc93d33bcee65e9fd0de6094b8..925e003fe787f28ce2f02cdcdd555db486ceb6ad 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/builtins/RBuiltinDescriptor.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/builtins/RBuiltinDescriptor.java
@@ -49,7 +49,7 @@ public abstract class RBuiltinDescriptor {
     private final RSpecialFactory specialCall;
 
     private final int primitiveMethodIndex;
-    @CompilationFinal private final boolean[] evaluatesArgument;
+    @CompilationFinal(dimensions = 1) private final boolean[] evaluatesArgument;
 
     public RBuiltinDescriptor(String name, Class<?> builtinNodeClass, RVisibility visibility, String[] aliases, RBuiltinKind kind, ArgumentsSignature signature, int[] nonEvalArgs, boolean splitCaller,
                     boolean alwaysSplit, RDispatch dispatch, String genericName, RBehavior behavior, RSpecialFactory specialCall) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/GammaFunctions.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/GammaFunctions.java
index 8979aeef7d4f1bc349c82ddfd74733af7223f8c3..91284883c1941661610f19325708ae8ed9bde9c6 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/GammaFunctions.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/GammaFunctions.java
@@ -62,7 +62,8 @@ public abstract class GammaFunctions {
     // lgammacor
     //
 
-    @CompilationFinal private static final double[] ALGMCS = new double[]{+.1666389480451863247205729650822e+0, -.1384948176067563840732986059135e-4, +.9810825646924729426157171547487e-8,
+    @CompilationFinal(dimensions = 1) private static final double[] ALGMCS = new double[]{+.1666389480451863247205729650822e+0, -.1384948176067563840732986059135e-4,
+                    +.9810825646924729426157171547487e-8,
                     -.1809129475572494194263306266719e-10, +.6221098041892605227126015543416e-13, -.3399615005417721944303330599666e-15, +.2683181998482698748957538846666e-17,
                     -.2868042435334643284144622399999e-19, +.3962837061046434803679306666666e-21, -.6831888753985766870111999999999e-23, +.1429227355942498147573333333333e-24,
                     -.3547598158101070547199999999999e-26, +.1025680058010470912000000000000e-27, -.3401102254316748799999999999999e-29, +.1276642195630062933333333333333e-30};
@@ -102,7 +103,8 @@ public abstract class GammaFunctions {
     // gammafn
     //
 
-    @CompilationFinal private static final double[] GAMCS = new double[]{+.8571195590989331421920062399942e-2, +.4415381324841006757191315771652e-2, +.5685043681599363378632664588789e-1,
+    @CompilationFinal(dimensions = 1) private static final double[] GAMCS = new double[]{+.8571195590989331421920062399942e-2, +.4415381324841006757191315771652e-2,
+                    +.5685043681599363378632664588789e-1,
                     -.4219835396418560501012500186624e-2, +.1326808181212460220584006796352e-2, -.1893024529798880432523947023886e-3, +.3606925327441245256578082217225e-4,
                     -.6056761904460864218485548290365e-5, +.1055829546302283344731823509093e-5, -.1811967365542384048291855891166e-6, +.3117724964715322277790254593169e-7,
                     -.5354219639019687140874081024347e-8, +.9193275519859588946887786825940e-9, -.1577941280288339761767423273953e-9, +.2707980622934954543266540433089e-10,
@@ -693,7 +695,8 @@ public abstract class GammaFunctions {
 
     /* coeffs[i] holds (zeta(i+2)-1)/(i+2) , i = 0:(N-1), N = 40 : */
     private static final int N = 40;
-    @CompilationFinal private static final double[] coeffs = new double[]{0.3224670334241132182362075833230126e-0, 0.6735230105319809513324605383715000e-1, 0.2058080842778454787900092413529198e-1,
+    @CompilationFinal(dimensions = 1) private static final double[] coeffs = new double[]{0.3224670334241132182362075833230126e-0, 0.6735230105319809513324605383715000e-1,
+                    0.2058080842778454787900092413529198e-1,
                     0.7385551028673985266273097291406834e-2, 0.2890510330741523285752988298486755e-2, 0.1192753911703260977113935692828109e-2, 0.5096695247430424223356548135815582e-3,
                     0.2231547584535793797614188036013401e-3, 0.9945751278180853371459589003190170e-4, 0.4492623673813314170020750240635786e-4, 0.2050721277567069155316650397830591e-4,
                     0.9439488275268395903987425104415055e-5, 0.4374866789907487804181793223952411e-5, 0.2039215753801366236781900709670839e-5, 0.9551412130407419832857179772951265e-6,
@@ -987,14 +990,17 @@ public abstract class GammaFunctions {
         }
     }
 
-    @CompilationFinal private static final double[] coefs_a = new double[]{-1e99, /*
-                                                                                   * placeholder
-                                                                                   * used for
-                                                                                   * 1-indexing
-                                                                                   */
+    @CompilationFinal(dimensions = 1) private static final double[] coefs_a = new double[]{-1e99, /*
+                                                                                                   * placeholder
+                                                                                                   * used
+                                                                                                   * for
+                                                                                                   * 1
+                                                                                                   * -
+                                                                                                   * indexing
+                                                                                                   */
                     2 / 3., -4 / 135., 8 / 2835., 16 / 8505., -8992 / 12629925., -334144 / 492567075., 698752 / 1477701225.};
 
-    @CompilationFinal private static final double[] coefs_b = new double[]{-1e99, /* placeholder */
+    @CompilationFinal(dimensions = 1) private static final double[] coefs_b = new double[]{-1e99, /* placeholder */
                     1 / 12., 1 / 288., -139 / 51840., -571 / 2488320., 163879 / 209018880., 5246819 / 75246796800., -534703531 / 902961561600.};
 
     /*
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/RMath.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/RMath.java
index 81b7431c9f99b82c0006d6af8d9c629416124903..22dadebc92a20f82539d9fb72d3a4dd438ae4672 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/RMath.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nmath/RMath.java
@@ -241,7 +241,7 @@ public final class RMath {
     /*
      * error for 0, 0.5, 1.0, 1.5, ..., 14.5, 15.0.
      */
-    @CompilationFinal private static final double[] sferr_halves = new double[]{
+    @CompilationFinal(dimensions = 1) private static final double[] sferr_halves = new double[]{
                     0.0, /* n=0 - wrong, place holder only */
                     0.1534264097200273452913848, /* 0.5 */
                     0.0810614667953272582196702, /* 1.0 */
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RBaseNode.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RBaseNode.java
index 6650047ef03bf63c405c19749b0c91b8680bbc91..daf76f959261c863f07ff7b965c87c8d9b4687e3 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RBaseNode.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/RBaseNode.java
@@ -81,8 +81,8 @@ import com.oracle.truffle.r.runtime.env.REnvironment;
  */
 public abstract class RBaseNode extends Node {
 
-    @CompilationFinal public static final RNode[] EMTPY_RNODE_ARRAY = new RNode[0];
-    @CompilationFinal protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
+    @CompilationFinal(dimensions = 1) public static final RNode[] EMTPY_RNODE_ARRAY = new RNode[0];
+    @CompilationFinal(dimensions = 1) protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
 
     /**
      * Since {@link RSyntaxNode}s are sometimes used (for convenience) in non-syntax contexts, this
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
index e3359b65efa0f40bcb1ab07bf55ccae4c7918308..094a55ae51703b3f4a25cb90fd857b078be8d3a4 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ops/BinaryArithmetic.java
@@ -22,7 +22,6 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.ExactMath;
 import com.oracle.truffle.api.nodes.ExplodeLoop;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.BranchProfile;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/rng/RRNG.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/rng/RRNG.java
index db3f531e93a4643264ef25d0b473c6eb5a429035..e2e074001a610d9986a58019244841194b560ed8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/rng/RRNG.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/rng/RRNG.java
@@ -60,7 +60,7 @@ public class RRNG {
         KNUTH_TAOCP2(),
         LECUYER_CMRG();
 
-        @CompilationFinal static final Kind[] VALUES = values();
+        @CompilationFinal(dimensions = 1) static final Kind[] VALUES = values();
 
         private final Supplier<RandomNumberGenerator> createFunction;
 
@@ -92,8 +92,7 @@ public class RRNG {
         INVERSION,
         KINDERMAN_RAMAGE;
 
-        @CompilationFinal static final NormKind[] VALUES = values();
-
+        @CompilationFinal(dimensions = 1) static final NormKind[] VALUES = values();
     }
 
     public static final int NO_KIND_CHANGE = -2; // internal value
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prod.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prod.java
index 4adffd95dc83fe4267e26fefa57a2bc8b46a27e7..7d0b9d0fddf7dfbc8d302c572ab70c8403083aa1 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prod.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_prod.java
@@ -64,7 +64,7 @@ public class TestBuiltin_prod extends TestBase {
 
     @Test
     public void testprod10() {
-        assertEval(Ignored.Unknown, "prod( );");
+        assertEval("prod( );");
     }
 
     @Test
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_split.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_split.java
index d551d2225e677fb93c52e60517b814c17b2d78ff..75d197910998b927b624bb978c5964475a5ab71a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_split.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_split.java
@@ -122,7 +122,7 @@ public class TestBuiltin_split extends TestBase {
 
     @Test
     public void testSplitWithNames() {
-        assertEval(Ignored.Unimplemented, "{ split(list(q=1, w=2L, e='x', r=T), as.factor(c('a', 'b', 'a')); }");
+        assertEval("{ split(list(q=1, w=2L, e='x', r=T), as.factor(c('a', 'b', 'a')); }");
         assertEval(Ignored.Unimplemented, "{ tmp <- c(1,2,3); names(tmp) <- c('x','y','z'); split(tmp, as.factor(c('a','b'))); }");
     }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
index 3d3616d3fbe7b3bf31d0b59c9b0867dd93c0a625..a298e3af601c7bf86a6088d86fa9236510b0457b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestMiscBuiltins.java
@@ -4,7 +4,7 @@
  * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * Copyright (c) 2012-2014, Purdue University
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates
  *
  * All rights reserved.
  */
@@ -214,7 +214,7 @@ public class TestMiscBuiltins extends TestBase {
         // non-symmetric real input, real output
         assertEval("{ r <- eigen(matrix(c(1,2,2,3), nrow=2), only.values=FALSE); round( r$vectors, digits=5 ) }");
         assertEval("{ r <- eigen(matrix(c(1,2,2,3), nrow=2), only.values=FALSE); round( r$values, digits=5 ) }");
-        assertEval(Ignored.Unknown, "{ r <- eigen(matrix(c(1,2,3,4), nrow=2), only.values=FALSE); round( r$vectors, digits=5 ) }");
+        assertEval("{ r <- eigen(matrix(c(1,2,3,4), nrow=2), only.values=FALSE); round( r$vectors, digits=5 ) }");
         assertEval("{ r <- eigen(matrix(c(1,2,3,4), nrow=2), only.values=FALSE); round( r$values, digits=5 ) }");
 
         // non-symmetric real input, complex output
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestSplineFunctions.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestSplineFunctions.java
index defaaa8812de51da17c89a5eda3e7778328c7f41..939e47095ac1c1c326519f7978d8d10bb1a24e2c 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestSplineFunctions.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestSplineFunctions.java
@@ -51,10 +51,10 @@ public class TestSplineFunctions extends TestBase {
         assertEval(".Call(stats:::C_SplineCoef, c(), c(1:5), c(1:5))");
         assertEval(".Call(stats:::C_SplineCoef, list(), c(1:5), c(1:5))");
         assertEval(".Call(stats:::C_SplineCoef, c(list()), c(1:5), c(1:5))");
-        assertEval(Ignored.WrongCaller, ".Call(stats:::C_SplineCoef, 'abc', c(1:5), c(1:5))");
+        assertEval(".Call(stats:::C_SplineCoef, 'abc', c(1:5), c(1:5))");
         assertEval(".Call(stats:::C_SplineCoef, c(1), c(1:5), c(1:5))");
         assertEval(".Call(stats:::C_SplineCoef, c(1, 2, 3), c(1), c(1))");
-        assertEval(Ignored.WrongCaller, ".Call(stats:::C_SplineCoef, c('a'), c(1), c(1))");
+        assertEval(".Call(stats:::C_SplineCoef, c('a'), c(1), c(1))");
         assertEval(Ignored.WrongCaller, ".Call(stats:::C_SplineCoef, list(1), c(1), c(1))");
         assertEval(Ignored.WrongCaller, ".Call(stats:::C_SplineCoef, environment(), c(1:5), c(1:5))");
         assertEval(Ignored.WrongCaller, ".Call(stats:::C_SplineCoef, function() {}, c(1:5), c(1:5))");