diff --git a/compiler/libpc300/libpc300.sln b/compiler/libpc300/libpc300.sln
index 9ceb4d8b..96b5d99b 100755
--- a/compiler/libpc300/libpc300.sln
+++ b/compiler/libpc300/libpc300.sln
@@ -6,6 +6,7 @@ EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
+ Debug32 = Debug32
Release = Release
Release32 = Release32
Release64 = Release64
@@ -13,6 +14,8 @@ Global
GlobalSection(ProjectConfiguration) = postSolution
{19B72687-080B-437A-917A-12AEB0031635}.Debug.ActiveCfg = Release|Win32
{19B72687-080B-437A-917A-12AEB0031635}.Debug.Build.0 = Release|Win32
+ {19B72687-080B-437A-917A-12AEB0031635}.Debug32.ActiveCfg = Debug32|Win32
+ {19B72687-080B-437A-917A-12AEB0031635}.Debug32.Build.0 = Debug32|Win32
{19B72687-080B-437A-917A-12AEB0031635}.Release.ActiveCfg = Release|Win32
{19B72687-080B-437A-917A-12AEB0031635}.Release.Build.0 = Release|Win32
{19B72687-080B-437A-917A-12AEB0031635}.Release32.ActiveCfg = Release32|Win32
diff --git a/compiler/libpc300/libpc300.vcproj b/compiler/libpc300/libpc300.vcproj
index cf897b05..165649e7 100755
--- a/compiler/libpc300/libpc300.vcproj
+++ b/compiler/libpc300/libpc300.vcproj
@@ -200,6 +200,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -247,9 +296,6 @@
-
-
diff --git a/compiler/libpc300/sc1.c b/compiler/libpc300/sc1.c
index 2fff3a93..a3ac9292 100755
--- a/compiler/libpc300/sc1.c
+++ b/compiler/libpc300/sc1.c
@@ -3178,7 +3178,7 @@ static int newfunc(char *firstname,int firsttag,int fpublic,int fstatic,int stoc
if ((sym->usage & (uPROTOTYPED | uREAD))==uREAD && sym->tag!=0) {
int curstatus=sc_status;
sc_status=statWRITE; /* temporarily set status to WRITE, so the warning isn't blocked */
- error(208);
+ //error(208); //this is silly, it should be caught the first pass
sc_status=curstatus;
sc_reparse=TRUE; /* must add another pass to "initial scan" phase */
} /* if */
diff --git a/compiler/libpc300/sc3.c b/compiler/libpc300/sc3.c
index dbc28e44..786ae2b0 100755
--- a/compiler/libpc300/sc3.c
+++ b/compiler/libpc300/sc3.c
@@ -964,8 +964,12 @@ static int hier14(value *lval1)
check_userop(NULL,lval2.tag,lval3.tag,2,&lval3,&lval2.tag);
store(&lval3); /* now, store the expression result */
} /* if */
- if (!oper && !matchtag(lval3.tag,lval2.tag,TRUE))
- error(213); /* tagname mismatch (if "oper", warning already given in plunge2()) */
+ if (!oper) { /* tagname mismatch (if "oper", warning already given in plunge2()) */
+ if (lval3.sym && !matchtag(lval3.sym->tag, lval2.tag, TRUE))
+ error(213);
+ else if (!lval3.sym && !matchtag(lval3.tag, lval2.tag, TRUE))
+ error(213);
+ }
if (lval3.sym)
markusage(lval3.sym,uWRITTEN);
sideeffect=TRUE;