# New Ticket Created by Nick Glencross # Please include the string: [perl #34984] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=34984 >
[I submitted this patch from a web mailer last night, but it seems to have disappeared into the ether. If the other copy ever appears, just ignore it!] This patch fixes a problem which can occur in this example: .sub test .const float a = 12 print a print_newline .end The symbol 'knows' that it is a float, and the value thinks that it is an int. I think that bogus bytecode might then be emitted, using the print_nc opcode, but with an int argument? For the moment we can generate an error, but in the longer term perhaps we can massage the value to the same type as the variable. Let me know, and I'll cook this up, Cheers, Nick
Index: imcc/symreg.c =================================================================== --- imcc/symreg.c (revision 7825) +++ imcc/symreg.c (working copy) @@ -314,6 +314,10 @@ { SymReg *r; + if (t != 'P' && t != val->set) + IMCC_fataly(interp, E_TypeError, + "const types do not match"); + if (global) { if (t == 'P') { IMCC_fataly(interp, E_SyntaxError,