Related articles |
---|
Semantic Checking - C johnvoltaire@gmail.com (johnvoltaire) (2005-01-30) |
Re: Semantic Checking - C nmm1@cus.cam.ac.uk (2005-02-03) |
Re: Semantic Checking - C torbenm@diku.dk (2005-02-03) |
Re: Semantic Checking - C jeremy.wright@microfocus.com (Jeremy Wright) (2005-02-03) |
Re: Semantic Checking - C jacob@jacob.remcomp.fr (jacob navia) (2005-02-03) |
Re: Semantic Checking - C neal.wang@gmail.com (Neal Wang) (2005-02-03) |
Re: Semantic Checking - C foobar@nowhere.void (Tommy Thorn) (2005-02-03) |
Re: Semantic Checking - C hannah@schlund.de (2005-02-11) |
From: | Tommy Thorn <foobar@nowhere.void> |
Newsgroups: | comp.compilers |
Date: | 3 Feb 2005 22:44:51 -0500 |
Organization: | Compilers Central |
References: | 05-01-098 |
Keywords: | debug, semantics |
Posted-Date: | 03 Feb 2005 22:44:51 EST |
There is only so much heuristics can do. Better results can be had when
a bit of user annotation is added. Many project do this, Linus' sparse
checker is one such example.
It's quite common to write a general macros which when instantiated
results in unused variables, unreached code, lots of constant
expressions, etc. and without a richer annotation you going to get a lot
of false negatives, turning the warnings into a nusance rather than a
help (just like gcc moronic complaints about "a && b || c").
> Common semantic errors in C language:
A subset of them are considered static (syntax or type) errors and are
already caught be most compilers:
> 1. Use of function without function prototypes
> 13. The number and types of arguments in a function call must be the
> same as the number and types of the prototypes
> 14. A return statement must not have a return value unless it appears
> in the function prototype that is declared to return a value
> 15. Break statements appear outside enclosing constructs where a break
> statement may appear
> 16. Elements of enumerated types are repeated
> 17. Variable names appear in the same lexical scope
> 18. Labels are repeated
These are nearly never occur statically:
> 3. Division by zero
> 8. Subscript out of bounds
These are no always errors (think parameterizable programs). Some are
even very common (5 & 7)
> 2. Code with no effect (dead code)
> 4. Use of functions and variables which are defined but not used
> 5. Use of functions and variables with defined arguments that are
> never used
> 6. Use of functions and variables that return either with or without
> any assigned value
> 7. Use of functions and variables that return values that are never
> used
> 9. Booleans that always evaluate true or evaluate false
> 11. Statements that cannot be reached during execution
> 12. No identifiers or variables are used twice in the same block or
> scope
This is not an error, except maybe in 1st year students programs (the
"cannot be entered" is an instance of unreachable code ~ 2):
> 10. Checking of infinite loops as well as loops that cannot be exited
> or entered
Tommy
Return to the
comp.compilers page.
Search the
comp.compilers archives again.