Merge branch 'master' into master

This commit is contained in:
WayneParham
2021-05-16 10:02:37 -05:00
committed by GitHub
33 changed files with 519 additions and 307 deletions

View File

@@ -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/".

View File

@@ -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.

View File

@@ -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

View File

@@ -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);
} }

View File

@@ -21,7 +21,7 @@ __syschdir:
; Get name ; Get name
jsr popax jsr popax
stx tmp1 stx tmp1
ldy tmp1 ldy tmp1

View File

@@ -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:

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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);

View File

@@ -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))

View File

@@ -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;
} }
} }

View File

@@ -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 &&

View File

@@ -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 */

View File

@@ -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.
*/ */

View File

@@ -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 */

View File

@@ -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");

View File

@@ -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 ();
} }
} }

View File

@@ -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 */

View File

@@ -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 */
}; };

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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));
} }
} }

View File

@@ -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;
} }
} }

View File

@@ -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 */

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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:

View File

@@ -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));

View File

@@ -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);
} }

View File

@@ -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

View File

@@ -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;
} }

View File

@@ -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;