Merge branch 'master' into master
This commit is contained in:
@@ -1390,7 +1390,12 @@ parameter with the <tt/#pragma/.
|
|||||||
the <tt/Y/ register if it wraps any variadic functions (they have "<tt/.../"
|
the <tt/Y/ register if it wraps any variadic functions (they have "<tt/.../"
|
||||||
in their prototypes).
|
in their prototypes).
|
||||||
|
|
||||||
The identifier is an 8-bit number that's set into <tt/tmp4/.
|
The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier
|
||||||
|
is "bank", then ca65's <tt><url url="ca65.html#.BANK" name=".bank"></tt> function will be used
|
||||||
|
to determine the number from the bank attribute defined in the linker config,
|
||||||
|
see <url url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that
|
||||||
|
this currently implies that only the least significant 8 bits of the bank attribute
|
||||||
|
can be used.
|
||||||
|
|
||||||
The address of a wrapped function is passed in <tt/ptr4/. The wrapper can
|
The address of a wrapped function is passed in <tt/ptr4/. The wrapper can
|
||||||
call that function by using "<tt/jsr callptr4/".
|
call that function by using "<tt/jsr callptr4/".
|
||||||
|
|||||||
@@ -5186,7 +5186,7 @@ the module just loaded. Possible error codes are:
|
|||||||
<item><tt/MLOAD_ERR_MEM/ - Not enough memory
|
<item><tt/MLOAD_ERR_MEM/ - Not enough memory
|
||||||
</itemize>
|
</itemize>
|
||||||
<tag/Notes/<itemize>
|
<tag/Notes/<itemize>
|
||||||
<item>The <htmlurl url="ld65.html" name="ld65"> linker is needed to create
|
<item>The <url url="ld65.html" name="ld65 linker"> is needed to create
|
||||||
relocatable o65 modules for use with this function.
|
relocatable o65 modules for use with this function.
|
||||||
<item>The function is available only as a fastcall function; so, it may be used
|
<item>The function is available only as a fastcall function; so, it may be used
|
||||||
only in the presence of a prototype.
|
only in the presence of a prototype.
|
||||||
|
|||||||
@@ -760,7 +760,7 @@ There's a library subroutine called <tt/copydata/ (in a module named
|
|||||||
look at it's inner workings before using it!
|
look at it's inner workings before using it!
|
||||||
|
|
||||||
|
|
||||||
<sect1>Other MEMORY area attributes<p>
|
<sect1>Other MEMORY area attributes<label id="MEMORY"><p>
|
||||||
|
|
||||||
There are some other attributes not covered above. Before starting the
|
There are some other attributes not covered above. Before starting the
|
||||||
reference section, I will discuss the remaining things here.
|
reference section, I will discuss the remaining things here.
|
||||||
@@ -822,7 +822,6 @@ that has a segment reference (for example a symbol). The result of this
|
|||||||
function is the value of the bank attribute for the run memory area of the
|
function is the value of the bank attribute for the run memory area of the
|
||||||
segment.
|
segment.
|
||||||
|
|
||||||
|
|
||||||
<sect1>Other SEGMENT attributes<p>
|
<sect1>Other SEGMENT attributes<p>
|
||||||
|
|
||||||
Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to
|
Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to
|
||||||
|
|||||||
@@ -15,6 +15,6 @@
|
|||||||
void __fastcall__ _afailed (char* file, unsigned line)
|
void __fastcall__ _afailed (char* file, unsigned line)
|
||||||
{
|
{
|
||||||
raise (SIGABRT);
|
raise (SIGABRT);
|
||||||
fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line);
|
fprintf (stderr, "ASSERTION FAILED IN %s:%u\n", file, line);
|
||||||
exit (EXIT_ASSERT);
|
exit (EXIT_ASSERT);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ __syschdir:
|
|||||||
|
|
||||||
; Get name
|
; Get name
|
||||||
jsr popax
|
jsr popax
|
||||||
|
|
||||||
stx tmp1
|
stx tmp1
|
||||||
ldy tmp1
|
ldy tmp1
|
||||||
|
|
||||||
|
|||||||
158
samples/Makefile
158
samples/Makefile
@@ -168,24 +168,7 @@ endif
|
|||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Lists of executables
|
# Lists of executables
|
||||||
|
|
||||||
EXELIST_c64 = \
|
|
||||||
helloworld \
|
|
||||||
ascii \
|
|
||||||
enumdevdir \
|
|
||||||
fire \
|
|
||||||
gunzip65 \
|
|
||||||
hello \
|
|
||||||
mandelbrot \
|
|
||||||
mousedemo \
|
|
||||||
multdemo \
|
|
||||||
nachtm \
|
|
||||||
ovrldemo \
|
|
||||||
plasma \
|
|
||||||
sieve \
|
|
||||||
tgidemo
|
|
||||||
|
|
||||||
EXELIST_apple2 = \
|
EXELIST_apple2 = \
|
||||||
helloworld \
|
|
||||||
ascii \
|
ascii \
|
||||||
diodemo \
|
diodemo \
|
||||||
enumdevdir \
|
enumdevdir \
|
||||||
@@ -201,7 +184,6 @@ EXELIST_apple2 = \
|
|||||||
EXELIST_apple2enh = $(EXELIST_apple2)
|
EXELIST_apple2enh = $(EXELIST_apple2)
|
||||||
|
|
||||||
EXELIST_atari = \
|
EXELIST_atari = \
|
||||||
helloworld \
|
|
||||||
ascii \
|
ascii \
|
||||||
gunzip65 \
|
gunzip65 \
|
||||||
hello \
|
hello \
|
||||||
@@ -216,16 +198,148 @@ EXELIST_atarixl = $(EXELIST_atari)
|
|||||||
|
|
||||||
EXELIST_atari2600 = \
|
EXELIST_atari2600 = \
|
||||||
atari2600hello
|
atari2600hello
|
||||||
|
|
||||||
|
EXELIST_atmos = \
|
||||||
|
ascii \
|
||||||
|
hello \
|
||||||
|
mandelbrot \
|
||||||
|
sieve
|
||||||
|
|
||||||
|
EXELIST_bbc = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_c64 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
fire \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
mandelbrot \
|
||||||
|
mousedemo \
|
||||||
|
multdemo \
|
||||||
|
nachtm \
|
||||||
|
ovrldemo \
|
||||||
|
plasma \
|
||||||
|
sieve \
|
||||||
|
tgidemo
|
||||||
|
|
||||||
|
EXELIST_c128 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
fire \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
mandelbrot \
|
||||||
|
mousedemo \
|
||||||
|
nachtm \
|
||||||
|
plasma \
|
||||||
|
sieve \
|
||||||
|
tgidemo
|
||||||
|
|
||||||
|
EXELIST_c16 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_cbm510 = \
|
||||||
|
ascii \
|
||||||
|
fire \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
mousedemo \
|
||||||
|
nachtm \
|
||||||
|
plasma \
|
||||||
|
sieve
|
||||||
|
|
||||||
|
EXELIST_cbm610 = \
|
||||||
|
ascii \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
nachtm \
|
||||||
|
sieve
|
||||||
|
|
||||||
|
EXELIST_creativision = \
|
||||||
|
ascii \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_cx16 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
mandelbrot \
|
||||||
|
mousedemo \
|
||||||
|
sieve \
|
||||||
|
tgidemo
|
||||||
|
|
||||||
|
EXELIST_gamate = \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_geos-cbm = \
|
||||||
|
helloworld \
|
||||||
|
ascii \
|
||||||
|
diodemo
|
||||||
|
|
||||||
|
EXELIST_geos-apple = \
|
||||||
|
helloworld \
|
||||||
|
ascii
|
||||||
|
|
||||||
|
EXELIST_lunix = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_lynx = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_nes = \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_osic1p = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_pce = \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_pet = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
hello \
|
||||||
|
sieve
|
||||||
|
|
||||||
|
EXELIST_plus4 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
gunzip65 \
|
||||||
|
hello \
|
||||||
|
plasma \
|
||||||
|
sieve
|
||||||
|
|
||||||
|
EXELIST_sim6502 = \
|
||||||
|
gunzip65
|
||||||
|
|
||||||
|
EXELIST_sim65c02 = $(EXELIST_sim6502)
|
||||||
|
|
||||||
EXELIST_supervision = \
|
EXELIST_supervision = \
|
||||||
supervisionhello
|
supervisionhello
|
||||||
|
|
||||||
EXELIST_sym1 = \
|
EXELIST_sym1 = \
|
||||||
helloworld \
|
helloworld \
|
||||||
symHello \
|
symHello \
|
||||||
symTiny \
|
symTiny \
|
||||||
symDisplay
|
symDisplay
|
||||||
|
|
||||||
|
EXELIST_telestrat = \
|
||||||
|
ascii \
|
||||||
|
gunzip65 \
|
||||||
|
hello
|
||||||
|
|
||||||
|
EXELIST_vic20 = \
|
||||||
|
ascii \
|
||||||
|
enumdevdir \
|
||||||
|
hello \
|
||||||
|
mandelbrot \
|
||||||
|
sieve \
|
||||||
|
tgidemo
|
||||||
|
|
||||||
# Unlisted targets will try to build everything.
|
# Unlisted targets will try to build everything.
|
||||||
# That lets us learn what they cannot build, and what settings
|
# That lets us learn what they cannot build, and what settings
|
||||||
# we need to use for programs that can be built and run.
|
# we need to use for programs that can be built and run.
|
||||||
@@ -246,6 +360,10 @@ endef # SUBDIR_recipe
|
|||||||
samples: $(EXELIST_$(SYS))
|
samples: $(EXELIST_$(SYS))
|
||||||
$(foreach dir,$(DIRLIST),$(SUBDIR_recipe))
|
$(foreach dir,$(DIRLIST),$(SUBDIR_recipe))
|
||||||
|
|
||||||
|
# empty target used to skip systems that will not work with any program in this dir
|
||||||
|
notavailable:
|
||||||
|
@echo "warning: generic samples not available for" $(SYS)
|
||||||
|
|
||||||
disk: $(DISK_$(SYS))
|
disk: $(DISK_$(SYS))
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|||||||
@@ -37,17 +37,42 @@ DIRLIST = grc
|
|||||||
|
|
||||||
define SUBDIR_recipe
|
define SUBDIR_recipe
|
||||||
|
|
||||||
@$(MAKE) -C $(dir) --no-print-directory $@
|
@$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@
|
||||||
|
|
||||||
endef # SUBDIR_recipe
|
endef # SUBDIR_recipe
|
||||||
|
|
||||||
|
EXELIST_geos-cbm = \
|
||||||
|
bitmap-demo.cvt \
|
||||||
|
filesel.cvt \
|
||||||
|
geosver.cvt \
|
||||||
|
getid.cvt \
|
||||||
|
hello1.cvt \
|
||||||
|
hello2.cvt \
|
||||||
|
overlay-demo.cvt \
|
||||||
|
vector-demo.cvt \
|
||||||
|
yesno.cvt
|
||||||
|
|
||||||
|
EXELIST_geos-apple = \
|
||||||
|
bitmap-demo.cvt \
|
||||||
|
filesel.cvt \
|
||||||
|
hello1.cvt \
|
||||||
|
hello2.cvt \
|
||||||
|
overlay-demo.cvt \
|
||||||
|
vector-demo.cvt \
|
||||||
|
yesno.cvt
|
||||||
|
|
||||||
# omitted: dialog.c grphstr.c inittab.c menu.c
|
# omitted: dialog.c grphstr.c inittab.c menu.c
|
||||||
|
|
||||||
# TODO: geosconio.cvt rmvprot.cvt
|
# TODO: geosconio.cvt rmvprot.cvt
|
||||||
samples: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \
|
|
||||||
overlay-demo.cvt vector-demo.cvt yesno.cvt
|
|
||||||
$(foreach dir,$(DIRLIST),$(SUBDIR_recipe))
|
|
||||||
|
|
||||||
|
ifneq ($(EXELIST_$(SYS)),)
|
||||||
|
samples: $(EXELIST_$(SYS))
|
||||||
|
$(foreach dir,$(DIRLIST),$(SUBDIR_recipe))
|
||||||
|
else
|
||||||
|
samples:
|
||||||
|
@echo "warning: geos samples not available for" $(SYS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
bitmap.c: logo.pcx
|
bitmap.c: logo.pcx
|
||||||
$(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap
|
$(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
|
|
||||||
|
# Run 'make SYS=<target>'; or, set a SYS env.
|
||||||
|
# var. to build for another target system.
|
||||||
|
SYS ?= geos-cbm
|
||||||
|
|
||||||
# Just the usual way to find out if we're
|
# Just the usual way to find out if we're
|
||||||
# using cmd.exe to execute make rules.
|
# using cmd.exe to execute make rules.
|
||||||
ifneq ($(shell echo),)
|
ifneq ($(shell echo),)
|
||||||
@@ -29,22 +33,31 @@ else
|
|||||||
GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65)
|
GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
samples: test.s vlir.cvt
|
EXELIST_geos-cbm = \
|
||||||
|
test.s \
|
||||||
|
vlir.cvt
|
||||||
|
|
||||||
|
ifneq ($(EXELIST_$(SYS)),)
|
||||||
|
samples: $(EXELIST_$(SYS))
|
||||||
|
else
|
||||||
|
samples:
|
||||||
|
@echo "warning: grc sample not available for" $(SYS)
|
||||||
|
endif
|
||||||
|
|
||||||
test.s: test.grc
|
test.s: test.grc
|
||||||
$(GRC) -s test.s test.grc
|
$(GRC) -s test.s test.grc
|
||||||
|
|
||||||
vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s
|
vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s
|
||||||
# using seperate calls here for demonstration purposes:
|
# using seperate calls here for demonstration purposes:
|
||||||
$(GRC) -t geos-cbm -s vlir.s vlir.grc
|
$(GRC) -t $(SYS) -s vlir.s vlir.grc
|
||||||
$(AS) -t geos-cbm vlir.s
|
$(AS) -t $(SYS) vlir.s
|
||||||
$(AS) -t geos-cbm vlir0.s
|
$(AS) -t $(SYS) vlir0.s
|
||||||
$(AS) -t geos-cbm vlir1.s
|
$(AS) -t $(SYS) vlir1.s
|
||||||
$(AS) -t geos-cbm vlir2.s
|
$(AS) -t $(SYS) vlir2.s
|
||||||
$(LD) -t geos-cbm -o vlir.cvt vlir.o vlir0.o vlir1.o vlir2.o geos-cbm.lib
|
$(LD) -t $(SYS) -o vlir.cvt vlir.o vlir0.o vlir1.o vlir2.o $(SYS).lib
|
||||||
|
|
||||||
# you can also do the above in one command:
|
# you can also do the above in one command:
|
||||||
# $(CL) -t geos-cbm -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s
|
# $(CL) -t $(SYS) -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@$(DEL) test.s test.h 2>$(NULLDEV)
|
@$(DEL) test.s test.h 2>$(NULLDEV)
|
||||||
|
|||||||
@@ -31,10 +31,56 @@ else
|
|||||||
LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65)
|
LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
samples: hello
|
EXELIST_atari2600 = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_bbc = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_creativision = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_gamate = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_geos-cbm = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_geos-apple = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_lunix = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_lynx = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_nes = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_osic1p = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_pce = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
EXELIST_supervision = \
|
||||||
|
notavailable
|
||||||
|
|
||||||
|
# Unlisted targets will try to build everything.
|
||||||
|
# That lets us learn what they cannot build, and what settings
|
||||||
|
# we need to use for programs that can be built and run.
|
||||||
|
ifndef EXELIST_$(SYS)
|
||||||
|
EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)}
|
||||||
|
endif
|
||||||
|
|
||||||
|
samples: $(EXELIST_$(SYS))
|
||||||
|
|
||||||
hello: hello.c text.s
|
hello: hello.c text.s
|
||||||
$(CL) -t $(SYS) -o hello hello.c text.s
|
$(CL) -t $(SYS) -o hello hello.c text.s
|
||||||
|
|
||||||
|
# empty target used to skip systems that will not work with any program in this dir
|
||||||
|
notavailable:
|
||||||
|
@echo "warning: tutorial sample not available for" $(SYS)
|
||||||
clean:
|
clean:
|
||||||
@$(DEL) hello 2>$(NULLDEV)
|
@$(DEL) hello 2>$(NULLDEV)
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ static void VPrintMsg (const FilePos* Pos, const char* Desc,
|
|||||||
SB_Terminate (&Msg);
|
SB_Terminate (&Msg);
|
||||||
|
|
||||||
/* Format the message header */
|
/* Format the message header */
|
||||||
SB_Printf (&S, "%s(%u): %s: ",
|
SB_Printf (&S, "%s:%u: %s: ",
|
||||||
SB_GetConstBuf (GetFileName (Pos->Name)),
|
SB_GetConstBuf (GetFileName (Pos->Name)),
|
||||||
Pos->Line,
|
Pos->Line,
|
||||||
Desc);
|
Desc);
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ INLINE CodeLabel* CE_GetLabel (CodeEntry* E, unsigned Index)
|
|||||||
INLINE void CE_ReplaceLabel (CodeEntry* E, CodeLabel* L, unsigned Index)
|
INLINE void CE_ReplaceLabel (CodeEntry* E, CodeLabel* L, unsigned Index)
|
||||||
/* Replace the code label at the specified index with L */
|
/* Replace the code label at the specified index with L */
|
||||||
{
|
{
|
||||||
return CollReplace (&E->Labels, L, Index);
|
CollReplace (&E->Labels, L, Index);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
# define CE_ReplaceLabel(E, L, Index) CollReplace (&(E)->Labels, (L), (Index))
|
# define CE_ReplaceLabel(E, L, Index) CollReplace (&(E)->Labels, (L), (Index))
|
||||||
|
|||||||
@@ -1447,7 +1447,7 @@ void AdjustEntryIndices (Collection* Indices, int Index, int Change)
|
|||||||
} else if (Index <= *IndexPtr) {
|
} else if (Index <= *IndexPtr) {
|
||||||
/* Has been removed */
|
/* Has been removed */
|
||||||
*IndexPtr = -1;
|
*IndexPtr = -1;
|
||||||
//CollDelete (Indices, I);
|
/*CollDelete (Indices, I);*/
|
||||||
--I;
|
--I;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,9 +156,8 @@ static void Parse (void)
|
|||||||
**
|
**
|
||||||
** This means that "extern int i;" will not get storage allocated.
|
** This means that "extern int i;" will not get storage allocated.
|
||||||
*/
|
*/
|
||||||
if ((Decl.StorageClass & SC_FUNC) != SC_FUNC &&
|
if ((Decl.StorageClass & SC_FUNC) != SC_FUNC &&
|
||||||
(Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF &&
|
(Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) {
|
||||||
(Decl.StorageClass & SC_FICTITIOUS) != SC_FICTITIOUS) {
|
|
||||||
if ((Spec.Flags & DS_DEF_STORAGE) != 0 ||
|
if ((Spec.Flags & DS_DEF_STORAGE) != 0 ||
|
||||||
(Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC ||
|
(Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC ||
|
||||||
((Decl.StorageClass & SC_EXTERN) != 0 &&
|
((Decl.StorageClass & SC_EXTERN) != 0 &&
|
||||||
|
|||||||
@@ -1242,7 +1242,7 @@ const Type* GetBaseElementType (const Type* T)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
SymEntry* GetESUSymEntry (const Type* T)
|
struct SymEntry* GetESUSymEntry (const Type* T)
|
||||||
/* Return a SymEntry pointer from an enum/struct/union type */
|
/* Return a SymEntry pointer from an enum/struct/union type */
|
||||||
{
|
{
|
||||||
/* Only enums, structs or unions have a SymEntry attribute */
|
/* Only enums, structs or unions have a SymEntry attribute */
|
||||||
@@ -1254,7 +1254,7 @@ SymEntry* GetESUSymEntry (const Type* T)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SetESUSymEntry (Type* T, SymEntry* S)
|
void SetESUSymEntry (Type* T, struct SymEntry* S)
|
||||||
/* Set the SymEntry pointer for an enum/struct/union type */
|
/* Set the SymEntry pointer for an enum/struct/union type */
|
||||||
{
|
{
|
||||||
/* Only enums, structs or unions have a SymEntry attribute */
|
/* Only enums, structs or unions have a SymEntry attribute */
|
||||||
|
|||||||
@@ -45,6 +45,9 @@
|
|||||||
#include "inline.h"
|
#include "inline.h"
|
||||||
#include "mmodel.h"
|
#include "mmodel.h"
|
||||||
|
|
||||||
|
/* cc65 */
|
||||||
|
#include "funcdesc.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -53,8 +56,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct FuncDesc FuncDesc;
|
struct StrBuf;
|
||||||
typedef struct SymEntry SymEntry;
|
struct SymEntry;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -162,12 +165,12 @@ typedef unsigned long TypeCode;
|
|||||||
/* Type entry */
|
/* Type entry */
|
||||||
typedef struct Type Type;
|
typedef struct Type Type;
|
||||||
struct Type {
|
struct Type {
|
||||||
TypeCode C; /* Code for this entry */
|
TypeCode C; /* Code for this entry */
|
||||||
union {
|
union {
|
||||||
FuncDesc* F; /* Function description pointer */
|
struct FuncDesc* F; /* Function description pointer */
|
||||||
SymEntry* S; /* Enum/struct/union tag symbol entry pointer */
|
struct SymEntry* S; /* Enum/struct/union tag symbol entry pointer */
|
||||||
long L; /* Numeric attribute value */
|
long L; /* Numeric attribute value */
|
||||||
unsigned long U; /* Dito, unsigned */
|
unsigned long U; /* Dito, unsigned */
|
||||||
} A; /* Type attribute if necessary */
|
} A; /* Type attribute if necessary */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -221,11 +224,6 @@ extern const Type type_c_char_p[];
|
|||||||
extern const Type type_void_p[];
|
extern const Type type_void_p[];
|
||||||
extern const Type type_c_void_p[];
|
extern const Type type_c_void_p[];
|
||||||
|
|
||||||
/* Forward for the SymEntry struct */
|
|
||||||
struct SymEntry;
|
|
||||||
|
|
||||||
/* Forward for the StrBuf struct */
|
|
||||||
struct StrBuf;
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -849,7 +847,7 @@ int IsVariadicFunc (const Type* T) attribute ((const));
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int IsFastcallFunc (const Type* T) attribute ((const));
|
int IsFastcallFunc (const Type* T) attribute ((const));
|
||||||
/* Return true if this is a function type or pointer to function type by
|
/* Return true if this is a function type or pointer to function type with
|
||||||
** __fastcall__ calling convention.
|
** __fastcall__ calling convention.
|
||||||
** Check fails if the type is not a function or a pointer to function.
|
** Check fails if the type is not a function or a pointer to function.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1738,7 +1738,7 @@ static FuncDesc* ParseFuncDecl (void)
|
|||||||
{
|
{
|
||||||
SymEntry* Sym;
|
SymEntry* Sym;
|
||||||
SymEntry* WrappedCall;
|
SymEntry* WrappedCall;
|
||||||
unsigned char WrappedCallData;
|
unsigned int WrappedCallData;
|
||||||
|
|
||||||
/* Create a new function descriptor */
|
/* Create a new function descriptor */
|
||||||
FuncDesc* F = NewFuncDesc ();
|
FuncDesc* F = NewFuncDesc ();
|
||||||
@@ -2080,7 +2080,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode)
|
|||||||
|
|
||||||
if (PrevErrorCount != ErrorCount) {
|
if (PrevErrorCount != ErrorCount) {
|
||||||
/* Make the declaration fictitious if is is not parsed correctly */
|
/* Make the declaration fictitious if is is not parsed correctly */
|
||||||
D->StorageClass |= SC_DECL | SC_FICTITIOUS;
|
D->StorageClass |= SC_FICTITIOUS;
|
||||||
|
|
||||||
if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') {
|
if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') {
|
||||||
/* Use a fictitious name for the identifier if it is missing */
|
/* Use a fictitious name for the identifier if it is missing */
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ void Fatal (const char* Format, ...)
|
|||||||
LineNum = GetCurrentLine ();
|
LineNum = GetCurrentLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (stderr, "%s(%u): Fatal: ", FileName, LineNum);
|
fprintf (stderr, "%s:%u: Fatal: ", FileName, LineNum);
|
||||||
|
|
||||||
va_start (ap, Format);
|
va_start (ap, Format);
|
||||||
vfprintf (stderr, Format, ap);
|
vfprintf (stderr, Format, ap);
|
||||||
@@ -159,7 +159,7 @@ void Internal (const char* Format, ...)
|
|||||||
LineNum = GetCurrentLine ();
|
LineNum = GetCurrentLine ();
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (stderr, "%s(%u): Internal compiler error:\n",
|
fprintf (stderr, "%s:%u: Internal compiler error:\n",
|
||||||
FileName, LineNum);
|
FileName, LineNum);
|
||||||
|
|
||||||
va_start (ap, Format);
|
va_start (ap, Format);
|
||||||
@@ -186,7 +186,7 @@ void Internal (const char* Format, ...)
|
|||||||
static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap)
|
static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap)
|
||||||
/* Print an error message - internal function*/
|
/* Print an error message - internal function*/
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s(%u): Error: ", Filename, LineNo);
|
fprintf (stderr, "%s:%u: Error: ", Filename, LineNo);
|
||||||
vfprintf (stderr, Msg, ap);
|
vfprintf (stderr, Msg, ap);
|
||||||
fprintf (stderr, "\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
@@ -250,7 +250,7 @@ static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg,
|
|||||||
|
|
||||||
} else if (IS_Get (&WarnEnable)) {
|
} else if (IS_Get (&WarnEnable)) {
|
||||||
|
|
||||||
fprintf (stderr, "%s(%u): Warning: ", Filename, LineNo);
|
fprintf (stderr, "%s:%u: Warning: ", Filename, LineNo);
|
||||||
vfprintf (stderr, Msg, ap);
|
vfprintf (stderr, Msg, ap);
|
||||||
fprintf (stderr, "\n");
|
fprintf (stderr, "\n");
|
||||||
|
|
||||||
|
|||||||
@@ -997,9 +997,16 @@ static void FunctionCall (ExprDesc* Expr)
|
|||||||
char tmp[64];
|
char tmp[64];
|
||||||
StrBuf S = AUTO_STRBUF_INITIALIZER;
|
StrBuf S = AUTO_STRBUF_INITIALIZER;
|
||||||
|
|
||||||
/* Store the WrappedCall data in tmp4 */
|
if (Func->WrappedCallData == WRAPPED_CALL_USE_BANK) {
|
||||||
sprintf(tmp, "ldy #%u", Func->WrappedCallData);
|
/* Store the bank attribute in tmp4 */
|
||||||
SB_AppendStr (&S, tmp);
|
SB_AppendStr (&S, "ldy #<.bank(_");
|
||||||
|
SB_AppendStr (&S, (const char*) Expr->Name);
|
||||||
|
SB_AppendChar (&S, ')');
|
||||||
|
} else {
|
||||||
|
/* Store the WrappedCall data in tmp4 */
|
||||||
|
sprintf(tmp, "ldy #%u", Func->WrappedCallData);
|
||||||
|
SB_AppendStr (&S, tmp);
|
||||||
|
}
|
||||||
g_asmcode (&S);
|
g_asmcode (&S);
|
||||||
SB_Clear(&S);
|
SB_Clear(&S);
|
||||||
|
|
||||||
@@ -1294,6 +1301,7 @@ static void Primary (ExprDesc* E)
|
|||||||
/* Statement block */
|
/* Statement block */
|
||||||
NextToken ();
|
NextToken ();
|
||||||
Error ("Expression expected");
|
Error ("Expression expected");
|
||||||
|
E->Flags |= E_EVAL_MAYBE_UNUSED;
|
||||||
hie0 (E);
|
hie0 (E);
|
||||||
if (CurTok.Tok == TOK_RCURLY) {
|
if (CurTok.Tok == TOK_RCURLY) {
|
||||||
NextToken ();
|
NextToken ();
|
||||||
@@ -1325,6 +1333,7 @@ static void Primary (ExprDesc* E)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Error ("Expression expected");
|
Error ("Expression expected");
|
||||||
|
E->Flags |= E_EVAL_MAYBE_UNUSED;
|
||||||
NextToken ();
|
NextToken ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,14 +54,14 @@ FuncDesc* NewFuncDesc (void)
|
|||||||
FuncDesc* F = (FuncDesc*) xmalloc (sizeof (FuncDesc));
|
FuncDesc* F = (FuncDesc*) xmalloc (sizeof (FuncDesc));
|
||||||
|
|
||||||
/* Nullify the fields */
|
/* Nullify the fields */
|
||||||
F->Flags = 0;
|
F->Flags = 0;
|
||||||
F->SymTab = 0;
|
F->SymTab = 0;
|
||||||
F->TagTab = 0;
|
F->TagTab = 0;
|
||||||
F->ParamCount = 0;
|
F->ParamCount = 0;
|
||||||
F->ParamSize = 0;
|
F->ParamSize = 0;
|
||||||
F->LastParam = 0;
|
F->LastParam = 0;
|
||||||
F->FuncDef = 0;
|
F->FuncDef = 0;
|
||||||
F->WrappedCall = 0;
|
F->WrappedCall = 0;
|
||||||
F->WrappedCallData = 0;
|
F->WrappedCallData = 0;
|
||||||
|
|
||||||
/* Return the new struct */
|
/* Return the new struct */
|
||||||
|
|||||||
@@ -45,33 +45,33 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Masks for the Flags field in FuncDesc */
|
/* Masks for the Flags field in FuncDesc */
|
||||||
#define FD_NONE 0x0000U /* No flags */
|
#define FD_NONE 0x0000U /* No flags */
|
||||||
#define FD_EMPTY 0x0001U /* Function with empty param list */
|
#define FD_EMPTY 0x0001U /* Function with empty param list */
|
||||||
#define FD_VOID_PARAM 0x0002U /* Function with a void param list */
|
#define FD_VOID_PARAM 0x0002U /* Function with a void param list */
|
||||||
#define FD_VARIADIC 0x0004U /* Function with variable param list */
|
#define FD_VARIADIC 0x0004U /* Function with variable param list */
|
||||||
#define FD_INCOMPLETE_PARAM 0x0008U /* Function with param of unknown size */
|
#define FD_INCOMPLETE_PARAM 0x0008U /* Function with param of unknown size */
|
||||||
#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */
|
#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */
|
||||||
#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */
|
#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */
|
||||||
#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */
|
#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */
|
||||||
#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */
|
#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */
|
||||||
|
|
||||||
/* Bits that must be ignored when comparing funcs */
|
/* Bits that must be ignored when comparing funcs */
|
||||||
#define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER)
|
#define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER)
|
||||||
|
|
||||||
|
#define WRAPPED_CALL_USE_BANK 0x0100U /* WrappedCall uses .bank() */
|
||||||
|
|
||||||
/* Function descriptor */
|
/* Function descriptor */
|
||||||
typedef struct FuncDesc FuncDesc;
|
typedef struct FuncDesc FuncDesc;
|
||||||
struct FuncDesc {
|
struct FuncDesc {
|
||||||
unsigned Flags; /* Bitmapped flags FD_... */
|
unsigned Flags; /* Bitmapped flags FD_... */
|
||||||
struct SymTable* SymTab; /* Symbol table */
|
struct SymTable* SymTab; /* Symbol table */
|
||||||
struct SymTable* TagTab; /* Symbol table for structs/enums */
|
struct SymTable* TagTab; /* Symbol table for structs/enums */
|
||||||
unsigned ParamCount; /* Number of parameters */
|
unsigned ParamCount; /* Number of parameters */
|
||||||
unsigned ParamSize; /* Size of the parameters */
|
unsigned ParamSize; /* Size of the parameters */
|
||||||
struct SymEntry* LastParam; /* Pointer to last parameter */
|
struct SymEntry* LastParam; /* Pointer to last parameter */
|
||||||
struct FuncDesc* FuncDef; /* Descriptor used in definition */
|
struct FuncDesc* FuncDef; /* Descriptor used in definition */
|
||||||
struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */
|
struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */
|
||||||
unsigned char WrappedCallData;/* The WrappedCall's user data */
|
unsigned int WrappedCallData; /* The WrappedCall's user data */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -476,8 +476,7 @@ static void ParseOneDecl (const DeclSpec* Spec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If the symbol is not marked as external, it will be defined now */
|
/* If the symbol is not marked as external, it will be defined now */
|
||||||
if ((Decl.StorageClass & SC_FICTITIOUS) == 0 &&
|
if ((Decl.StorageClass & SC_DECL) == 0 &&
|
||||||
(Decl.StorageClass & SC_DECL) == 0 &&
|
|
||||||
(Decl.StorageClass & SC_EXTERN) == 0) {
|
(Decl.StorageClass & SC_EXTERN) == 0) {
|
||||||
Decl.StorageClass |= SC_DEF;
|
Decl.StorageClass |= SC_DEF;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -531,16 +531,19 @@ static void WrappedCallPragma (StrBuf* B)
|
|||||||
/* Skip the following comma */
|
/* Skip the following comma */
|
||||||
if (!GetComma (B)) {
|
if (!GetComma (B)) {
|
||||||
/* Error already flagged by GetComma */
|
/* Error already flagged by GetComma */
|
||||||
|
Error ("Value or the word 'bank' required for wrapped-call identifier");
|
||||||
|
goto ExitPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Next must be either a numeric value, or "bank" */
|
||||||
|
if (HasStr (B, "bank")) {
|
||||||
|
Val = WRAPPED_CALL_USE_BANK;
|
||||||
|
} else if (!GetNumber (B, &Val)) {
|
||||||
Error ("Value required for wrapped-call identifier");
|
Error ("Value required for wrapped-call identifier");
|
||||||
goto ExitPoint;
|
goto ExitPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GetNumber (B, &Val)) {
|
if (!(Val == WRAPPED_CALL_USE_BANK) && (Val < 0 || Val > 255)) {
|
||||||
Error ("Value required for wrapped-call identifier");
|
|
||||||
goto ExitPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Val < 0 || Val > 255) {
|
|
||||||
Error ("Identifier must be between 0-255");
|
Error ("Identifier must be between 0-255");
|
||||||
goto ExitPoint;
|
goto ExitPoint;
|
||||||
}
|
}
|
||||||
@@ -552,7 +555,7 @@ static void WrappedCallPragma (StrBuf* B)
|
|||||||
/* Check if the name is valid */
|
/* Check if the name is valid */
|
||||||
if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) {
|
if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) {
|
||||||
|
|
||||||
PushWrappedCall(Entry, (unsigned char) Val);
|
PushWrappedCall(Entry, (unsigned int) Val);
|
||||||
Entry->Flags |= SC_REF;
|
Entry->Flags |= SC_REF;
|
||||||
GetFuncDesc (Entry->Type)->Flags |= FD_CALL_WRAPPER;
|
GetFuncDesc (Entry->Type)->Flags |= FD_CALL_WRAPPER;
|
||||||
|
|
||||||
@@ -781,7 +784,7 @@ static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High)
|
|||||||
|
|
||||||
static void MakeMessage (const char* Message)
|
static void MakeMessage (const char* Message)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "%s(%u): Note: %s\n", GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Message);
|
fprintf (stderr, "%s:%u: Note: %s\n", GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1396,7 +1396,7 @@ void Preprocess (void)
|
|||||||
|
|
||||||
Done:
|
Done:
|
||||||
if (Verbosity > 1 && SB_NotEmpty (Line)) {
|
if (Verbosity > 1 && SB_NotEmpty (Line)) {
|
||||||
printf ("%s(%u): %.*s\n", GetCurrentFile (), GetCurrentLine (),
|
printf ("%s:%u: %.*s\n", GetCurrentFile (), GetCurrentLine (),
|
||||||
(int) SB_GetLen (Line), SB_GetConstBuf (Line));
|
(int) SB_GetLen (Line), SB_GetConstBuf (Line));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ static IntPtrStack WrappedCalls;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void PushWrappedCall (void *Ptr, unsigned char Val)
|
void PushWrappedCall (void *Ptr, unsigned int Val)
|
||||||
/* Push the current WrappedCall */
|
/* Push the current WrappedCall */
|
||||||
{
|
{
|
||||||
if (IPS_IsFull (&WrappedCalls)) {
|
if (IPS_IsFull (&WrappedCalls)) {
|
||||||
@@ -88,7 +88,7 @@ void PopWrappedCall (void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void GetWrappedCall (void **Ptr, unsigned char *Val)
|
void GetWrappedCall (void **Ptr, unsigned int *Val)
|
||||||
/* Get the current WrappedCall */
|
/* Get the current WrappedCall */
|
||||||
{
|
{
|
||||||
if (IPS_GetCount (&WrappedCalls) < 1) {
|
if (IPS_GetCount (&WrappedCalls) < 1) {
|
||||||
@@ -97,6 +97,6 @@ void GetWrappedCall (void **Ptr, unsigned char *Val)
|
|||||||
} else {
|
} else {
|
||||||
long Temp;
|
long Temp;
|
||||||
IPS_Get (&WrappedCalls, &Temp, Ptr);
|
IPS_Get (&WrappedCalls, &Temp, Ptr);
|
||||||
*Val = (unsigned char) Temp;
|
*Val = (unsigned int) Temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,13 +50,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void PushWrappedCall (void *Ptr, unsigned char Val);
|
void PushWrappedCall (void *Ptr, unsigned int Val);
|
||||||
/* Push the current WrappedCall */
|
/* Push the current WrappedCall */
|
||||||
|
|
||||||
void PopWrappedCall (void);
|
void PopWrappedCall (void);
|
||||||
/* Pop the current WrappedCall */
|
/* Pop the current WrappedCall */
|
||||||
|
|
||||||
void GetWrappedCall (void **Ptr, unsigned char *Val);
|
void GetWrappedCall (void **Ptr, unsigned int *Val);
|
||||||
/* Get the current WrappedCall, if any */
|
/* Get the current WrappedCall, if any */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown)
|
|||||||
SB_Terminate (&Ident);
|
SB_Terminate (&Ident);
|
||||||
} else {
|
} else {
|
||||||
if (!IgnoreUnknown) {
|
if (!IgnoreUnknown) {
|
||||||
Error ("%s(%u): Syntax error", Filename, Line);
|
Error ("%s:%u: Syntax error", Filename, Line);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown)
|
|||||||
++L;
|
++L;
|
||||||
} else {
|
} else {
|
||||||
if (!IgnoreUnknown) {
|
if (!IgnoreUnknown) {
|
||||||
Error ("%s(%u): Missing '='", Filename, Line);
|
Error ("%s:%u: Missing '='", Filename, Line);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown)
|
|||||||
/* Must have at least one digit */
|
/* Must have at least one digit */
|
||||||
if (Digits == 0) {
|
if (Digits == 0) {
|
||||||
if (!IgnoreUnknown) {
|
if (!IgnoreUnknown) {
|
||||||
Error ("%s(%u): Error in number format", Filename, Line);
|
Error ("%s:%u: Error in number format", Filename, Line);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -213,7 +213,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown)
|
|||||||
/* Check for a comment character or end of line */
|
/* Check for a comment character or end of line */
|
||||||
if (*L != CommentStart && *L != '\0') {
|
if (*L != CommentStart && *L != '\0') {
|
||||||
if (!IgnoreUnknown) {
|
if (!IgnoreUnknown) {
|
||||||
Error ("%s(%u): Trailing garbage", Filename, Line);
|
Error ("%s:%u: Trailing garbage", Filename, Line);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ void InfoWarning (const char* Format, ...)
|
|||||||
xvsprintf (Buf, sizeof (Buf), Format, ap);
|
xvsprintf (Buf, sizeof (Buf), Format, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
fprintf (stderr, "%s(%u): Warning: %s\n",
|
fprintf (stderr, "%s:%u: Warning: %s\n",
|
||||||
InputSrcName, InfoErrorLine, Buf);
|
InputSrcName, InfoErrorLine, Buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ void InfoError (const char* Format, ...)
|
|||||||
xvsprintf (Buf, sizeof (Buf), Format, ap);
|
xvsprintf (Buf, sizeof (Buf), Format, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
fprintf (stderr, "%s(%u): Error: %s\n",
|
fprintf (stderr, "%s:%u: Error: %s\n",
|
||||||
InputSrcName, InfoErrorLine, Buf);
|
InputSrcName, InfoErrorLine, Buf);
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,12 +140,12 @@ void CheckAssertions (void)
|
|||||||
|
|
||||||
case ASSERT_ACT_WARN:
|
case ASSERT_ACT_WARN:
|
||||||
case ASSERT_ACT_LDWARN:
|
case ASSERT_ACT_LDWARN:
|
||||||
Warning ("%s(%u): %s", Module, Line, Message);
|
Warning ("%s:%u: %s", Module, Line, Message);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ASSERT_ACT_ERROR:
|
case ASSERT_ACT_ERROR:
|
||||||
case ASSERT_ACT_LDERROR:
|
case ASSERT_ACT_LDERROR:
|
||||||
Error ("%s(%u): %s", Module, Line, Message);
|
Error ("%s:%u: %s", Module, Line, Message);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ Import* ReadImport (FILE* F, ObjData* Obj)
|
|||||||
*/
|
*/
|
||||||
if (ObjHasFiles (I->Obj)) {
|
if (ObjHasFiles (I->Obj)) {
|
||||||
const LineInfo* LI = GetImportPos (I);
|
const LineInfo* LI = GetImportPos (I);
|
||||||
Error ("Invalid import size in for '%s', imported from %s(%u): 0x%02X",
|
Error ("Invalid import size in for '%s', imported from %s:%u: 0x%02X",
|
||||||
GetString (I->Name),
|
GetString (I->Name),
|
||||||
GetSourceName (LI),
|
GetSourceName (LI),
|
||||||
GetSourceLine (LI),
|
GetSourceLine (LI),
|
||||||
@@ -690,12 +690,12 @@ static void CheckSymType (const Export* E)
|
|||||||
*/
|
*/
|
||||||
if (E->Obj) {
|
if (E->Obj) {
|
||||||
/* The export comes from an object file */
|
/* The export comes from an object file */
|
||||||
SB_Printf (&ExportLoc, "%s, %s(%u)",
|
SB_Printf (&ExportLoc, "%s, %s:%u",
|
||||||
GetString (E->Obj->Name),
|
GetString (E->Obj->Name),
|
||||||
GetSourceName (ExportLI),
|
GetSourceName (ExportLI),
|
||||||
GetSourceLine (ExportLI));
|
GetSourceLine (ExportLI));
|
||||||
} else if (ExportLI) {
|
} else if (ExportLI) {
|
||||||
SB_Printf (&ExportLoc, "%s(%u)",
|
SB_Printf (&ExportLoc, "%s:%u",
|
||||||
GetSourceName (ExportLI),
|
GetSourceName (ExportLI),
|
||||||
GetSourceLine (ExportLI));
|
GetSourceLine (ExportLI));
|
||||||
} else {
|
} else {
|
||||||
@@ -706,7 +706,7 @@ static void CheckSymType (const Export* E)
|
|||||||
}
|
}
|
||||||
if (I->Obj) {
|
if (I->Obj) {
|
||||||
/* The import comes from an object file */
|
/* The import comes from an object file */
|
||||||
SB_Printf (&ImportLoc, "%s, %s(%u)",
|
SB_Printf (&ImportLoc, "%s, %s:%u",
|
||||||
GetString (I->Obj->Name),
|
GetString (I->Obj->Name),
|
||||||
GetSourceName (ImportLI),
|
GetSourceName (ImportLI),
|
||||||
GetSourceLine (ImportLI));
|
GetSourceLine (ImportLI));
|
||||||
@@ -714,7 +714,7 @@ static void CheckSymType (const Export* E)
|
|||||||
/* The import is linker generated and we have line
|
/* The import is linker generated and we have line
|
||||||
** information
|
** information
|
||||||
*/
|
*/
|
||||||
SB_Printf (&ImportLoc, "%s(%u)",
|
SB_Printf (&ImportLoc, "%s:%u",
|
||||||
GetSourceName (ImportLI),
|
GetSourceName (ImportLI),
|
||||||
GetSourceLine (ImportLI));
|
GetSourceLine (ImportLI));
|
||||||
} else {
|
} else {
|
||||||
@@ -774,17 +774,16 @@ static void PrintUnresolved (ExpCheckFunc F, void* Data)
|
|||||||
if (E->Expr == 0 && E->ImpCount > 0 && F (E->Name, Data) == 0) {
|
if (E->Expr == 0 && E->ImpCount > 0 && F (E->Name, Data) == 0) {
|
||||||
/* Unresolved external */
|
/* Unresolved external */
|
||||||
Import* Imp = E->ImpList;
|
Import* Imp = E->ImpList;
|
||||||
fprintf (stderr,
|
const char* name = GetString (E->Name);
|
||||||
"Unresolved external '%s' referenced in:\n",
|
|
||||||
GetString (E->Name));
|
|
||||||
while (Imp) {
|
while (Imp) {
|
||||||
unsigned J;
|
unsigned J;
|
||||||
for (J = 0; J < CollCount (&Imp->RefLines); ++J) {
|
for (J = 0; J < CollCount (&Imp->RefLines); ++J) {
|
||||||
const LineInfo* LI = CollConstAt (&Imp->RefLines, J);
|
const LineInfo* LI = CollConstAt (&Imp->RefLines, J);
|
||||||
fprintf (stderr,
|
fprintf (stderr,
|
||||||
" %s(%u)\n",
|
"%s:%u: Error: Unresolved external '%s'\n",
|
||||||
GetSourceName (LI),
|
GetSourceName (LI),
|
||||||
GetSourceLine (LI));
|
GetSourceLine (LI),
|
||||||
|
name);
|
||||||
}
|
}
|
||||||
Imp = Imp->Next;
|
Imp = Imp->Next;
|
||||||
}
|
}
|
||||||
@@ -996,7 +995,7 @@ void PrintImportMap (FILE* F)
|
|||||||
const LineInfo* LI = GetImportPos (Imp);
|
const LineInfo* LI = GetImportPos (Imp);
|
||||||
if (LI) {
|
if (LI) {
|
||||||
fprintf (F,
|
fprintf (F,
|
||||||
" %-25s %s(%u)\n",
|
" %-25s %s:%u\n",
|
||||||
GetObjFileName (Imp->Obj),
|
GetObjFileName (Imp->Obj),
|
||||||
GetSourceName (LI),
|
GetSourceName (LI),
|
||||||
GetSourceLine (LI));
|
GetSourceLine (LI));
|
||||||
@@ -1058,7 +1057,7 @@ void CircularRefError (const Export* E)
|
|||||||
/* Print an error about a circular reference using to define the given export */
|
/* Print an error about a circular reference using to define the given export */
|
||||||
{
|
{
|
||||||
const LineInfo* LI = GetExportPos (E);
|
const LineInfo* LI = GetExportPos (E);
|
||||||
Error ("Circular reference for symbol '%s', %s(%u)",
|
Error ("Circular reference for symbol '%s', %s:%u",
|
||||||
GetString (E->Name),
|
GetString (E->Name),
|
||||||
GetSourceName (LI),
|
GetSourceName (LI),
|
||||||
GetSourceLine (LI));
|
GetSourceLine (LI));
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ void CfgWarning (const FilePos* Pos, const char* Format, ...)
|
|||||||
SB_VPrintf (&Buf, Format, ap);
|
SB_VPrintf (&Buf, Format, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
Warning ("%s(%u): %s",
|
Warning ("%s:%u: %s",
|
||||||
GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
|
GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
|
||||||
SB_Done (&Buf);
|
SB_Done (&Buf);
|
||||||
}
|
}
|
||||||
@@ -109,7 +109,7 @@ void CfgError (const FilePos* Pos, const char* Format, ...)
|
|||||||
SB_VPrintf (&Buf, Format, ap);
|
SB_VPrintf (&Buf, Format, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
Error ("%s(%u): %s",
|
Error ("%s:%u: %s",
|
||||||
GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
|
GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf));
|
||||||
SB_Done (&Buf);
|
SB_Done (&Buf);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,150 +1,150 @@
|
|||||||
goto.c(8): Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:8: Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(97): Warning: Variable 'a' is defined but never used
|
goto.c:97: Warning: Variable 'a' is defined but never used
|
||||||
goto.c(117): Warning: Variable 'a' is defined but never used
|
goto.c:117: Warning: Variable 'a' is defined but never used
|
||||||
goto.c(137): Warning: Variable 'a' is defined but never used
|
goto.c:137: Warning: Variable 'a' is defined but never used
|
||||||
goto.c(159): Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 86 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 86 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 106 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 106 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 126 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 126 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(159): Warning: Goto at line 146 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:159: Warning: Goto at line 146 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 24 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 24 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 45 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 45 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 66 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 66 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 87 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 87 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 107 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 107 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 127 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 127 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 147 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 147 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(180): Warning: Goto at line 168 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:180: Warning: Goto at line 168 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 25 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 25 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 46 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 46 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 67 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 67 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 88 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 88 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 108 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 108 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 128 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 128 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 148 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 148 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 169 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 169 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(201): Warning: Goto at line 190 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:201: Warning: Goto at line 190 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 26 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 26 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 47 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 47 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 68 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 68 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 89 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 89 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 109 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 109 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 129 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 129 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 149 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 149 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(221): Warning: Goto at line 170 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:221: Warning: Goto at line 170 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(231): Warning: Goto at line 231 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:231: Warning: Goto at line 231 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 27 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 27 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 48 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 48 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 69 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 69 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 90 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 90 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 110 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 110 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 130 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 130 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(241): Warning: Goto at line 150 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:241: Warning: Goto at line 150 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(250): Warning: Goto at line 250 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:250: Warning: Goto at line 250 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(251): Warning: Goto at line 251 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:251: Warning: Goto at line 251 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(252): Warning: Goto at line 252 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:252: Warning: Goto at line 252 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 28 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 28 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 49 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 49 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 70 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 70 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 91 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 91 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 111 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 111 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 131 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 131 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 151 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 151 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 172 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 172 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 193 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 193 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 214 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 214 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 234 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 234 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(263): Warning: Goto at line 254 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:263: Warning: Goto at line 254 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(271): Warning: Goto at line 271 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:271: Warning: Goto at line 271 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(272): Warning: Goto at line 272 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:272: Warning: Goto at line 272 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(273): Warning: Goto at line 273 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:273: Warning: Goto at line 273 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(274): Warning: Goto at line 274 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:274: Warning: Goto at line 274 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(275): Warning: Goto at line 275 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:275: Warning: Goto at line 275 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 29 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 29 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 50 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 50 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 71 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 71 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 92 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 92 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 112 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 112 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 132 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 132 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 152 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 152 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 173 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 173 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 194 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 194 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 215 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 215 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 235 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 235 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 255 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 255 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(284): Warning: Goto at line 277 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:284: Warning: Goto at line 277 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(292): Warning: Goto at line 292 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:292: Warning: Goto at line 292 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(293): Warning: Goto at line 293 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:293: Warning: Goto at line 293 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(294): Warning: Goto at line 294 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:294: Warning: Goto at line 294 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(295): Warning: Goto at line 295 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:295: Warning: Goto at line 295 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(296): Warning: Goto at line 296 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:296: Warning: Goto at line 296 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 30 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 30 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 51 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 51 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 72 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 72 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 93 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 93 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 113 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 113 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 133 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 133 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 153 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 153 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 174 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 174 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 195 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 195 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 216 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 216 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 236 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 236 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 256 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 256 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 278 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 278 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(305): Warning: Goto at line 299 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:305: Warning: Goto at line 299 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(313): Warning: Goto at line 313 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:313: Warning: Goto at line 313 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(314): Warning: Goto at line 314 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:314: Warning: Goto at line 314 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(315): Warning: Goto at line 315 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:315: Warning: Goto at line 315 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(316): Warning: Goto at line 316 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:316: Warning: Goto at line 316 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(317): Warning: Goto at line 317 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:317: Warning: Goto at line 317 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 31 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 31 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 52 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 52 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 73 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 73 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 94 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 94 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 114 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 114 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 134 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 134 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 154 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 154 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 175 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 175 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 196 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 196 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 217 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 217 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 237 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 237 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 257 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 257 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(325): Warning: Goto at line 279 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:325: Warning: Goto at line 279 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(333): Warning: Goto at line 333 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:333: Warning: Goto at line 333 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(334): Warning: Goto at line 334 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:334: Warning: Goto at line 334 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(335): Warning: Goto at line 335 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:335: Warning: Goto at line 335 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(336): Warning: Goto at line 336 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:336: Warning: Goto at line 336 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(337): Warning: Goto at line 337 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:337: Warning: Goto at line 337 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(340): Warning: Goto at line 340 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:340: Warning: Goto at line 340 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 32 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 32 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 53 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 53 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 74 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 74 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 95 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 95 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 115 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 115 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 135 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 135 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 155 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 155 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 176 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 176 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 197 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 197 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 218 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 218 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 238 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 238 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(345): Warning: Goto at line 258 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:345: Warning: Goto at line 258 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(353): Warning: Goto at line 353 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:353: Warning: Goto at line 353 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(354): Warning: Goto at line 354 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:354: Warning: Goto at line 354 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(355): Warning: Goto at line 355 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:355: Warning: Goto at line 355 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(356): Warning: Goto at line 356 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:356: Warning: Goto at line 356 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(357): Warning: Goto at line 357 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:357: Warning: Goto at line 357 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(359): Warning: Goto at line 359 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:359: Warning: Goto at line 359 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(360): Warning: Goto at line 360 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:360: Warning: Goto at line 360 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(361): Warning: Goto at line 361 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:361: Warning: Goto at line 361 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(373): Warning: Goto at line 373 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:373: Warning: Goto at line 373 to label l8 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(374): Warning: Goto at line 374 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:374: Warning: Goto at line 374 to label l9 jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(375): Warning: Goto at line 375 to label la jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:375: Warning: Goto at line 375 to label la jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(376): Warning: Goto at line 376 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:376: Warning: Goto at line 376 to label lb jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(377): Warning: Goto at line 377 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:377: Warning: Goto at line 377 to label lc jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(378): Warning: Goto at line 378 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:378: Warning: Goto at line 378 to label ld jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(379): Warning: Goto at line 379 to label le jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:379: Warning: Goto at line 379 to label le jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(380): Warning: Goto at line 380 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:380: Warning: Goto at line 380 to label lf jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(381): Warning: Goto at line 381 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:381: Warning: Goto at line 381 to label lg jumps into a block with initialization of an object that has automatic storage duration
|
||||||
goto.c(382): Warning: Goto at line 382 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
goto.c:382: Warning: Goto at line 382 to label lh jumps into a block with initialization of an object that has automatic storage duration
|
||||||
|
|||||||
@@ -7,49 +7,48 @@ unsigned char c;
|
|||||||
int *p;
|
int *p;
|
||||||
|
|
||||||
void f1(void) {
|
void f1(void) {
|
||||||
int i = 1;
|
int i = 1;
|
||||||
int *pa = (int *)0xaaaa;
|
int *pa = (int *)0xaaaa;
|
||||||
int *pb = (int *)0xbbbb;
|
int *pb = (int *)0xbbbb;
|
||||||
|
|
||||||
p = (i == 0) ? pa : pb;
|
p = (i == 0) ? pa : pb;
|
||||||
c = 0x5a;
|
c = 0x5a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct data_t {
|
struct data_t {
|
||||||
unsigned char c;
|
unsigned char c;
|
||||||
int *p;
|
int *p;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct data_t data;
|
struct data_t data;
|
||||||
|
|
||||||
void f2(void) {
|
void f2(void) {
|
||||||
int i = 1;
|
int i = 1;
|
||||||
int *pa = (int *)0xcccc;
|
int *pa = (int *)0xcccc;
|
||||||
int *pb = (int *)0xdddd;
|
int *pb = (int *)0xdddd;
|
||||||
struct data_t *po = &data;
|
struct data_t *po = &data;
|
||||||
|
|
||||||
po->p = (i == 0) ? pa : pb;
|
po->p = (i == 0) ? pa : pb;
|
||||||
po->c = 0xa5;
|
po->c = 0xa5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
f1();
|
f1();
|
||||||
if (c != 0x5a) {
|
if (c != 0x5a) {
|
||||||
ret++;
|
ret++;
|
||||||
}
|
}
|
||||||
printf("c: %hhx\n", c);
|
printf("c: %hhx\n", c);
|
||||||
printf("p: %p\n", p);
|
printf("p: %p\n", p);
|
||||||
f2();
|
f2();
|
||||||
if (data.c != 0xa5) {
|
if (data.c != 0xa5) {
|
||||||
ret++;
|
ret++;
|
||||||
}
|
}
|
||||||
printf("c: %hhx\n", data.c);
|
printf("c: %hhx\n", data.c);
|
||||||
printf("p: %p\n", data.p);
|
printf("p: %p\n", data.p);
|
||||||
|
|
||||||
printf("failures: %d\n", ret);
|
printf("failures: %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ int main(void)
|
|||||||
S b = {1, 4};
|
S b = {1, 4};
|
||||||
S m[1] = {{6, 3}};
|
S m[1] = {{6, 3}};
|
||||||
S *p = &a;
|
S *p = &a;
|
||||||
|
|
||||||
(&a)->a += b.a;
|
(&a)->a += b.a;
|
||||||
p->b += b.b;
|
p->b += b.b;
|
||||||
m->a += b.a;
|
m->a += b.a;
|
||||||
|
|||||||
Reference in New Issue
Block a user