https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83769

            Bug ID: 83769
           Summary: Statement expression inside lambda defined and
                    evaluated in global scope fails to compile with
                    optimizations
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: giel+gcc at mortis dot eu
  Target Milestone: ---

Created attachment 43089
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=43089&action=edit
small example reproducing the problem

Evaluating a statement expression (such as used by htons on glibc) inside a
lambda defined at global scope (used for Immediately Invoked Lambda Expression
(IILE) used as initializer for a global constant) successfully compiles at -O0
but fails to compile at -O1 or higher. I'm building with -std=c++11.

I'm getting this error message:
> <source>: In lambda function:
> <source>:9:29: error: statement-expressions are not allowed outside functions 
> nor in template-argument lists
>    addr.sin_port           = htons(KLocalPort);

A reduced example is attached.

I initially discovered this on GCC 4.8.2 (after discovering that a release
build fails on CI, while a debug system on my local dev machine succeeds).

Testing on godbolt.org confirms that this behaviour was already present on GCC
4.5.3 already (-std=c++0x was necessary on that version) and is still present
on GCC 7.2.

I also tested Clang (on godbolt.org only) and notice that versions 3.0 up until
and including 3.5.1 have the same behaviour (succeed with -O0, fail with
complaint about statement expression at file scope with -O1). Clang 3.6 no
longer has this problem though.

Reply via email to