c++ - 'goto *foo' where foo is not a pointer. What is this? -
i playing around labels values , ended code.
int foo = 0; goto *foo; my c/c++ experience tells me *foo means dereference foo , won't compile because foo isn't pointer. compile. do?
gcc (ubuntu 4.9.2-0ubuntu1~12.04) 4.9.2, if important.
this known bug in gcc.
gcc has documented extension permits statement of form
goto *ptr; where ptr can expression of type void*. part of extension, applying unary && label name yields address of label, of type void*.
in example:
int foo = 0; goto *foo; foo of type int, not of type void*. int value can converted void*, explicit cast (except in special case of null pointer constant, not apply here).
the expression *foo correctly diagnosed error. , this:
goto *42; compiles without error (the generated machine code appears jump address 42, if i'm reading assembly code correctly).
a quick experiment indicates gcc generates same assembly code for
goto *42; as for
goto *(void*)42; the latter correct use of documented extension, , it's should if, reason, want jump address 42.
i've submitted bug report -- closed duplicate of this bug report, submitted in 2007.
Comments
Post a Comment