QA guys do not use the C compiler, it's not their job. They check the source with external tools, which have been certified for the validation. Those things are very expensive, usually 50K euro per license, so bugs inside the validator are *(1)supposed to be* very very rare.
(...)
Just a few thoughts about what you said. By no means are they hard truths, just my (and those of some teams I've worked with) opinion/rules/habits. I know every field, and potentially every company in each field, has a different approach and different policies.
- I think this would be a mistake that QA teams only deal with source code, and not with the build tools, and the artefacts of the builds, which are every bit as important to check. So in that matter, QA people not even looking at the result of building steps is not fully right IMO. Ultimately, the build artefacts end up in the final product, not source code. So the whole chain is important.
- You didn't exactly say that, but if you think this would rather be a job for the test teams, I don't quite agree with that. Test teams are for testing. Not for checking that the object code/binaries/whatever (the artefacts) are correctly built or if there are any message from the tools. I'd think it would be more of a job for QA. Of course this is just an organizational detail, but it's important regarding who is taking responsibility for what, or who even looks at what...
- Compilers and build tools in general are not just used by developers/engineers. They are ultimately used for the builds that are tested and eventually become released. So it would be a mistake that only engineers care about them and their outputs, as said above.
- Regarding source code only, no tools, however expensive they are, are perfect. So combining checks from different tools, including, why not, the compilers themselves, is always a good idea. Don't put all your eggs in the same basket.
- I again don't tolerate ANY warning from compilers and build tools in general. I've just checked in the MISRA-C recommendations, and it's not really even mentioned actually (I think it's more of a commonly seen company policy). But I think this is an important rule to enforce. Writing code that emits no warning at all from compilers is NOT hard, and leaving warnings, even if they are checked by someone at some point, is never a good idea. You end up having them pile up and unable to see which are false flags and which may be critical.
- Regarding the above point, you may think that expensive analysis tools run before builds can catch everything a compiler will and much more. As I hinted earlier, most often this is true, but in some cases, it may not. And when it happens, it's never, IMO, a good idea to just ignore what the build tools say, because you know, they must all be much dumber than the tools you spent an arm and a leg on. For the reasons mentioned above, and also for an additional one: even for perfectly conforming code, a given compiler could be issuing a warning that thus would seem a false flag, but could be an indication that said compiler sees some piece of code as ambiguous or problematic and could compile it incorrectly, maybe because the compiler itself has a bug or an implementation-defined behavior that is not caught by your expensive tools. So warnings should never be ignored IMO. You may be biased by your experience of using maybe almost exclusively certified compilers that have a very very low probability of exhibiting what I just said, but that's not always the case in all settings...
- Finally, and I know those expensive tools are REALLY f*cking expensive, but I still think it's a good idea that developers have access to them on a regular basis, and not just QA guys. That saves a lot of time and tremendously helps them get better. You don't need to have a license for each workstation. You can have one on a server and have it run on a regular basis on commited code (like several times a day), which not only makes engineers get better at what they do, but also saves a lot of time for everyone including QA people.
* Just a side comment regarding GCC warning flags:
Contrary to what it looks like, the -Wall option doesn't quite enable ALL warnings. For instance, last I checked, GCC with -Wall was not enabling the -Wconversion check that you have to enable as an additional option. This check is especially important when writing embedded code. (Very recent versions of GCC may have changed this, but I'm not sure they have, probably because it would suddenly spit out a LOT of warnings for existing code with sloppy conversions...)