When my_function_call is called, it is passed a copy of test. It is not passed test itself, so the alignment of test is irrelevant. The alignment attribute is a property of the test object, not of its value.
Arguments are passed in a platform-specified way. Usually, small arguments are passed in registers. On most machines, registers are special hardware that is not part of memory, so they do not have addresses and so do not have alignment.
If an argument is large, the platform specification might specify that it is passed in memory. Then it is the job of the calling function to place a copy of test into memory and pass its address to the called function, and for the called function to use that address to retrieve the copy. It is possible a compiler could give you some influence over the alignment of that temporary copy, but I do not know of any compiler that does so.
If, for some reason, you want the called function to be passed an aligned address, then, instead of passing the value of test, pass its address or the address of a copy (which also as the alignment attribute). Additionally, if you are passing an aligned address and want the called function to know it is aligned, then declare the parameter of the function to be a pointer to a type which has the alignment attribute. (The syntax for doing this depends on the compiler, as it is not a part of standard C. I suspect a means for doing so is to define a type using typedef, and including the alignment attribute in the typedef, then declaring the function parameter to be a pointer to that type.)
You should not be concerning yourself with the alignment of objects without good reason.