Skip to content
Snippets Groups Projects
  1. Jul 13, 2015
  2. Jul 12, 2015
  3. Jul 11, 2015
  4. Jul 10, 2015
    • Jordan Rose's avatar
      [analyzer] When forced to fake a block type, do it correctly. · 22ea838f
      Jordan Rose authored
      BlockDecl has a poor AST representation because it doesn't carry its type
      with it. Instead, the containing BlockExpr has the full type. This almost
      never matters for the analyzer, but if the block decl contains static
      local variables we need to synthesize a region to put them in, and this
      region will necessarily not have the right type.
      
      Even /that/ doesn't matter, unless
      
      (1) the block calls the function or method containing the block, and
      (2) the value of the block expr is used in some interesting way.
      
      In this case, we actually end up needing the type of the block region,
      and it will be set to our synthesized type. It turns out we've been doing
      a terrible job faking that type -- it wasn't a block pointer type at all.
      This commit fixes that to at least guarantee a block pointer type, using
      the signature written by the user if there is one.
      
      This is not really a correct answer because the block region's type will
      /still/ be wrong, but further efforts to make this right in the analyzer
      would probably be silly. We should just change the AST.
      
      rdar://problem/21698099
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241944 91177308-0d34-0410-b5e6-96231b3b80d8
      22ea838f
    • David Majnemer's avatar
      [MS ABI] Don't generates code for unreferenced inline definitions of library builtins · 79bfc7f3
      David Majnemer authored
      We should only consider declarations which were written, implicit
      declarations shouldn't be considered.
      
      This fixes PR24084.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241941 91177308-0d34-0410-b5e6-96231b3b80d8
      79bfc7f3
    • Richard Smith's avatar
      [modules] Fix "prefer own module over others" rule when selecting a module for... · 24e9b507
      Richard Smith authored
      [modules] Fix "prefer own module over others" rule when selecting a module for a header to work in the presence of module hierarchy.
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241936 91177308-0d34-0410-b5e6-96231b3b80d8
      24e9b507
    • Evgeniy Stepanov's avatar
      Add an experimental flag -fsanitize-memory-use-after-dtor. · d0137867
      Evgeniy Stepanov authored
      This flag will enable detection of use-after-destructor (but before
      memory deallocation) bugs. No actual functionality yet.
      
      https://code.google.com/p/address-sanitizer/issues/detail?id=73
      
      Patch by Naomi Musgrave.
      
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241935 91177308-0d34-0410-b5e6-96231b3b80d8
      d0137867
    • Artem Belevich's avatar
      Changed Driver::getToolChain() to use Triple as an argument. · a7d8f474
      Artem Belevich authored
      Differential Revision: http://reviews.llvm.org/D11105
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241934 91177308-0d34-0410-b5e6-96231b3b80d8
      a7d8f474
    • Akira Hatanaka's avatar
      [inlineasm] Attach readonly and readnone to inline-asm instructions. · 7812f26e
      Akira Hatanaka authored
      Previously, clang/llvm treated inline-asm instructions conservatively,
      choosing not to eliminate the instructions or hoisting them out of a loop
      even when it was safe to do so. This commit makes changes to attach a
      readonly or readnone attribute to an inline-asm instruction, which enables
      passes such as LICM and EarlyCSE to move or optimize away the instruction.
      
      rdar://problem/11358192
      
      Differential Revision: http://reviews.llvm.org/D10546
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241930 91177308-0d34-0410-b5e6-96231b3b80d8
      7812f26e
    • Yaron Keren's avatar
      Teach clang that -no-pthread is a valid command line option · a474e699
      Yaron Keren authored
      The winpthreads library in mingw-w64 passes -no-pthread when building
      since pthreads is not available to build itself and pthreads it is linked 
      by default. clang does not link to pthreads by default but did error on 
      unknown -no-pthread option thus stopping the winpthreads build.
      
      http://reviews.llvm.org/D11087
      
      Patch by Martell Malone.
      
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241929 91177308-0d34-0410-b5e6-96231b3b80d8
      a474e699
    • Eric Christopher's avatar
      Refactor PPC ABI handling to accept and silently ignore -mabi=altivec. · 473abe52
      Eric Christopher authored
      All of the ABIs we support are altivec style anyhow and so the option
      doesn't make much sense with the modern ABIs. We could make this a more
      noisy ignore, but it would break builds for projects that just pass
      it along by default because of historical reasons.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241925 91177308-0d34-0410-b5e6-96231b3b80d8
      473abe52
    • Eric Christopher's avatar
      Fix a couple of typos: specifc->specific. · 5255f7b5
      Eric Christopher authored
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241924 91177308-0d34-0410-b5e6-96231b3b80d8
      5255f7b5
    • Diego Novillo's avatar
      Factor PGO and coverage flag processing out of Clang::ConstructJob · a1bd00dc
      Diego Novillo authored
      The function is massively large and GCC is emitting stack overflow
      errors when building it (stack, as counted by the compiler, grows to
      more than 16Kb).
      
      The new flag processing logic added in r241825 took it over the limit.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241918 91177308-0d34-0410-b5e6-96231b3b80d8
      a1bd00dc
    • Ulrich Weigand's avatar
      Respect alignment of nested bitfields · 3517074e
      Ulrich Weigand authored
      tools/clang/test/CodeGen/packed-nest-unpacked.c contains this test:
      
      struct XBitfield {
        unsigned b1 : 10;
        unsigned b2 : 12;
        unsigned b3 : 10;
      };
      struct YBitfield {
        char x;
        struct XBitfield y;
      } __attribute((packed));
      struct YBitfield gbitfield;
      
      unsigned test7() {
        // CHECK: @test7
        // CHECK: load i32, i32* getelementptr inbounds (%struct.YBitfield, %struct.YBitfield* @gbitfield, i32 0, i32 1, i32 0), align 4
        return gbitfield.y.b2;
      }
      
      The "align 4" is actually wrong.  Accessing all of "gbitfield.y" as a single
      i32 is of course possible, but that still doesn't make it 4-byte aligned as
      it remains packed at offset 1 in the surrounding gbitfield object.
      
      This alignment was changed by commit r169489, which also introduced changes
      to bitfield access code in CGExpr.cpp.  Code before that change used to take
      into account *both* the alignment of the field to be accessed within the
      current struct, *and* the alignment of that outer struct itself; this logic
      was removed by the above commit.
      
      Neglecting to consider both values can cause incorrect code to be generated
      (I've seen an unaligned access crash on SystemZ due to this bug).
      
      In order to always use the best known alignment value, this patch removes
      the CGBitFieldInfo::StorageAlignment member and replaces it with a
      StorageOffset member specifying the offset from the start of the surrounding
      struct to the bitfield's underlying storage.  This offset can then be combined
      with the best-known alignment for a bitfield access lvalue to determine the
      alignment to use when accessing the bitfield's storage.
      
      Differential Revision: http://reviews.llvm.org/D11034
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241916 91177308-0d34-0410-b5e6-96231b3b80d8
      3517074e
    • Adrian Prantl's avatar
      Add a missing dependency to unittests/Frontend. · 8813b5b2
      Adrian Prantl authored
      PR24067.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241915 91177308-0d34-0410-b5e6-96231b3b80d8
      8813b5b2
    • Nemanja Ivanovic's avatar
      bfb6cedb
    • Daniel Jasper's avatar
      clang-format: [JS] Assign proper penalties when breaking a type annotation · e4dffdc2
      Daniel Jasper authored
      Before:
        class Test {
          aaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa:
                               aaaaaaaaaaaaaaaaaaaaaaaa): aaaaaaaaaaaaaaaaaaaaaa {}
        }
      
      After:
        class Test {
          aaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaaaaaa):
              aaaaaaaaaaaaaaaaaaaaaa {}
        }
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241908 91177308-0d34-0410-b5e6-96231b3b80d8
      e4dffdc2
    • Nemanja Ivanovic's avatar
      Add missing builtins to altivec.h for ABI compliance (vol. 3) · ca355c9f
      Nemanja Ivanovic authored
      This patch corresponds to review:
      http://reviews.llvm.org/D10972
      
      Fix for the handling of dependent features that are enabled by default
      on some CPU's (such as -mvsx, -mpower8-vector).
      
      Also provides a number of new interfaces or fixes existing ones in
      altivec.h.
      
      Changed signatures to conform to ABI:
      vector short vec_perm(vector signed short, vector signed short, vector unsigned char)
      vector int vec_perm(vector signed int, vector signed int, vector unsigned char)
      vector long long vec_perm(vector signed long long, vector signed long long, vector unsigned char)
      vector signed char vec_sld(vector signed char, vector signed char, const int)
      vector unsigned char vec_sld(vector unsigned char, vector unsigned char, const int)
      vector bool char vec_sld(vector bool char, vector bool char, const int)
      vector unsigned short vec_sld(vector unsigned short, vector unsigned short, const int)
      vector signed short vec_sld(vector signed short, vector signed short, const int)
      vector signed int vec_sld(vector signed int, vector signed int, const int)
      vector unsigned int vec_sld(vector unsigned int, vector unsigned int, const int)
      vector float vec_sld(vector float, vector float, const int)
      vector signed char vec_splat(vector signed char, const int)
      vector unsigned char vec_splat(vector unsigned char, const int)
      vector bool char vec_splat(vector bool char, const int)
      vector signed short vec_splat(vector signed short, const int)
      vector unsigned short vec_splat(vector unsigned short, const int)
      vector bool short vec_splat(vector bool short, const int)
      vector pixel vec_splat(vector pixel, const int)
      vector signed int vec_splat(vector signed int, const int)
      vector unsigned int vec_splat(vector unsigned int, const int)
      vector bool int vec_splat(vector bool int, const int)
      vector float vec_splat(vector float, const int)
      
      Added a VSX path to:
      vector float vec_round(vector float)
      
      Added interfaces:
      vector signed char vec_eqv(vector signed char, vector signed char)
      vector signed char vec_eqv(vector bool char, vector signed char)
      vector signed char vec_eqv(vector signed char, vector bool char)
      vector unsigned char vec_eqv(vector unsigned char, vector unsigned char)
      vector unsigned char vec_eqv(vector bool char, vector unsigned char)
      vector unsigned char vec_eqv(vector unsigned char, vector bool char)
      vector signed short vec_eqv(vector signed short, vector signed short)
      vector signed short vec_eqv(vector bool short, vector signed short)
      vector signed short vec_eqv(vector signed short, vector bool short)
      vector unsigned short vec_eqv(vector unsigned short, vector unsigned short)
      vector unsigned short vec_eqv(vector bool short, vector unsigned short)
      vector unsigned short vec_eqv(vector unsigned short, vector bool short)
      vector signed int vec_eqv(vector signed int, vector signed int)
      vector signed int vec_eqv(vector bool int, vector signed int)
      vector signed int vec_eqv(vector signed int, vector bool int)
      vector unsigned int vec_eqv(vector unsigned int, vector unsigned int)
      vector unsigned int vec_eqv(vector bool int, vector unsigned int)
      vector unsigned int vec_eqv(vector unsigned int, vector bool int)
      vector signed long long vec_eqv(vector signed long long, vector signed long long)
      vector signed long long vec_eqv(vector bool long long, vector signed long long)
      vector signed long long vec_eqv(vector signed long long, vector bool long long)
      vector unsigned long long vec_eqv(vector unsigned long long, vector unsigned long long)
      vector unsigned long long vec_eqv(vector bool long long, vector unsigned long long)
      vector unsigned long long vec_eqv(vector unsigned long long, vector bool long long)
      vector float vec_eqv(vector float, vector float)
      vector float vec_eqv(vector bool int, vector float)
      vector float vec_eqv(vector float, vector bool int)
      vector double vec_eqv(vector double, vector double)
      vector double vec_eqv(vector bool long long, vector double)
      vector double vec_eqv(vector double, vector bool long long)
      vector bool long long vec_perm(vector bool long long, vector bool long long, vector unsigned char)
      vector double vec_round(vector double)
      vector double vec_splat(vector double, const int)
      vector bool long long vec_splat(vector bool long long, const int)
      vector signed long long vec_splat(vector signed long long, const int)
      vector unsigned long long vec_splat(vector unsigned long long,
      vector bool int vec_sld(vector bool int, vector bool int, const int)
      vector bool short vec_sld(vector bool short, vector bool short, const int)
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241904 91177308-0d34-0410-b5e6-96231b3b80d8
      ca355c9f
    • NAKAMURA Takumi's avatar
    • Benjamin Kramer's avatar
      2b3061c0
    • Benjamin Kramer's avatar
      Reapply test for r241811 with a fix for msvc compat mode. · 4c024e56
      Benjamin Kramer authored
      Delayed template parsing interferes with code completion, just distable it for
      this test. This reverts r241811.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241899 91177308-0d34-0410-b5e6-96231b3b80d8
      4c024e56
    • Ulrich Weigand's avatar
      Respect alignment when loading up a coerced function argument · 4c911d0a
      Ulrich Weigand authored
      Code in CGCall.cpp that loads up function arguments that need to be
      coerced to a different type may in some cases ignore the fact that
      the source of the argument is not naturally aligned. This may cause
      incorrect code to be generated. In some places in CreateCoercedLoad,
      we already have setAlignment calls to address this, but I ran into one
      where it was missing, causing wrong code generation on SystemZ.
      
      However, in that location, we do not actually know what alignment of
      the source location we can rely on; the callers do not pass anything
      to this routine. This is already an issue in other places in
      CreateCoercedLoad; and the same problem exists for CreateCoercedStore.
      
      To avoid pessimising code, and to fix the FIXMEs already in place,
      this patch also adds an alignment argument to the CreateCoerced*
      routines and uses it instead of forcing an alignment of 1. The
      callers are changed to pass in the best information they have.
      
      This actually requires changes in a number of existing test cases
      since we now get better alignment in many places.
      
      Differential Revision: http://reviews.llvm.org/D11033
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241898 91177308-0d34-0410-b5e6-96231b3b80d8
      4c911d0a
    • Daniel Jasper's avatar
      Re-use a single SmallString instance to reduce the stack frame size · 2e8f7e94
      Daniel Jasper authored
      In certain builds (msan), this can otherwise exceed the stack frame
      limit set for certain environments.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241894 91177308-0d34-0410-b5e6-96231b3b80d8
      2e8f7e94
    • Daniel Jasper's avatar
      Remove test that tests referring to the current working directory. You · 27b95a6f
      Daniel Jasper authored
      cannot assume that the current working directory is writable in all test
      environments. I don't know a better way to write this test of hand, lets
      discuss. Possibly, a better option would be to put these together with
      other test testing the driver directly.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241885 91177308-0d34-0410-b5e6-96231b3b80d8
      27b95a6f
    • NAKAMURA Takumi's avatar
      Revert test lines added in r241811, "[CodeCompletion] Don't crash on member... · 115ca088
      NAKAMURA Takumi authored
      Revert test lines added in r241811, "[CodeCompletion] Don't crash on member inits of templated constructors.", for now.
      
      It doesn't pass for targeting MS mode.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241882 91177308-0d34-0410-b5e6-96231b3b80d8
      115ca088
Loading