Skip to content
  1. Jul 27, 2012
  2. Jul 26, 2012
    • Jordan Rose's avatar
      [analyzer] CallEvent is no longer a value object. · 72ce8e2d
      Jordan Rose authored
      After discussion, the type-based dispatch was decided to be bad for
      maintenance and made it very easy for subtle bugs to creep in. Instead,
      we'll just be very careful when we do have to allocate these on the heap.
      
      llvm-svn: 160817
      72ce8e2d
    • Jakob Stoklund Olesen's avatar
      Eliminate a batch of uses of sub_ss and sub_sd in the X86 target. · ceee4a9d
      Jakob Stoklund Olesen authored
      These idempotent sub-register indices don't do anything --- They simply
      map XMM registers to themselves.  They no longer affect register classes
      either since the SubRegClasses field has been removed from Target.td.
      
      This patch replaces XMM->XMM EXTRACT_SUBREG and INSERT_SUBREG patterns
      with COPY_TO_REGCLASS patterns which simply become COPY instructions.
      
      The number of IMPLICIT_DEF instructions before register allocation is
      reduced, and that is the cause of the test case changes.
      
      llvm-svn: 160816
      ceee4a9d
    • Jordan Rose's avatar
      4f7df9be
    • Micah Villmow's avatar
      Add support for v16i32/v16i64 into the code generator. This is required for... · 7b473d9f
      Micah Villmow authored
      Add support for v16i32/v16i64 into the code generator. This is required for backends that use i32/i64 vectors for the getSetCCResultType function.
      
      llvm-svn: 160814
      7b473d9f
    • Chad Rosier's avatar
      Make comments in Debug.cpp and Debug.h consistent. Rename SetCurrentDebugType; · 7c427c40
      Chad Rosier authored
      Function names should be camel case, and start with a lower case letter.  No
      functional change intended.
      
      llvm-svn: 160813
      7c427c40
    • Howard Hinnant's avatar
      Update CREDITS.TXT · c2e93540
      Howard Hinnant authored
      llvm-svn: 160812
      c2e93540
    • Jordan Rose's avatar
      [analyzer] Don't crash on implicit statements inside initializers. · 25bc20f8
      Jordan Rose authored
      Our BugReporter knows how to deal with implicit statements: it looks in
      the ParentMap until it finds a parent with a valid location. However, since
      initializers are not in the body of a constructor, their sub-expressions are
      not in the ParentMap. That was easy enough to fix in AnalysisDeclContext.
      
      ...and then even once THAT was fixed, there's still an extra funny case
      of Objective-C object pointer fields under ARC, which are initialized with
      a top-level ImplicitValueInitExpr. To catch these cases,
      PathDiagnosticLocation will now fall back to the start of the current
      function if it can't find any other valid SourceLocations. This isn't great,
      but it's miles better than a crash.
      
      (All of this is only relevant when constructors and destructors are being
      inlined, i.e. under -cfg-add-initializers and -cfg-add-implicit-dtors.)
      
      llvm-svn: 160810
      25bc20f8
    • Jordan Rose's avatar
      [analyzer] Don't crash on array constructors and destructors. · 20edae87
      Jordan Rose authored
      This workaround is fairly lame: we simulate the first element's constructor
      and destructor and rely on the region invalidation to "initialize" the rest
      of the elements.
      
      llvm-svn: 160809
      20edae87
    • Jordan Rose's avatar
      [analyzer] Handle C++ member initializers and destructors. · 54529a34
      Jordan Rose authored
      This uses CFG to tell if a constructor call is for a member, and uses
      the member's region appropriately.
      
      llvm-svn: 160808
      54529a34
    • Jordan Rose's avatar
      [analyzer] Use the CFG to see if a constructor is for a local variable. · 05375eb4
      Jordan Rose authored
      Previously we were using ParentMap and crawling through the parent DeclStmt.
      This should be at least slightly cheaper (and is also more flexible).
      
      No (intended) functionality change.
      
      llvm-svn: 160807
      05375eb4
    • Jordan Rose's avatar
      [analyzer] Handle base class initializers and destructors. · b970505d
      Jordan Rose authored
      Most of the logic here is fairly simple; the interesting thing is that
      we now distinguish complete constructors from base or delegate constructors.
      We also make sure to cast to the base class before evaluating a constructor
      or destructor, since non-virtual base classes may behave differently.
      
      This includes some refactoring of VisitCXXConstructExpr and VisitCXXDestructor
      in order to keep ExprEngine.cpp as clean as possible (leaving the details for
      ExprEngineCXX.cpp).
      
      llvm-svn: 160806
      b970505d
    • Jordan Rose's avatar
      [analyzer] Variables with destructors are live until the destructor is run. · b3244566
      Jordan Rose authored
      Test case in the next commit, which enables destructors under certain
      circumstances.
      
      llvm-svn: 160805
      b3244566
    • Jordan Rose's avatar
      [analyzer] Show paths for destructor calls. · a4c0d21f
      Jordan Rose authored
      This modifies BugReporter and friends to handle CallEnter and CallExitEnd
      program points that came from implicit call CFG nodes (read: destructors).
      
      This required some extra handling for nested implicit calls. For example,
      the added multiple-inheritance test case has a call graph that looks like this:
      
      testMultipleInheritance3
        ~MultipleInheritance
          ~SmartPointer
          ~Subclass
            ~SmartPointer
              ***bug here***
      
      In this case we correctly notice that we started in an inlined function
      when we reach the CallEnter program point for the second ~SmartPointer.
      However, when we reach the next CallEnter (for ~Subclass), we were
      accidentally re-using the inner ~SmartPointer call in the diagnostics.
      
      Rather than guess if we saw the corresponding CallExitEnd based on the
      contents of the active path, we now just ask the PathDiagnostic if there's
      any known stack before popping off the top path.
      
      (A similar issue could have occured without multiple inheritance, but there
      wasn't a test case for it.)
      
      llvm-svn: 160804
      a4c0d21f
    • Jordan Rose's avatar
      [analyzer] Inline ctors + dtors when the CFG is built for them. · c5d85244
      Jordan Rose authored
      At the very least this means initializer nodes for constructors and
      automatic object destructors are present in the CFG.
      
      llvm-svn: 160803
      c5d85244
    • Jordan Rose's avatar
      [analyzer] PostImplicitCall can also occur between CFGElements. · 443ec10e
      Jordan Rose authored
      This avoids an assertion crash when we invalidate on a destructor call
      instead of inlining it.
      
      llvm-svn: 160802
      443ec10e
Loading