Browse Source

* do not throw an internal error in case of a misplaced string, resolves #39609

florian 3 years ago
parent
commit
2b66f60a88
2 changed files with 16 additions and 1 deletions
  1. 8 1
      compiler/psub.pas
  2. 8 0
      tests/webtbf/tw39609.pp

+ 8 - 1
compiler/psub.pas

@@ -3143,7 +3143,14 @@ implementation
          { add implementations for synthetic method declarations added by
            the compiler (not for unit/program init functions, their localst
            is the staticst -> would duplicate the work done in pmodules) }
-         if current_procinfo.procdef.localst.symtabletype=localsymtable then
+         if (current_procinfo.procdef.localst.symtabletype=localsymtable) and
+           { we cannot call add_synthetic_method_implementations as it throws an internalerror if
+             the token is a string/char. As this is a syntax error and compilation will abort anyways,
+             skipping the call does not matter
+           }
+           (token<>_CSTRING) and
+           (token<>_CWCHAR) and
+           (token<>_CWSTRING) then
            add_synthetic_method_implementations(current_procinfo.procdef.localst);
 
          { check for incomplete class definitions, this is only required

+ 8 - 0
tests/webtbf/tw39609.pp

@@ -0,0 +1,8 @@
+{ %fail }
+procedure A;
+'Hi.'
+begin
+end;
+
+begin
+end.