Remix.run Logo
▲ 0c3ca83 2 days ago

Where do you think the static analyzers are baked into for C?

    gcc -fanalyze ...
    clang -fsanitize=address ...
    etc
▲William_BB 2 days ago | parent | next [-]

I meant static analyzers like clang-tidy and cppcheck. `-fanalyze` I suppose is a fair comparison, but `fsanitize` is not since it's not even static

▲0c3ca83 2 days ago | parent [-]

Yes. Both clang and GCC come with static analyzers built in. Clangs supports whole program static analysis.

▲logicchains 2 days ago | parent | prev | next [-]

Those aren't static analyzers, they're dynamic analyzers; they only catch issues at runtime.

▲0c3ca83 2 days ago | parent [-]

GCC's -fanalyze, and clang's `--analyze` both run static analyzers.

▲musicale 2 days ago | parent | prev | next [-]

macos clang (at least) also includes

    clang -fbounds-safety
this is dynamic/runtime checking, but still very useful!
▲metaltyphoon 2 days ago | parent | prev [-]

If this is such a good default, why make me type `-fsanatize=address? Why isn't this the default when not doing "release mode"?

▲William_BB 2 days ago | parent | next [-]

The obvious answer is that I don't want to pay for these checks at runtime and can catch most of these bugs at test time. There are definitely use cases where that's acceptable.

▲woodruffw 2 days ago | parent | prev | next [-]

It adds nontrivial runtime cost. It’s also not a perfect mitigation (there are plenty of unsound patterns that ASan, UBSan, and TSan won’t catch).

▲0c3ca83 2 days ago | parent | prev [-]

Good question. How much of a slowdown are you willing to accept on deployed systems?

▲musicale 2 days ago | parent [-]

Are "deployed systems" running "release mode"?