[cfe-dev] CLang 2.1 doesn't catch assert within if
Guoping Long
longguoping at gmail.com
Fri Oct 7 22:09:39 PDT 2011
Many analyses are missing in tools/clang/lib/Analysis/
2011/10/7 Don Quixote de la Mancha <quixote at dulcineatech.com>
> I've been looking around for an analysis I could add to clang, but I
> used Xcode 4.1's clang to test this, which only has CLang 2.1. Could
> someone please check whether the current SVN catches this? I would
> check myself but I am having some trouble getting the current SVN to
> build. It's not the source code but some arcane problems with the
> configure shell scripts. If I can't figure out my configure problem
> soon I will ask about it here.
>
> If the current SVN does not catch this, I'd like to do the work to add
> the analysis myself. I've been following the list for a couple weeks
> and understand now what would be expected of my code for it to be
> accepted. I will open a Bugzilla bug to track my progress.
>
> You NEVER EVER want to do the following:
>
> if ( condition )
> assert( must_be_true );
>
> following_line();
>
> If NDEBUG is defined as for a release or profile build, you'll get the
> following in your preprocessed code, which will be very hard to debug:
>
> if ( condition )
> following_line();
>
> If you really must insist on putting an assert as the only line within
> an if statement, you MUST place it in a Basic Block:
>
> if ( condition ){
> assert( must_be_true );
> }
>
> Even better is to make the if statement part of the assert:
>
> assert( condition && must_be_true );
>
> Back in the day I wrote a new library to replace my client's old one.
> To test that my new library got the same results as his old one, he
> asked me to link his executable with both his old and my new library,
> and to compare the results of all the calls to each library. I don't
> recall why anymore but I actually made the mistake, then spent all day
> long tracking down my bug, as the executables and both libraries were
> very complex.
>
> I'm running Mac OS X Snow Leopard 10.6.8 on a MacBook Pro, Model
> Identifier MacBookPro1,1 (32-bit Core Duo, NOT 64-bit Core 2 Duo).
>
> $ clang --version
> Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
> Target: i386-apple-darwin10.8.0
> Thread model: posix
>
> $ gcc --version
> i686-apple-darwin10-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc.
> build 5658) (LLVM build 2335.15.00)
>
> $ gcc --pedantic -Wall -c assert_within_if.c
>
> This compile succeeds without any warnings.
>
> $ clang --analyze assert_within_if.c
>
> CLang doesn't print anything to the terminal. assert_within_if.plist
> doesn't contain any diagnostics.
>
> ====== Cut Here ======
> /* assert_within_if.c */
> #include <stdlib.h>
> #include <assert.h>
>
> int assert_within_if( int flag, int *pointer );
>
> int assert_within_if( int flag, int *pointer )
> {
> int result = 0;
>
> if ( flag )
> assert( NULL != pointer );
>
> result = *pointer;
>
> return result;
> }
>
> ====== Cut Here =====
>
> Ever Faithful,
>
> Don Quixote
> --
> Don Quixote de la Mancha
> Dulcinea Technologies Corporation
> Software of Elegance and Beauty
> http://www.dulcineatech.com
> quixote at dulcineatech.com
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20111007/ec9c54e5/attachment.html>
More information about the cfe-dev
mailing list