From: SourceForge.net <no...@so...> - 2006-02-08 20:35:03
|
Bugs item #1427820, was opened at 2006-02-08 20:45 Message generated for change (Settings changed) made by bernhardheld You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1427820&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: pic14 target Group: None Status: Open Resolution: None Priority: 5 Submitted By: Borut Razem (borutr) Assigned to: Nobody/Anonymous (nobody) Summary: bad code with varargs Initial Comment: 1 - sample code: --------------------- void f2(int *p) { p; } void f1(int p, ...) { f2(&p); //wrong code for address of parameter } void main(void) { f1(1); //wrong code: parameter not passed } --------------------- 2 - command: $ sdcc -mpic14 -pp16f877 t.c 3 - sdcc version: $ sdcc -v SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.5.4 #1199 (Feb 7 2006) (MINGW32) 4 - The code compiles without errors, but the generated code is wrong: - in main() the parameter is not passed to f1(): _main ;Function start ; 2 exit points ; .line 14; "t2.c" f1(1); CALL _f1 RETURN ; exit point of _main - in f1() the code for address of parameter is wrong: _f1 ;Function start ; 2 exit points ; .line 8; "t2.c" f2(&p); //wrong code for address of parameter MOVLW ( + 0) <=== shold be (STK00 + 0) BANKSEL r0x2A MOVWF r0x2A ;;1 MOVWF r0x27 MOVLW high ( + 0) <=== shold be (STK00 + 0) ;; peep 2 - Removed redundant move ;;1 MOVWF r0x28 MOVWF r0x29 ;;99 MOVF r0x27,W ;;100 CLRF r0x2B MOVF r0x2A,W MOVWF STK01 MOVF r0x29,W MOVWF STK00 ;;101 MOVF r0x2B,W MOVLW 0x00 CALL _f2 RETURN ; exit point of _f1 Borut ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=1427820&group_id=599 |