diff --git a/.gitattributes b/.gitattributes index c00b210eda..5d3f83aca4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14330,6 +14330,7 @@ tests/webtbs/tw2738.pp svneol=native#text/plain tests/webtbs/tw2739.pp svneol=native#text/plain tests/webtbs/tw27424.pp svneol=native#text/pascal tests/webtbs/tw27515.pp svneol=native#text/pascal +tests/webtbs/tw27517.pp svneol=native#text/pascal tests/webtbs/tw27529.pp svneol=native#text/pascal tests/webtbs/tw2758.pp svneol=native#text/plain tests/webtbs/tw2763.pp svneol=native#text/plain diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index ec6472679c..b05e2e6103 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -3440,12 +3440,9 @@ implementation if try_to_consume(_LKLAMMER) then begin p1:=factor(true,false); - if token in postfixoperator_tokens then - begin - again:=true; - postfixoperators(p1,again,getaddr); - end - else + { inside parentheses a full expression is allowed, see also tests\webtbs\tb27517.pp } + if token<>_RKLAMMER then + p1:=sub_expr(opcompare,true,false,p1); consume(_RKLAMMER); end else diff --git a/tests/webtbs/tw27517.pp b/tests/webtbs/tw27517.pp new file mode 100644 index 0000000000..0dd0b7aa12 --- /dev/null +++ b/tests/webtbs/tw27517.pp @@ -0,0 +1,11 @@ +program Project1; + +{$mode objfpc}{$H+} + +var + pTyped: PInteger; + p: Pointer; +begin + p := nil; + pTyped := @(PByte(p)+1)^; //project1.lpr(21,23) Fatal: Syntax error, ")" expected but "+" found +end.