I need to call a function at address 0xDD2: ```c // foo.h void foo(void) __at(0xDD2); // foo.c #include "foo.h" void foo(void) { // some code } ``` This code works: ```c #include "foo.h" void main(void) { void (*a)(void) = &foo; a(); } ``` However, this one doesn't: ```c #include "foo.h" void main(void) { void (*a)(void) = (void (*)(void))(0x0DD2); a(); } ``` The compiler (XC8) says: `main.c:5:: warning: (759) expression generates no code` and debugger passes these lines while debugging. I need second one (call function just by its address). Why compiler optimizes it out? Is there any mistake in pointer assignment? Changing optimization level of compiler didn't help.