aboutsummaryrefslogtreecommitdiff
path: root/tccasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'tccasm.c')
-rw-r--r--tccasm.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/tccasm.c b/tccasm.c
index 72121e4..3fd69f7 100644
--- a/tccasm.c
+++ b/tccasm.c
@@ -824,6 +824,16 @@ static int tcc_assemble_internal(TCCState *s1, int do_preprocess)
opcode = tok;
next();
if (tok == ':') {
+ /* handle "extern void vide(void); __asm__("vide: ret");" as
+ "__asm__("globl vide\nvide: ret");" */
+ Sym *sym = sym_find(opcode);
+ if (sym && (sym->type.t & VT_EXTERN) && nocode_wanted) {
+ sym = label_find(opcode);
+ if (!sym) {
+ sym = label_push(&s1->asm_labels, opcode, 0);
+ sym->type.t = VT_VOID;
+ }
+ }
/* new label */
asm_new_label(s1, opcode, 0);
next();