Cannot use '&' operator in Gnu AS expression-Collection of common programming errors

I would like to get the address of a variable and’ed by 4096 (which would correspond to the address of its memory page). Since this is something that can be computed offline I did something that looks like this (v is the variable and vpage should contain the address of its page):

    .data
    v:        .zero 0x100
    vpage:  .long v & 0xfffff000

Trying to compile this file with the x86 assembler results in the following error:

test.S: Assembler messages:
test.S:3: Error: invalid sections for operation on `v' and `L0'

Why would GAS refuse to compute this? Now the weird part: replace ‘&’ by “+” and the code will compile and the address will even be correctly computed after link. Any hint on the why of this behavior or how to fix it would be very welcome.