Skip to content
  1. Feb 14, 2009
    • Ted Kremenek's avatar
      Static analyzer: · e68c0fcf
      Ted Kremenek authored
      - Added a new 'node builder' class called GRStmtNodeBuilderRef (name may
        change). This is essentially a smart reference to a GRStmtNodeBuilder object
        that keeps track of the current context (predecessor node, GRExprEngine
        object, etc.) The idea is to gradually simplify the interface between
        GRExprEngine and GRTransferFuncs using this new builder (i.e., passing 1
        argument instead of 5). It also handles some of the "auto-transition" for node
        creation, simplifying some of the logic in GRExprEngine itself.
      
      - Used GRStmtBuilderRef to replace GRTransferFuncs::EvalStore with
        GRTransferFuncs::EvalBind. The new EvalBind method will be used at any
        arbitrary places where a binding between a location and value takes place.
        Moreover, GRTransferFuncs no longer has the responsibility to request
        StoreManager to do the binding; this is now in GRExprEngine::EvalBind. All
        GRTransferFuncs::EvalBind does is checker-specific logic (which can be a
        no-op).
      
      llvm-svn: 64525
      e68c0fcf
    • Anders Carlsson's avatar
      Fix an error in _mm_loaddup_pd that Eli noticed. · 30c22d86
      Anders Carlsson authored
      llvm-svn: 64522
      30c22d86
    • Anders Carlsson's avatar
      Add the nodebug attribute to intrinsics · 823c02ea
      Anders Carlsson authored
      llvm-svn: 64519
      823c02ea
    • Douglas Gregor's avatar
      Add test case to insure that implicit builtin declarations for C library... · 2de3e31c
      Douglas Gregor authored
      Add test case to insure that implicit builtin declarations for C library functions aren't created in C++
      
      llvm-svn: 64513
      2de3e31c
    • Douglas Gregor's avatar
      Extend builtin "attribute" syntax to include a notation for · ac5d4c5f
      Douglas Gregor authored
      printf-like functions, both builtin functions and those in the
      C library. The function-call checker now queries this attribute do
      determine if we have a printf-like function, rather than scanning
      through the list of "known functions IDs". However, there are 5
      functions they are not yet "builtins", so the function-call checker
      handles them specifically still:
      
        - fprintf and vfprintf: the builtins mechanism cannot (yet)
          express FILE* arguments, so these can't be encoded.
        - NSLog: the builtins mechanism cannot (yet) express NSString*
          arguments, so this (and NSLogv) can't be encoded.
        - asprintf and vasprintf: these aren't part of the C99 standard
          library, so we really shouldn't be defining them as builtins in
          the general case (and we don't seem to have the machinery to make
          them builtins only on certain targets and depending on whether
          extensions are enabled).
      
      llvm-svn: 64512
      ac5d4c5f
    • Ted Kremenek's avatar
      Update checker build. · 10251c91
      Ted Kremenek authored
      llvm-svn: 64507
      10251c91
    • Chris Lattner's avatar
      fix rdar://6586493, a bug in codegen of the GNU · cd7bc144
      Chris Lattner authored
      missing-?:-true-value extension.
      
      llvm-svn: 64505
      cd7bc144
    • Douglas Gregor's avatar
      Implicitly declare certain C library functions (malloc, strcpy, memmove, · b9063fc1
      Douglas Gregor authored
      etc.) when we perform name lookup on them. This ensures that we
      produce the correct signature for these functions, which has two
      practical impacts:
      
        1) When we're supporting the "implicit function declaration" feature
        of C99, these functions will be implicitly declared with the right
        signature rather than as a function returning "int" with no
        prototype. See PR3541 for the reason why this is important (hint:
        GCC always predeclares these functions).
       
        2) If users attempt to redeclare one of these library functions with
        an incompatible signature, we produce a hard error.
      
      This patch does a little bit of work to give reasonable error
      messages. For example, when we hit case #1 we complain that we're
      implicitly declaring this function with a specific signature, and then
      we give a note that asks the user to include the appropriate header
      (e.g., "please include <stdlib.h> or explicitly declare 'malloc'"). In
      case #2, we show the type of the implicit builtin that was incorrectly
      declared, so the user can see the problem. We could do better here:
      for example, when displaying this latter error message we say
      something like:
      
        'strcpy' was implicitly declared here with type 'char *(char *, char
        const *)'
      
      but we should really print out a fake code line showing the
      declaration, like this:
      
        'strcpy' was implicitly declared here as:
      
          char *strcpy(char *, char const *)
      
      This would also be good for printing built-in candidates with C++
      operator overloading.
      
      The set of C library functions supported by this patch includes all
      functions from the C99 specification's <stdlib.h> and <string.h> that
      (a) are predefined by GCC and (b) have signatures that could cause
      codegen issues if they are treated as functions with no prototype
      returning and int. Future work could extend this set of functions to
      other C library functions that we know about.
      
      llvm-svn: 64504
      b9063fc1
    • Chris Lattner's avatar
      add an assertion from Alexei Svitkine! · 190f64e9
      Chris Lattner authored
      llvm-svn: 64503
      190f64e9
  2. Feb 13, 2009
Loading