Even for those defs that can't be marked `@tailrec`, a `final` mark can let scalac compile *some* calls into loops.  See main difference in `foldRight` when `final` is added:

```diff
          invokevirtual #336                // Method foldRight:(Ljava/lang/Object;Lscala/Function2;)Ljava/lang/Object;
          invokeinterface #341,  3          // InterfaceMethod scala/Function2.apply:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
          aload_2       
-         invokevirtual #336                // Method foldRight:(Ljava/lang/Object;Lscala/Function2;)Ljava/lang/Object;
-         astore        4
-         aload         4
-         areturn       
+         astore_2      
+         astore_1      
+         astore_0      
+         goto          0
          new           #66                 // class scala/MatchError
```