Index: pdecsub.pas
===================================================================
--- pdecsub.pas	(revision 20212)
+++ pdecsub.pas	(working copy)
@@ -929,40 +929,35 @@
             genname : tidstring;
             s : shortstring;
           begin
-            result:=not assigned(astruct)and(m_delphi in current_settings.modeswitches);
+            result:=not assigned(astruct)
+                    and (m_delphi in current_settings.modeswitches)
+                    and try_to_consume(_LT);
+
             if result then
               begin
                 { parse all parameters first so we can check whether we have
                   the correct generic def available }
                 genparalistdecl:=TFPHashList.Create;
-                if try_to_consume(_LT) then
-                  begin
-                    { start with 1, so Find can return Nil (= 0) }
-                    idx:=1;
-                    repeat
-                      if token=_ID then
-                        begin
-                          genparalistdecl.Add(pattern, Pointer(PtrInt(idx)));
-                          consume(_ID);
-                          inc(idx);
-                        end
-                      else
-                        begin
-                          message2(scan_f_syn_expected,arraytokeninfo[_ID].str,arraytokeninfo[token].str);
-                          if token<>_COMMA then
-                            consume(token);
-                        end;
-                    until not try_to_consume(_COMMA);
-                    if not try_to_consume(_GT) then
-                      consume(_RSHARPBRACKET);
-                  end
-                else
-                  begin
-                    { no generic }
-                    srsym:=nil;
-                    exit;
-                  end;
 
+                { start with 1, so Find can return Nil (= 0) }
+                idx:=1;
+                repeat
+                  if token=_ID then
+                    begin
+                      genparalistdecl.Add(pattern, Pointer(PtrInt(idx)));
+                      consume(_ID);
+                      inc(idx);
+                    end
+                  else
+                    begin
+                      message2(scan_f_syn_expected,arraytokeninfo[_ID].str,arraytokeninfo[token].str);
+                      if token<>_COMMA then
+                        consume(token);
+                    end;
+                until not try_to_consume(_COMMA);
+                if not try_to_consume(_GT) then
+                  consume(_RSHARPBRACKET);
+
                 s:='';
                 str(genparalistdecl.count,s);
                 genname:=sp+'$'+s;
@@ -971,13 +966,12 @@
 
                 srsym:=search_object_name(genname,false);
 
-                if not assigned(srsym) then
+                if srsym=generrorsym then
                   begin
                     { TODO : print a nicer typename that contains the parsed
                              generic types }
                     Message1(type_e_generic_declaration_does_not_match,genname);
                     srsym:=nil;
-                    exit;
                   end;
               end;
           end;
