[OSy] Potiz s testy prvniho zakladniho zadani
Jan Smrčina
lj at fooboo.org
Tue Nov 26 11:26:05 CET 2013
Hezky den vsem,
po dokonceni prvniho zadani se nase skupinka rozhodla upravit a vylepsit
vetsinu kodu. Kod je nyni upraven a zda se, ze funguje. Posledni co
zbyva overit jsou testy z prvniho zakladniho zadani.
Problem nastava pri spusteni tests-as1.sh
Pri kompilaci testu mutex #5:
tests/as1/mutex5/test.c: In function 'run_test':
tests/as1/mutex5/test.c:70:2: error: format '%p' expects argument of
type 'void *', but argument 3 has type 'thread_t' [-Werror=format]
cc1: all warnings being treated as errors
Problém je zřejmý: V makru robust_thread_func
(tests/as1/include/defs.h:110) je pouzito funkce panic(), kde k
formatovacimu specifikatoru %p je prirazen argument typu thread_t.
Specifikátoru %p přísluší argument typu ukazatel, ale thread_t neni
ukazatel. (Ani podle me interpretace zadani (1. zadani, poznamky k
rozhranim, druha odrazka) byt nesmi.)
Abychom vyuzily typovy system ve svuj prospech, je nas thread_t
definovan nasledovne:
typedef struct {
uint32_t id;
} thread_t;
Tato definice vynucuje striktni typovou kontrolu, takze napriklad zamenu
proc_t a thread_t kompilator odhali, i kdyz se interne jedna o tentyz
uint32_t.
Nevyhodou teto definice je, ze pri striktnich kontrolach formatovacich
retezcu (ktere jsme kompilatoru pri upravach umoznili) je nutne predavat
primo clen .id.
Prime reseni - a predpokladam ze i pripustne - je upravit testy tak, aby
vypisy byly syntakticky korektni, bez semantickych zmen.
Ma otazka nakonec je: Existuje vhodnejsi reseni? Napriklad vyrobit
konverzni funkce?
S pozdravem,
Jan Smrcina
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 479 bytes
Desc: not available
URL: <http://d3s.mff.cuni.cz/pipermail/nswi004/attachments/20131126/64fead37/attachment.sig>
More information about the NSWI004
mailing list