When using g++, one can get label conflicts in assembler code by using specific names for globals that match up against functions. e.g.:
void a () {} int _Z1av; since the 'a' function is mapped to the label "_Z1av". (compile with -S and look at the .s file.) This occurs even when the global variable isn't declared within an extern "C" {} block. Should non-'extern "C" {}' global variable names also be decorated?