It looks like that when using runtime reflection, foo becomes the int value (3) because it extends AnyVal.
This behavior is expected or are we using the reflection API in a wrong way? I get the same result using SMirror:
scala> implicit val mirror = scala.reflect.runtime.currentMirror
mirror: reflect.runtime.universe.Mirror = JavaMirror with scala.t...
scala> import net.fwbrasil.smirror._
import net.fwbrasil.smirror._
scala> case class Foo(x: Int) extends AnyVal
defined class Foo
scala> case class Bar(foo: Foo)
defined class Bar
scala> val bar = Bar(Foo(3))
bar: Bar = Bar(Foo(3))
scala> println(bar.foo)
Foo(3)
scala> bar.reflect.vals
res3: List[net.fwbrasil.smirror.SInstanceVal[Bar]] = List(val foo: Foo (bound to Bar(Foo(3))))
scala> bar.reflect.vals.head.get
res4: Any = 3