[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