• =?UTF-8?Q?Re:_Flibble=e2=80=99s_Leap:_Why_Behavioral_Divergence_Imp?= =

    From Mike Terry@21:1/5 to Keith Thompson on Tue May 13 22:22:19 2025
    On 12/05/2025 05:37, Keith Thompson wrote:
    Richard Heathfield <rjh@cpax.org.uk> writes:
    On 12/05/2025 04:11, Keith Thompson wrote:
    Richard Heathfield <rjh@cpax.org.uk> writes:
    [...]
    ALL C compilers are required to diagnose ALL syntax errors and ALL
    constraint violations.
    Yes, all conforming C compilers are required to do that. (Well,
    strictly speaking they're only required to issue at least one diagnostic >>> for any translation unit that violates a syntax rule or constraint.)

    I was unintentionally ambiguous, for which I apologise.

    The point I sought to make is that there is no syntax error (or
    constraint violation) so trivial that a compiler is given licence not
    to issue a diagnostic it if it has no other reason so to do.

    That is, they are all capable of ticking the box that says 'must issue
    at least one diagnostic'.

    [...]

    In my experience, Microsoft's C compiler - although not perfect - is
    pretty good at following conformance rules. I'd be surprised to learn
    from a competent source that it misses a syntax error.
    I wouldn't, since few if any C compilers are conforming by default.

    I was talking about conforming mode, which IIRC (it's been a while) is
    invoked by -W4 (a warning level that I habitually used in the days
    when I still used Microsoft software).

    I've just tried 4 different C compilers (gcc, clang, and tcc
    on Ubuntu, MS Visual Studio 2022 on Windows), and none of them
    diagnosed a stray semicolon at file scope *by default*. gcc and
    clang can be persuaded to diagnose it. tcc, as far as I can tell,
    cannot; I don't believe it claims to be fully conforming in any mode.
    I wasn't able to get MSVS to diagnose it, but there could easily
    be an option that I'm missing.

    Could you crank MSVS up to -W4 (or whatever the max is these days) and
    try again? I hate to impose, but of course it's your own fault for
    qualifying as a competent source. ;-)

    It's "/W4". The default appears to be "/W3".

    At W4 or Wall I get a messages such as: 1>c:\products\source\scratch10\ctest.c(8): warning C4019: empty statement at global scope
    c:\products\source\scratch10\ctest.c(12): warning C4019: empty statement at global scope

    The help for the error code:


    <https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4019?view=msvc-170>


    With "/W4", or even "/Wall", it still doesn't diagnose a stray semicolon
    at file scope. (I wouldn't expect a warning option to be the
    incantation that makes the compiler conform to the standard.)

    Eh? On my system I got the above messages for stray semi-colons. I'm using VS2017.


    The "/Za" option is supposed to disable language extensions, but it
    complains that "'/Za' and '/std:c17' command-line options are
    incompatible".

    The implementation supports both C and C++. It seems to treat C as a second-class citizen. (I think, but I'm not sure, that a stray
    semicolon at file scope is legal in C++; it's called an
    "empty-declaration".)

    If it doesn't diagnose at its maximum warning level, then okay, ~I
    lose the syntax battle.

    I'd say that Microsoft's compiler loses the syntax battle.

    [Remainder read and snipped]


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Mike Terry@21:1/5 to Mike Terry on Tue May 13 22:45:27 2025
    On 13/05/2025 22:22, Mike Terry wrote:
    On 12/05/2025 05:37, Keith Thompson wrote:
    Richard Heathfield <rjh@cpax.org.uk> writes:
    On 12/05/2025 04:11, Keith Thompson wrote:
    Richard Heathfield <rjh@cpax.org.uk> writes:
    [...]
    ALL C compilers are required to diagnose ALL syntax errors and ALL
    constraint violations.
    Yes, all conforming C compilers are required to do that.  (Well,
    strictly speaking they're only required to issue at least one diagnostic >>>> for any translation unit that violates a syntax rule or constraint.)

    I was unintentionally ambiguous, for which I apologise.

    The point I sought to make is that there is no syntax error (or
    constraint violation) so trivial that a compiler is given licence not
    to issue a diagnostic it if it has no other reason so to do.

    That is, they are all capable of ticking the box that says 'must issue
    at least one diagnostic'.

    [...]

    In my experience, Microsoft's C compiler - although not perfect - is >>>>> pretty good at following conformance rules. I'd be surprised to learn >>>>> from a competent source that it misses a syntax error.
    I wouldn't, since few if any C compilers are conforming by default.

    I was talking about conforming mode, which IIRC (it's been a while) is
    invoked by -W4 (a warning level that I habitually used in the days
    when I still used Microsoft software).

    I've just tried 4 different C compilers (gcc, clang, and tcc
    on Ubuntu, MS Visual Studio 2022 on Windows), and none of them
    diagnosed a stray semicolon at file scope *by default*.  gcc and
    clang can be persuaded to diagnose it.  tcc, as far as I can tell,
    cannot; I don't believe it claims to be fully conforming in any mode.
    I wasn't able to get MSVS to diagnose it, but there could easily
    be an option that I'm missing.

    Could you crank MSVS up to -W4 (or whatever the max is these days) and
    try again? I hate to impose, but of course it's your own fault for
    qualifying as a competent source. ;-)

    It's "/W4".  The default appears to be "/W3".

    At W4 or Wall I get a messages such as: 1>c:\products\source\scratch10\ctest.c(8): warning C4019: empty statement at global scope
    c:\products\source\scratch10\ctest.c(12): warning C4019: empty statement at global scope

    The help for the error code:


    <https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4019?view=msvc-170>



    With "/W4", or even "/Wall", it still doesn't diagnose a stray semicolon
    at file scope.  (I wouldn't expect a warning option to be the
    incantation that makes the compiler conform to the standard.)

    Eh?  On my system I got the above messages for stray semi-colons.  I'm using VS2017.

    Oh right - I also had /Za set, and it seems it needs both /W4 and /Za. I don't have any /std:
    option as it doesn't seem to be valid for VS2017.



    The "/Za" option is supposed to disable language extensions, but it
    complains that "'/Za' and '/std:c17' command-line options are
    incompatible".

    The implementation supports both C and C++.  It seems to treat C as a
    second-class citizen.  (I think, but I'm not sure, that a stray
    semicolon at file scope is legal in C++; it's called an
    "empty-declaration".)

    If it doesn't diagnose at its maximum warning level, then okay, ~I
    lose the syntax battle.

    I'd say that Microsoft's compiler loses the syntax battle.

    [Remainder read and snipped]


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)