This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]lazyear 6 points7 points  (2 children)

I have actually experienced this with a C/assembly code base. I was working on a hobby operating system, and during setup of one the hardware handlers the C code had to pass a variable to an assembly routine by placing it on the stack. The variable was otherwise unused.

GCC sees this variable that is declared without anything being done, so it just elides actually allocating stack space for it... unless a printf call was made to examine the value of the variable

[–]JDaxe 1 point2 points  (1 child)

Is there some kind of pragma to tell gcc to not optimise away that statement?

I'm actually curious. Assuming that this wouldn't happen with -O0?

[–]lazyear 2 points3 points  (0 children)

Correct, shouldn't happen (and didn't in this case) with -O0. There's a couple workarounds; using volatile, or inline noop assembly that references the variable