]> granicus.if.org Git - clang/log
clang
6 years agoRevert "[Sema] Fix PR35832 - Ambiguity accessing anonymous struct/union with multiple...
Eric Fiselier [Sun, 8 Apr 2018 06:05:33 +0000 (06:05 +0000)]
Revert "[Sema] Fix PR35832 - Ambiguity accessing anonymous struct/union with multiple bases."

This reverts commit r329519. There are some unaddressed test failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329520 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Fix PR35832 - Ambiguity accessing anonymous struct/union with multiple bases.
Eric Fiselier [Sun, 8 Apr 2018 05:50:01 +0000 (05:50 +0000)]
[Sema] Fix PR35832 - Ambiguity accessing anonymous struct/union with multiple bases.

Summary:
Currently clang doesn't do qualified lookup when building indirect field decl references. This causes ambiguity when the field is in a base class to which there are multiple valid paths  even though a qualified name is used.

For example:
```
class B {
protected:
 int i;
 union { int j; };
};

class X : public B { };
class Y : public B { };

class Z : public X, public Y {
 int a() { return X::i; } // works
 int b() { return X::j; } // fails
};
```

Reviewers: rsmith, aaron.ballman, rjmccall

Reviewed By: rjmccall

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45411

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329519 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Remove dead code in BuildAnonymousStructUnionMemberReference. NFCI
Eric Fiselier [Sun, 8 Apr 2018 05:12:55 +0000 (05:12 +0000)]
[Sema] Remove dead code in BuildAnonymousStructUnionMemberReference. NFCI

Summary:
This patch cleans up a bunch of dead or unused code in BuildAnonymousStructUnionMemberReference.

The dead code was a branch that built a new CXXThisExpr when we weren't given a base object expression or base variable.
However, BuildAnonymousFoo has only two callers. One of which always builds a base object expression first, the second only calls when the IndirectFieldDecl is not a C++ class member. Even within C this branch seems entirely unused.

I tried diligently to write a test which hit it with no success.

This patch removes the branch and replaces it with an assertion that we were given either a base object expression or a base variable.

Reviewers: rsmith, aaron.ballman, majnemer, rjmccall

Reviewed By: rjmccall

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45410

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329518 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Fix PR22637 - IndirectFieldDecl's discard qualifiers during template instantia...
Eric Fiselier [Sun, 8 Apr 2018 05:11:59 +0000 (05:11 +0000)]
[Sema] Fix PR22637 - IndirectFieldDecl's discard qualifiers during template instantiation.

Summary:
Currently Clang fails to propagate qualifiers from the `CXXThisExpr` to the rebuilt `FieldDecl` for IndirectFieldDecls. For example:

```
template <class T> struct Foo {
  struct { int x; };
  int y;
  void foo() const {
      static_assert(__is_same(int const&, decltype((y))));
      static_assert(__is_same(int const&, decltype((x)))); // assertion fails
  }
};
template struct Foo<int>;
```

The fix is to delegate rebuilding of the MemberExpr to `BuildFieldReferenceExpr` which correctly propagates the qualifiers.

Reviewers: rsmith, lebedev.ri, aaron.ballman, bkramer, rjmccall

Reviewed By: rjmccall

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45412

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329517 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[libclang] Add clang_File_tryGetRealPathName
Fangrui Song [Sat, 7 Apr 2018 20:50:35 +0000 (20:50 +0000)]
[libclang] Add clang_File_tryGetRealPathName

Summary:
clang_getFileName() may return a path relative to WorkingDir.
On Arch Linux, during clang_indexTranslationUnit(), clang_getFileName() on
CXIdxIncludedIncludedFileInfo::file may return
"/../lib64/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/string",
for `#include <string>`.

I presume WorkingDir is somehow changed to /usr/lib or /usr/include and
clang_getFileName() returns a path relative to WorkingDir.

clang_File_tryGetRealPathName() returns "/usr/include/c++/7.3.0/string"
which is more useful for the indexer in this case.

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D42893

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329515 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoGeneralize the swiftcall API since being passed indirectly isn't
John McCall [Sat, 7 Apr 2018 20:16:47 +0000 (20:16 +0000)]
Generalize the swiftcall API since being passed indirectly isn't
C++-specific anymore.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329513 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Driver] Update GCC libraries detection logic for Gentoo.
Manoj Gupta [Sat, 7 Apr 2018 19:59:58 +0000 (19:59 +0000)]
[Driver] Update GCC libraries detection logic for Gentoo.

Summary:
1. Find GCC's LDPATH from the actual GCC config file.
2. Avoid picking libraries from a similar named tuple if the exact
   tuple is installed.

Reviewers: mgorny, chandlerc, thakis, rnk

Reviewed By: mgorny, rnk

Subscribers: cfe-commits, mgorny

Differential Revision: https://reviews.llvm.org/D45233

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329512 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAllow equality comparisons between block pointers and
John McCall [Sat, 7 Apr 2018 17:42:06 +0000 (17:42 +0000)]
Allow equality comparisons between block pointers and
block-pointer-compatible ObjC object pointer types.

Patch by Dustin Howett!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329508 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Extend -Wself-assign and -Wself-assign-field to warn on overloaded self-assign...
Roman Lebedev [Sat, 7 Apr 2018 10:39:21 +0000 (10:39 +0000)]
[Sema] Extend -Wself-assign and -Wself-assign-field to warn on overloaded self-assignment (classes)

Summary:
This has just bit me, so i though it would be nice to avoid that next time :)
Motivational case:
  https://godbolt.org/g/cq9UNk
Basically, it's likely to happen if you don't like shadowing issues,
and use `-Wshadow` and friends. And it won't be diagnosed by clang.

The reason is, these self-assign diagnostics only work for builtin assignment
operators. Which makes sense, one could have a very special operator=,
that does something unusual in case of self-assignment,
so it may make sense to not warn on that.

But while it may be intentional in some cases, it may be a bug in other cases,
so it would be really great to have some diagnostic about it...

Reviewers: aaron.ballman, rsmith, rtrieu, nikola, rjmccall, dblaikie

Reviewed By: rjmccall

Subscribers: EricWF, lebedev.ri, thakis, Quuxplusone, cfe-commits

Differential Revision: https://reviews.llvm.org/D44883

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329493 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoSort source lists in lib/StaticAnalyzer.
Nico Weber [Sat, 7 Apr 2018 04:25:01 +0000 (04:25 +0000)]
Sort source lists in lib/StaticAnalyzer.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329481 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoMake CodeGen depend just once on clangAnalysis.
Nico Weber [Sat, 7 Apr 2018 03:29:47 +0000 (03:29 +0000)]
Make CodeGen depend just once on clangAnalysis.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329477 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRemove another unnecessary -I flag passed to clang-tblgen.
Nico Weber [Sat, 7 Apr 2018 01:34:36 +0000 (01:34 +0000)]
Remove another unnecessary -I flag passed to clang-tblgen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329476 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoGeneralize test for 32-bit targets.
Richard Smith [Sat, 7 Apr 2018 00:28:32 +0000 (00:28 +0000)]
Generalize test for 32-bit targets.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329467 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRecommit r329442: Generate Libclang invocation reproducers using a new
Alex Lorenz [Sat, 7 Apr 2018 00:03:27 +0000 (00:03 +0000)]
Recommit r329442: Generate Libclang invocation reproducers using a new
-cc1gen-reproducer driver option

The recommit fixes:
- An MSAN failure (CCPrintOptions wasn't initialized in the Driver)
- Ensures that the strings in the libclang invocation files are escaped

Original message:

This commit is a follow up to the previous work that recorded Libclang invocations
into temporary files: r319702.

It adds a new -cc1 mode to clang: -cc1gen-reproducer. The goal of this mode is to generate
Clang reproducer files for Libclang tool invocation. The JSON format in the invocation
files is not really intended to be stable, so Libclang and Clang should be of the same version
when generating reproducers.
The new mode emits the information about the temporary files and Libclang-specific information
to stdout using JSON.

rdar://35322614

Differential Revision: https://reviews.llvm.org/D40983

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329465 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRemove two unnecessary -I flags passed to clang-tblgen.
Nico Weber [Fri, 6 Apr 2018 23:36:50 +0000 (23:36 +0000)]
Remove two unnecessary -I flags passed to clang-tblgen.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329464 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoDon't assume constructors return void.
Richard Smith [Fri, 6 Apr 2018 20:06:02 +0000 (20:06 +0000)]
Don't assume constructors return void.

Should fix ARM buildbot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329449 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert r329442 "Generate Libclang invocation reproducers using a new
Alex Lorenz [Fri, 6 Apr 2018 19:45:29 +0000 (19:45 +0000)]
Revert r329442 "Generate Libclang invocation reproducers using a new
-cc1gen-reproducer driver option"

The tests are failing on some bots

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329447 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "[analyzer] Remove an unused variable"
George Karpenkov [Fri, 6 Apr 2018 19:14:05 +0000 (19:14 +0000)]
Revert "[analyzer] Remove an unused variable"

This reverts commit 2fa3e3edc4ed6547cc4ce46a8c79d1891a5b3b36.

Removed the wrong variable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329445 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Remove an unused variable
George Karpenkov [Fri, 6 Apr 2018 19:03:43 +0000 (19:03 +0000)]
[analyzer] Remove an unused variable

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329444 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoGenerate Libclang invocation reproducers using a new -cc1gen-reproducer
Alex Lorenz [Fri, 6 Apr 2018 18:30:14 +0000 (18:30 +0000)]
Generate Libclang invocation reproducers using a new -cc1gen-reproducer
driver option

This commit is a follow up to the previous work that recorded Libclang invocations
into temporary files: r319702.

It adds a new -cc1 mode to clang: -cc1gen-reproducer. The goal of this mode is to generate
Clang reproducer files for Libclang tool invocation. The JSON format in the invocation
files is not really intended to be stable, so Libclang and Clang should be of the same version
when generating reproducers.
The new mode emits the information about the temporary files and Libclang-specific information
to stdout using JSON.

rdar://35322614

Differential Revision: https://reviews.llvm.org/D40983

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329442 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[HIP] define __CUDA_ARCH_=1 for amdgcn targets
Yaxun Liu [Fri, 6 Apr 2018 16:43:42 +0000 (16:43 +0000)]
[HIP] define __CUDA_ARCH_=1 for amdgcn targets

Differential Revision: https://reviews.llvm.org/D45277

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329420 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[OPENMP, NVPTX] Fix codegen for the teams reduction.
Alexey Bataev [Fri, 6 Apr 2018 16:03:36 +0000 (16:03 +0000)]
[OPENMP, NVPTX] Fix codegen for the teams reduction.

Added NUW flags for all the add|mul|sub operations + replaced sdiv by udiv
as we operate on unsigned values only (addresses, converted to integers)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329411 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix typos in clang
Alexander Kornienko [Fri, 6 Apr 2018 15:14:32 +0000 (15:14 +0000)]
Fix typos in clang

Found via codespell -q 3 -I ../clang-whitelist.txt
Where whitelist consists of:

  archtype
  cas
  classs
  checkk
  compres
  definit
  frome
  iff
  inteval
  ith
  lod
  methode
  nd
  optin
  ot
  pres
  statics
  te
  thru

Patch by luzpaz! (This is a subset of D44188 that applies cleanly with a few
files that have dubious fixes reverted.)

Differential revision: https://reviews.llvm.org/D44188

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329399 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Hexagon] Remove default values from lambda parameters
Krzysztof Parzyszek [Fri, 6 Apr 2018 13:51:48 +0000 (13:51 +0000)]
[Hexagon] Remove default values from lambda parameters

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329394 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAllow the creation of human-friendly ASTDumper to arbitrary output stream
Alexander Kornienko [Fri, 6 Apr 2018 13:01:12 +0000 (13:01 +0000)]
Allow the creation of human-friendly ASTDumper to arbitrary output stream

Summary:
`ASTPrinter` allows setting the ouput to any O-Stream, but that printer creates source-code-like syntax (and is also marked with a `FIXME`). The nice, colourful, mostly human-readable `ASTDumper` only works on the standard output, which is not feasible in case a user wants to see the AST of a file through a code navigation/comprehension tool.

This small addition of an overload solves generating a nice colourful AST block for the users of a tool I'm working on, [[ http://github.com/Ericsson/CodeCompass | CodeCompass ]], as opposed to having to duplicate the behaviour of definitions that only exist in the anonymous namespace of implementation TUs related to this module.

Reviewers: alexfh, klimek, rsmith

Reviewed By: alexfh

Subscribers: rnkovacs, dkrupp, gsd, xazax.hun, cfe-commits, #clang

Tags: #clang

Patch by Whisperity!

Differential Revision: https://reviews.llvm.org/D45096

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329391 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[XRay][clang] Only run driver test for Linux and FreeBSD
Dean Michael Berris [Fri, 6 Apr 2018 06:09:57 +0000 (06:09 +0000)]
[XRay][clang] Only run driver test for Linux and FreeBSD

This is a follow-up to D45354, which we should have only been running on
Linux and FreeBSD for specific targets.

Differential Revision: https://reviews.llvm.org/D45354

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329378 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[XRay][clang] Add a flag to enable/disable linking XRay deps explicitly
Dean Michael Berris [Fri, 6 Apr 2018 05:28:54 +0000 (05:28 +0000)]
[XRay][clang] Add a flag to enable/disable linking XRay deps explicitly

Summary:
This change introduces `-fxray-link-deps` and `-fnoxray-link-deps`. The
`-fnoxray-link-deps` allows for directly controlling which specific XRay
runtime to link. The default is for clang to link the XRay runtime that
is shipped with the compiler (if there are any), but users may want to
explicitly add the XRay dependencies from other locations or other
means.

Reviewers: eizan, echristo, chandlerc

Reviewed By: eizan

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D45354

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329376 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[XRay][clang] Consolidate runtime and link-time flag processing (NFC)
Dean Michael Berris [Fri, 6 Apr 2018 03:53:04 +0000 (03:53 +0000)]
[XRay][clang] Consolidate runtime and link-time flag processing (NFC)

Summary:
This change fixes http://llvm.org/PR36985 to define a single place in
CommonArgs.{h,cpp} where XRay runtime flags and link-time dependencies
are processed for all toolchains that support XRay instrumentation. This
is a refactoring of the same functionality spread across multiple
toolchain definitions.

Reviewers: echristo, devnexen, eizan

Reviewed By: eizan

Subscribers: emaste, cfe-commits

Differential Revision: https://reviews.llvm.org/D45243

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329372 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoCMake option to allow enabling experimental new pass manager by default
Petr Hosek [Fri, 6 Apr 2018 00:53:00 +0000 (00:53 +0000)]
CMake option to allow enabling experimental new pass manager by default

This CMake flag allows setting the default value for the
-f[no]-experimental-new-pass-manager flag.

Differential Revision: https://reviews.llvm.org/D44330

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329366 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix test added in r329301 to work properly with Windows paths.
Douglas Yung [Thu, 5 Apr 2018 22:58:14 +0000 (22:58 +0000)]
Fix test added in r329301 to work properly with Windows paths.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329361 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Revert r329346 because of memory sanitizer failures.
Eugene Zelenko [Thu, 5 Apr 2018 22:15:42 +0000 (22:15 +0000)]
[Sema] Revert r329346 because of memory sanitizer failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329357 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd a couple more tests for DR372.
Richard Smith [Thu, 5 Apr 2018 21:49:20 +0000 (21:49 +0000)]
Add a couple more tests for DR372.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329352 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema] Fix some Clang-tidy modernize and Include What You Use warnings; other minor...
Eugene Zelenko [Thu, 5 Apr 2018 21:09:03 +0000 (21:09 +0000)]
[Sema] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329346 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoPR36992: do not store beyond the dsize of a class object unless we know
Richard Smith [Thu, 5 Apr 2018 20:52:58 +0000 (20:52 +0000)]
PR36992: do not store beyond the dsize of a class object unless we know
the tail padding is not reused.

We track on the AggValueSlot (and through a couple of other
initialization actions) whether we're dealing with an object that might
share its tail padding with some other object, so that we can avoid
emitting stores into the tail padding if that's the case. We still
widen stores into tail padding when we can do so.

Differential Revision: https://reviews.llvm.org/D45306

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329342 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoDR1672, DR1813, DR1881, DR2120: Implement recent fixes to "standard
Richard Smith [Thu, 5 Apr 2018 18:55:37 +0000 (18:55 +0000)]
DR1672, DR1813, DR1881, DR2120: Implement recent fixes to "standard
layout" rules.

The new rules say that a standard-layout struct has its first non-static
data member and all base classes at offset 0, and consider a class to
not be standard-layout if that would result in multiple subobjects of a
single type having the same address.

We track "is C++11 standard-layout class" separately from "is
standard-layout class" so that the ABIs that need this information can
still use it.

Differential Revision: https://reviews.llvm.org/D45176

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329332 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRemove the temporary availability checking workaround for
Alex Lorenz [Thu, 5 Apr 2018 18:12:06 +0000 (18:12 +0000)]
Remove the temporary availability checking workaround for
the nested declarations in @interface.

rdar://28825862

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329324 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix typo in comment -fmath-errno=0 -> -fno-math-errno
Sam Clegg [Thu, 5 Apr 2018 17:44:08 +0000 (17:44 +0000)]
Fix typo in comment -fmath-errno=0 -> -fno-math-errno

The former is not a valid clang argument

Differential Revision: https://reviews.llvm.org/D45102

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329323 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ASTImporter] Fix for importing unnamed structs
Aleksei Sidorin [Thu, 5 Apr 2018 15:31:49 +0000 (15:31 +0000)]
[ASTImporter] Fix for importing unnamed structs

Patch by Peter Szecsi!

Differential Revision: https://reviews.llvm.org/D30876

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329301 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoDisable -fmerge-all-constants as default.
Manoj Gupta [Thu, 5 Apr 2018 15:29:52 +0000 (15:29 +0000)]
Disable -fmerge-all-constants as default.

Summary:
"-fmerge-all-constants" is a non-conforming optimization and should not
be the default. It is also causing miscompiles when building Linux
Kernel (https://lkml.org/lkml/2018/3/20/872).

Fixes PR18538.

Reviewers: rjmccall, rsmith, chandlerc

Reviewed By: rsmith, chandlerc

Subscribers: srhines, cfe-commits

Differential Revision: https://reviews.llvm.org/D45289

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329300 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format] Support lightweight Objective-C generics
Ben Hamilton [Thu, 5 Apr 2018 15:26:25 +0000 (15:26 +0000)]
[clang-format] Support lightweight Objective-C generics

Summary:
Previously, `clang-format` didn't understand lightweight
Objective-C generics, which have the form:

```
@interface Foo <KeyType,
                ValueTypeWithConstraint : Foo,
AnotherValueTypeWithGenericConstraint: Bar<Baz>, ... > ...
```

The lightweight generic specifier list appears before the base
class, if present, but because it starts with < like the protocol
specifier list, `UnwrappedLineParser` was getting confused and
failed to parse interfaces with both generics and protocol lists:

```
@interface Foo <KeyType> : NSObject <NSCopying>
```

Since the parsed line would be incomplete, the format result
would be very confused (e.g., https://bugs.llvm.org/show_bug.cgi?id=24381).

This fixes the issue by explicitly parsing the ObjC lightweight
generic conformance list, so the line is fully parsed.

Fixes: https://bugs.llvm.org/show_bug.cgi?id=24381
Test Plan: New tests added. Ran tests with:
  % make -j16 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: djasper, jolesiak

Reviewed By: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D45185

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329298 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format] Ensure ObjC selectors with 0 args are annotated correctly
Ben Hamilton [Thu, 5 Apr 2018 15:26:23 +0000 (15:26 +0000)]
[clang-format] Ensure ObjC selectors with 0 args are annotated correctly

Summary:
Previously, clang-format would incorrectly annotate 0-argument
Objective-C selector names as TT_TrailingAnnotation:

```
% echo "-(void)foo;" > /tmp/test.m
% ./bin/clang-format -debug /tmp/test.m
Language: Objective-C
----
Line(0, FSC=0): minus[T=68, OC=0] l_paren[T=68, OC=1] void[T=68, OC=2]
r_paren[T=68, OC=6] identifier[T=68, OC=7] semi[T=68, OC=10]
Line(0, FSC=0): eof[T=68, OC=0]
Run 0...
AnnotatedTokens(L=0):
 M=0 C=0 T=ObjCMethodSpecifier S=1 B=0 BK=0 P=0 Name=minus L=1 PPK=2
 FakeLParens= FakeRParens=0 Text='-'
 M=0 C=1 T=Unknown S=1 B=0 BK=0 P=33 Name=l_paren L=3 PPK=2
 FakeLParens= FakeRParens=0 Text='('
 M=0 C=1 T=Unknown S=0 B=0 BK=0 P=140 Name=void L=7 PPK=2 FakeLParens=
 FakeRParens=0 Text='void'
 M=0 C=0 T=CastRParen S=0 B=0 BK=0 P=43 Name=r_paren L=8 PPK=2
 FakeLParens= FakeRParens=0 Text=')'
 M=0 C=1 T=TrailingAnnotation S=0 B=0 BK=0 P=120 Name=identifier L=11
 PPK=2 FakeLParens= FakeRParens=0 Text='foo'
 M=0 C=0 T=Unknown S=0 B=0 BK=0 P=23 Name=semi L=12 PPK=2 FakeLParens=
 FakeRParens=0 Text=';'
```

This caused us to incorrectly indent 0-argument wrapped selectors
when Style.IndentWrappedFunctionNames was false, as we thought
the 0-argument ObjC selector name was actually a trailing
annotation (which is always indented).

This diff fixes the issue and adds tests.

Test Plan: New tests added. Confirmed tests failed before diff.
  After diff, tests passed. Ran tests with:
  % make -j12 FormatTests &&
  ./tools/clang/unittests/Format/FormatTests

Reviewers: djasper, jolesiak

Reviewed By: djasper, jolesiak

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D44996

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329297 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ObjC] Make C++ triviality type traits available to non-trivial C
Akira Hatanaka [Thu, 5 Apr 2018 14:39:57 +0000 (14:39 +0000)]
[ObjC] Make C++ triviality type traits available to non-trivial C
structs.

r326307 and r327870 made changes that allowed using non-trivial C
structs with fields qualified with __strong or __weak. This commit makes
the following C++ triviality type traits available to non-trivial C
structs:

__has_trivial_assign
__has_trivial_move_assign
__has_trivial_copy
__has_trivial_move_constructor
__has_trivial_constructor
__has_trivial_destructor

This reapplies r328680. This commit fixes a bug where the copy/move
__has_trivial_* traits would return false when a volatile type was being
passed. Thanks to Richard Smith for pointing out the mistake.

rdar://problem/33599681

Differential Revision: https://reviews.llvm.org/D44913

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329289 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PATCH] [RISCV] Extend getTargetDefines for RISCVTargetInfo
Shiva Chen [Thu, 5 Apr 2018 12:54:00 +0000 (12:54 +0000)]
[PATCH] [RISCV] Extend getTargetDefines for RISCVTargetInfo

Summary:
This patch extend getTargetDefines and implement handleTargetFeatures
and hasFeature. and define corresponding marco for those features.

Reviewers: asb, apazos, eli.friedman

Differential Revision: https://reviews.llvm.org/D44727

Patch by Kito Cheng.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329278 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format] Preserve spaces before a percent in (text) protos
Krasimir Georgiev [Thu, 5 Apr 2018 09:33:03 +0000 (09:33 +0000)]
[clang-format] Preserve spaces before a percent in (text) protos

This makes sure that we do not change the meaning of pieces of text with
format specifiers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329263 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert r328680 ("[ObjC] Make C++ triviality type traits available to non-trivial...
Richard Smith [Thu, 5 Apr 2018 00:34:54 +0000 (00:34 +0000)]
Revert r328680 ("[ObjC] Make C++ triviality type traits available to non-trivial C structs.")

It unintentionally caused the values of the __has_* type traits to change in
C++ for trivially-copyable classes with volatile members.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329247 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AST] Don't track lambda captures when checking a potential constant expression.
Erik Pilkington [Thu, 5 Apr 2018 00:12:05 +0000 (00:12 +0000)]
[AST] Don't track lambda captures when checking a potential constant expression.

Fixes PR36054.

Differential revision: https://reviews.llvm.org/D45194

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329244 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoEnable msan unconditionally on Linux.
Evgeniy Stepanov [Wed, 4 Apr 2018 23:48:06 +0000 (23:48 +0000)]
Enable msan unconditionally on Linux.

Memory sanitizer compatibility are already done in
MemorySanitizer::doInitialization. It verifies whether the necessary offsets
exist and bails out if not. For this reason it is no good to duplicate two
checks in two projects. This patch removes clang check and postpones msan
compatibility validation till MemorySanitizer::doInitialization.

Another reason for this patch is to allow using msan with any CPU (given
compatible runtime) and custom mapping provided via the arguments added by
https://reviews.llvm.org/D44926.

Patch by vit9696.

Differential Revision: https://reviews.llvm.org/D44927

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329241 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAArch64: Implement support for the shadowcallstack attribute.
Peter Collingbourne [Wed, 4 Apr 2018 21:55:44 +0000 (21:55 +0000)]
AArch64: Implement support for the shadowcallstack attribute.

The implementation of shadow call stack on aarch64 is quite different to
the implementation on x86_64. Instead of reserving a segment register for
the shadow call stack, we reserve the platform register, x18. Any function
that spills lr to sp also spills it to the shadow call stack, a pointer to
which is stored in x18.

Differential Revision: https://reviews.llvm.org/D45239

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329236 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Driver] Include the Android multiarch includes.
Dan Albert [Wed, 4 Apr 2018 21:28:34 +0000 (21:28 +0000)]
[Driver] Include the Android multiarch includes.

Summary:
Most Android headers live in a single directory, but a small handful
live in multiarch directories.

Reviewers: srhines

Reviewed By: srhines

Subscribers: javed.absar, cfe-commits

Differential Revision: https://reviews.llvm.org/D44995

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329234 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CUDA] Add amdgpu sub archs
Yaxun Liu [Wed, 4 Apr 2018 21:19:27 +0000 (21:19 +0000)]
[CUDA] Add amdgpu sub archs

Patch by Greg Rodgers.
Revised and lit tests added by Yaxun Liu.

Differential Revision: https://reviews.llvm.org/D45277

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329232 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format] In tests, expected code should be format-stable
Mark Zeren [Wed, 4 Apr 2018 21:09:00 +0000 (21:09 +0000)]
[clang-format] In tests, expected code should be format-stable

Summary: Extend various verifyFormat helper functions to check that the
expected text is "stable". This provides some protection against bugs
where formatting results are ocilating between two forms, or continually
change in some other way.

Testing Done:

* Ran unit tests.

* Reproduced a known instability in preprocessor indentation which was
  caught by this new check.

Reviewers: krasimir

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D42034

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329231 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "[CUDA] Check initializers of instantiated template variables."
Artem Belevich [Wed, 4 Apr 2018 20:48:42 +0000 (20:48 +0000)]
Revert "[CUDA] Check initializers of instantiated template variables."

This (temporarily) reverts commit r329127 due to the problems
it exposed in TensorFlow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329229 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer][test] Set C++14 as language standard for test depending on new
Jan Korous [Wed, 4 Apr 2018 19:58:48 +0000 (19:58 +0000)]
[analyzer][test] Set C++14 as language standard for test depending on new
features

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329225 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFixes errors with FS iterators caused by https://reviews.llvm.org/D44960
Max Moroz [Wed, 4 Apr 2018 19:47:25 +0000 (19:47 +0000)]
Fixes errors with FS iterators caused by https://reviews.llvm.org/D44960

Summary:
In https://reviews.llvm.org/D44960, file status check is executed every
time a real file system directory iterator is constructed or
incremented, and emits an error code. This change list fixes the errors
in VirtualFileSystem caused by https://reviews.llvm.org/D44960.

Patch by Yuke Liao (@liaoyuke).

Reviewers: vsk, pcc, zturner, liaoyuke

Reviewed By: vsk

Subscribers: mgrang, cfe-commits

Differential Revision: https://reviews.llvm.org/D45178

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329223 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[XRay][clang] Allow clang to build XRay instrumented binaries in OpenBSD
Dean Michael Berris [Wed, 4 Apr 2018 12:47:49 +0000 (12:47 +0000)]
[XRay][clang] Allow clang to build XRay instrumented binaries in OpenBSD

Summary:
This patch was originally reviewed in D45126. It enables clang to add
the XRay runtime and the link-time dependencies for XRay instrumentation
in OpenBSD.

Landing for devnexen.

Reviewers: brad, dberris

Subscribers: dberris, krytarowski, cfe-commits

Author: devnexen

Differential Revision: https://reviews.llvm.org/D45126

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329183 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoMake helpers static. NFC.
Benjamin Kramer [Wed, 4 Apr 2018 11:45:11 +0000 (11:45 +0000)]
Make helpers static. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329170 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAs we don't use minor version anymore, let's remove it from the release notes too
Sylvestre Ledru [Wed, 4 Apr 2018 09:38:22 +0000 (09:38 +0000)]
As we don't use minor version anymore, let's remove it from the release notes too

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329161 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix typo in ASTStructuralEquivalence.cpp for UnaryTransform types.
Eric Fiselier [Wed, 4 Apr 2018 06:31:21 +0000 (06:31 +0000)]
Fix typo in ASTStructuralEquivalence.cpp for UnaryTransform types.

Previously UnaryTransformType nodes were comparing the same node
for structural equivalence. This was due to a typo where T1 was
on both sides of the comparison. This patch corrects that typo.

Unfortunately I couldn't find a way to test this change. It seems
that currently UnaryTransform nodes are never actually checked
for equivalence, only their canonical types are.

None the less, this correction seemed appropriate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329151 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoSplit test/Driver/darwin-sdkroot.c into two tests
Alex Lorenz [Wed, 4 Apr 2018 02:11:20 +0000 (02:11 +0000)]
Split test/Driver/darwin-sdkroot.c into two tests

The test additions in r329110 are Darwin-specific, as they rely
on a code path that is reachabled when driver is invoked without
-target. Instead of making the old test checks Darwin-specific too,
let's simply split it into two files to ensure that the old
checks are still platform-agnostic. Thanks Chandler for
suggesting this!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329141 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ObjC] Use the name specified by objc_runtime_name instead of the class
Akira Hatanaka [Tue, 3 Apr 2018 22:50:16 +0000 (22:50 +0000)]
[ObjC] Use the name specified by objc_runtime_name instead of the class
identifier.

This patch fixes a few places in CGObjCMac.cpp where the class
identifier was used instead of the name specified by objc_runtime_name.

rdar://problem/37910822

Differential Revision: https://reviews.llvm.org/D45101

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329128 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CUDA] Check initializers of instantiated template variables.
Artem Belevich [Tue, 3 Apr 2018 22:41:06 +0000 (22:41 +0000)]
[CUDA] Check initializers of instantiated template variables.

We were already performing checks on non-template variables,
but the checks on templated ones were missing.

Differential Revision: https://reviews.llvm.org/D45231

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329127 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd the -fsanitize=shadow-call-stack flag
Vlad Tsyrklevich [Tue, 3 Apr 2018 22:33:53 +0000 (22:33 +0000)]
Add the -fsanitize=shadow-call-stack flag

Summary:
Add support for the -fsanitize=shadow-call-stack flag which causes clang
to add ShadowCallStack attribute to functions compiled with that flag
enabled.

Reviewers: pcc, kcc

Reviewed By: pcc, kcc

Subscribers: cryptoad, cfe-commits, kcc

Differential Revision: https://reviews.llvm.org/D44801

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329122 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings...
Eugene Zelenko [Tue, 3 Apr 2018 21:31:50 +0000 (21:31 +0000)]
[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329115 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd REQUIRES: darwin-system to test/Driver/darwin-sdkroot.c
Alex Lorenz [Tue, 3 Apr 2018 21:10:26 +0000 (21:10 +0000)]
Add REQUIRES: darwin-system to test/Driver/darwin-sdkroot.c

The test from r329110 is for Darwin only

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329113 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[driver][darwin] Do not infer -simulator environment for non-simulator SDKs
Alex Lorenz [Tue, 3 Apr 2018 20:50:05 +0000 (20:50 +0000)]
[driver][darwin] Do not infer -simulator environment for non-simulator SDKs

rdar://36369832

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329110 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Fix diagnostics in callees of interesting callees.
Artem Dergachev [Tue, 3 Apr 2018 18:52:30 +0000 (18:52 +0000)]
[analyzer] Fix diagnostics in callees of interesting callees.

removeUnneededCalls() is responsible for removing path diagnostic pieces within
functions that don't contain "interesting" events. It makes bug reports
much tidier.

When a stack frame is known to be interesting, the function doesn't descend
into it to prune anything within it, even other callees that are totally boring.

Fix the function to prune boring callees in interesting stack frames.

Differential Revision: https://reviews.llvm.org/D45117

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329102 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "Set calling convention for CUDA kernel"
Artem Belevich [Tue, 3 Apr 2018 18:29:31 +0000 (18:29 +0000)]
Revert "Set calling convention for CUDA kernel"

This reverts r328795 which introduced an issue with referencing __global__
function templates. More details in the original review D44747.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329099 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoUse Clang when referring to the project and clang when referring to the binary.
Richard Smith [Tue, 3 Apr 2018 18:28:13 +0000 (18:28 +0000)]
Use Clang when referring to the project and clang when referring to the binary.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329098 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRestrict a test using named file descriptors to using the system shell
David Blaikie [Tue, 3 Apr 2018 18:22:14 +0000 (18:22 +0000)]
Restrict a test using named file descriptors to using the system shell

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329097 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Hexagon] Remove -mhvx-double and the corresponding subtarget feature
Krzysztof Parzyszek [Tue, 3 Apr 2018 15:59:10 +0000 (15:59 +0000)]
[Hexagon] Remove -mhvx-double and the corresponding subtarget feature

Specifying the HVX vector length should be done via the -mhvx-length
option.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329077 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format/ObjC] Do not detect "[]" as ObjC method expression
Ben Hamilton [Tue, 3 Apr 2018 14:07:11 +0000 (14:07 +0000)]
[clang-format/ObjC] Do not detect "[]" as ObjC method expression

Summary:
The following C++ code was being detected by
`guessLanguage()` as Objective-C:

  #define FOO(...) auto bar = [] __VA_ARGS__;

This was because `[] __VA_ARGS__` is not currently detected as a C++
lambda expression (it has no parens or braces), so
`TokenAnnotator::parseSquare()` incorrectly treats the opening square
as an ObjC method expression.

We have two options to fix this:

1. Parse `[] __VA_ARGS__` explicitly as a C++ lambda
2. Make it so `[]` is never parsed as an Objective-C method expression

This diff implements option 2, which causes the `[` to be parsed
as `TT_ArraySubscriptLSquare` instead of `TT_ObjCMethodExpr`.

Note that when I fixed this, it caused one change in formatting
behavior, where the following was implicitly relying on the `[`
being parsed as `TT_ObjCMethodExpr`:

  A<int * []> a;

becomes:

  A<int *[]> a;

with `Style.PointerAlignment = Middle`.

I don't really know what the desired format is for this syntax; the
test was added by Janusz Sobczak and integrated by @djasper in
https://github.com/llvm-mirror/clang/commit/b511fe9818829d7ece0cc0b2ce1fbe04a1f0739a
.

I went ahead and changed the test for now.

Test Plan: New tests added. Ran tests with:
  % make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Fixes: https://bugs.llvm.org/show_bug.cgi?id=36248
Reviewers: djasper, jolesiak

Reviewed By: djasper

Subscribers: klimek, cfe-commits, djasper

Differential Revision: https://reviews.llvm.org/D45169

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329070 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[clang-format/ObjC] Do not insert space after opening brace of ObjC dict literal
Ben Hamilton [Tue, 3 Apr 2018 14:07:09 +0000 (14:07 +0000)]
[clang-format/ObjC] Do not insert space after opening brace of ObjC dict literal

Summary:
D44816 attempted to fix a few cases where `clang-format` incorrectly
inserted a space before the closing brace of an Objective-C dictionary
literal.

This revealed there were still a few cases where we inserted a space
after the opening brace of an Objective-C dictionary literal.

This fixes the formatting to be consistent and adds more tests.

Test Plan: New tests added. Confirmed tests failed before
  diff and passed after diff.
  Ran tests with:
  % make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: djasper, jolesiak, krasimir

Reviewed By: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D45168

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329069 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoUsersManual.rst: update text for /GX- to match r328708
Hans Wennborg [Tue, 3 Apr 2018 09:28:21 +0000 (09:28 +0000)]
UsersManual.rst: update text for /GX- to match r328708

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329052 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AST] Fix some Clang-tidy modernize-use-auto warnings; other minor fixes (NFC).
Eugene Zelenko [Tue, 3 Apr 2018 00:11:50 +0000 (00:11 +0000)]
[AST] Fix some Clang-tidy modernize-use-auto warnings; other minor fixes (NFC).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329036 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Driver] Wire up the -f[no-]rtlib-add-rpath flag and tests
Petr Hosek [Mon, 2 Apr 2018 23:36:14 +0000 (23:36 +0000)]
[Driver] Wire up the -f[no-]rtlib-add-rpath flag and tests

D30700 added the -f[no-]rtlib-add-rpath flag, but that flag was never
wired up in the driver and tests were updated to check whether it
actually does anything. This patch wires up the flag and updates test.

Differential Revision: https://reviews.llvm.org/D45145

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329032 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoCodeGenCXX: support PreserveMostCC in MS ABI
Saleem Abdulrasool [Mon, 2 Apr 2018 22:25:50 +0000 (22:25 +0000)]
CodeGenCXX: support PreserveMostCC in MS ABI

Microsoft has reserved 'U' for the PreserveMostCC which is used in the
swift runtime.  Add support for this.  This allows the swift runtime to
be built for Windows again.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329025 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MS] Emit vftable thunks for functions with incomplete prototypes
Reid Kleckner [Mon, 2 Apr 2018 20:20:33 +0000 (20:20 +0000)]
[MS] Emit vftable thunks for functions with incomplete prototypes

Summary:
The following class hierarchy requires that we be able to emit a
this-adjusting thunk for B::foo in C's vftable:

  struct Incomplete;
  struct A {
    virtual A* foo(Incomplete p) = 0;
  };
  struct B : virtual A {
    void foo(Incomplete p) override;
  };
  struct C : B { int c; };

This TU is valid, but lacks a definition of 'Incomplete', which makes it
hard to build a thunk for the final overrider, B::foo.

Before this change, Clang gives up attempting to emit the thunk, because
it assumes that if the parameter types are incomplete, it must be
emitting the thunk for optimization purposes. This is untrue for the MS
ABI, where the implementation of B::foo has no idea what thunks C's
vftable may require. Clang needs to emit the thunk without necessarily
having access to the complete prototype of foo.

This change makes Clang emit a musttail variadic call when it needs such
a thunk. I call these "unprototyped" thunks, because they only prototype
the "this" parameter, which must always come first in the MS C++ ABI.

These thunks work, but they create ugly LLVM IR. If the call to the
thunk is devirtualized, it will be a call to a bitcast of a function
pointer. Today, LLVM cannot inline through such a call, but I want to
address that soon, because we also use this pattern for virtual member
pointer thunks.

This change also implements an old FIXME in the code about reusing the
thunk's computed CGFunctionInfo as much as possible. Now we don't end up
computing the thunk's mangled name and arranging it's prototype up to
around three times.

Fixes PR25641

Reviewers: rjmccall, rsmith, hans

Subscribers: Prazek, cfe-commits

Differential Revision: https://reviews.llvm.org/D45112

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329009 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix some DenseMap use-after-rehash bugs and hoist MethodVFTableLocation
Reid Kleckner [Mon, 2 Apr 2018 20:00:39 +0000 (20:00 +0000)]
Fix some DenseMap use-after-rehash bugs and hoist MethodVFTableLocation

This re-lands r328845 with fixes for crbug.com/827810.

The initial motiviation was to hoist MethodVFTableLocation to global
scope so it could be forward declared.

In this patch, I noticed that MicrosoftVTableContext uses some risky
patterns. It has methods that return references to data stored in
DenseMaps. I've made some of them return by value for trivial structs
and I've moved some things into separate allocations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329007 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Attr] [NFC] Revert accidental change from r327405
Joel E. Denny [Mon, 2 Apr 2018 19:43:34 +0000 (19:43 +0000)]
[Attr] [NFC] Revert accidental change from r327405

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329005 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTemporarily revert r328404:
Eric Christopher [Mon, 2 Apr 2018 18:33:47 +0000 (18:33 +0000)]
Temporarily revert r328404:

commit 519b97132a4c960e8dedbfe4290d86970d92e995
Author: Richard Trieu <rtrieu@google.com>
Date:   Sat Mar 24 00:52:44 2018 +0000

    [ODRHash] Support pointer and reference types.

    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328404 91177308-0d34-0410-b5e6-96231b3b80d8

As it's breaking some tests. I've communicated with Richard offline about testcases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329001 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd -fclang-abi-compat=6 flag for upcoming ABI changes.
Richard Smith [Mon, 2 Apr 2018 18:29:44 +0000 (18:29 +0000)]
Add -fclang-abi-compat=6 flag for upcoming ABI changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@329000 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd helper to determine if a field is a zero-length bitfield.
Richard Smith [Mon, 2 Apr 2018 18:29:43 +0000 (18:29 +0000)]
Add helper to determine if a field is a zero-length bitfield.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328999 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CUDA] Let device-side shared variables be initialized with undef
Yaxun Liu [Mon, 2 Apr 2018 17:38:24 +0000 (17:38 +0000)]
[CUDA] Let device-side shared variables be initialized with undef

CUDA shared variable should be initialized with undef.

Patch by Greg Rodgers.
Revised and lit test added by Yaxun Liu.

Differential Revision: https://reviews.llvm.org/D44985

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328994 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[coroutines] Add __builtin_coro_noop => llvm.coro.noop
Gor Nishanov [Mon, 2 Apr 2018 17:35:37 +0000 (17:35 +0000)]
[coroutines] Add __builtin_coro_noop => llvm.coro.noop

A recent addition to Coroutines TS (https://wg21.link/p0913) adds a pre-defined
coroutine noop_coroutine that does nothing. To implement this feature, we implemented
an llvm.coro.noop intrinsic that returns a coroutine handle to a coroutine that
does nothing when resumed or destroyed.

This patch adds a builtin __builtin_coro_noop() that maps to llvm.coro.noop intrinsic.

Related llvm change: https://reviews.llvm.org/D45114

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328993 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix unused variable warning introduced at revision 328910.
Andrea Di Biagio [Mon, 2 Apr 2018 12:04:37 +0000 (12:04 +0000)]
Fix unused variable warning introduced at revision 328910.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328968 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Coroutines] Schedule coro-split before asan
Brian Gesiak [Sun, 1 Apr 2018 23:55:21 +0000 (23:55 +0000)]
[Coroutines] Schedule coro-split before asan

Summary:
The docs for the LLVM coroutines intrinsic `@llvm.coro.id` state that
"The second argument, if not null, designates a particular alloca instruction
to be a coroutine promise."

However, if the address sanitizer pass is run before the `@llvm.coro.id`
intrinsic is lowered, the `alloca` instruction passed to the intrinsic as its
second argument is converted, as per the
https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm docs, to
an `inttoptr` instruction that accesses the address of the promise.

On optimization levels `-O1` and above, the `-asan` pass is run after
`-coro-early`, `-coro-split`, and `-coro-elide`, and before
`-coro-cleanup`, and so there is no issue. At `-O0`, however, `-asan`
is run in between `-coro-early` and `-coro-split`, which causes an
assertion to be hit when the `inttoptr` instruction is forcibly cast to
an `alloca`.

Rearrange the passes such that the coroutine passes are registered
before the sanitizer passes.

Test Plan:
Compile a simple C++ program that uses coroutines in `-O0` with
`-fsanitize-address`, and confirm no assertion is hit:
`clang++ coro-example.cpp -fcoroutines-ts -g -fsanitize=address -fno-omit-frame-pointer`.

Reviewers: GorNishanov, lewissbaker, EricWF

Reviewed By: GorNishanov

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D43927

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328951 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Coroutines] Find custom allocators in class scope
Brian Gesiak [Sun, 1 Apr 2018 22:59:22 +0000 (22:59 +0000)]
[Coroutines] Find custom allocators in class scope

Summary:
https://reviews.llvm.org/rL325291 implemented Coroutines TS N4723
section [dcl.fct.def.coroutine]/7, but it performed lookup of allocator
functions within both the global and class scope, whereas the specified
behavior is to perform lookup for custom allocators within just the
class scope.

To fix, add parameters to the `Sema::FindAllocationFunctions` function
such that it can be used to lookup allocators in global scope,
class scope, or both (instead of just being able to look up in just global
scope or in both global and class scope). Then, use those parameters
from within the coroutine Sema.

This incorrect behavior had the unfortunate side-effect of causing the
bug https://bugs.llvm.org/show_bug.cgi?id=36578 (or at least the reports
of that bug in C++ programs). That bug would occur for any C++ user with
a coroutine frame that took a single pointer argument, since it would
then find the global placement form `operator new`, described in the
C++ standard 18.6.1.3.1. This patch prevents Clang from generating code
that triggers the LLVM assert described in that bug report.

Test Plan: `check-clang`

Reviewers: GorNishanov, eric_niebler, lewissbaker

Reviewed By: GorNishanov

Subscribers: EricWF, cfe-commits

Differential Revision: https://reviews.llvm.org/D44552

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328949 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix a major swiftcall ABI bug with trivial C++ class types.
John McCall [Sun, 1 Apr 2018 21:04:30 +0000 (21:04 +0000)]
Fix a major swiftcall ABI bug with trivial C++ class types.

The problem with the previous logic was that there might not be any
explicit copy/move constructor declarations, e.g. if the type is
trivial and we've never type-checked a copy of it.  Relying on Sema's
computation seems much more reliable.

Also, I believe Richard's recommendation is exactly the rule we use
now on the Itanium ABI, modulo the trivial_abi attribute (which this
change of course fixes our handling of in Swift).

This does mean that we have a less portable rule for deciding
indirectness for swiftcall.  I would prefer it if we just applied the
Itanium rule universally under swiftcall, but in the meantime, I need
to fix this bug.

This only arises when defining functions with class-type arguments
in C++, as we do in the Swift runtime.  It doesn't affect normal Swift
operation because we don't import code as C++.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328942 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd missing include to ContinuousRangeMap.h
Eric Fiselier [Sun, 1 Apr 2018 00:33:51 +0000 (00:33 +0000)]
Add missing include to ContinuousRangeMap.h

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328924 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd missing include to Visibility.h
Eric Fiselier [Sun, 1 Apr 2018 00:31:14 +0000 (00:31 +0000)]
Add missing include to Visibility.h

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328923 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert r328845, it caused crbug.com/827810.
Nico Weber [Sat, 31 Mar 2018 18:26:25 +0000 (18:26 +0000)]
Revert r328845, it caused crbug.com/827810.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328922 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Unroll the loop when it has a unsigned counter.
Henry Wong [Sat, 31 Mar 2018 12:46:46 +0000 (12:46 +0000)]
[analyzer] Unroll the loop when it has a unsigned counter.

Summary:
The original implementation in the `LoopUnrolling.cpp` didn't consider the case where the counter is unsigned. This case is only handled in `simpleCondition()`, but this is not enough, we also need to deal with the unsinged counter with the counter initialization.

Since `IntegerLiteral` is `signed`, there is a `ImplicitCastExpr<IntegralCast>` in `unsigned counter = IntergerLiteral`. This patch add the `ignoringParenImpCasts()` in the `IntegerLiteral` matcher.

Reviewers: szepet, a.sidorin, NoQ, george.karpenkov

Reviewed By: szepet, george.karpenkov

Subscribers: xazax.hun, rnkovacs, cfe-commits, MTC

Differential Revision: https://reviews.llvm.org/D45086

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328919 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Hopefully fix the ARM buildbot.
George Karpenkov [Sat, 31 Mar 2018 02:17:15 +0000 (02:17 +0000)]
[analyzer] Hopefully fix the ARM buildbot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328913 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Fix assertion crash in CStringChecker
George Karpenkov [Sat, 31 Mar 2018 01:20:08 +0000 (01:20 +0000)]
[analyzer] Fix assertion crash in CStringChecker

An offset might be unknown.

rdar://39054939

Differential Revision: https://reviews.llvm.org/D45115

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328912 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Cache offset computation for MemRegion
George Karpenkov [Sat, 31 Mar 2018 01:20:07 +0000 (01:20 +0000)]
[analyzer] Cache offset computation for MemRegion

Achieves almost a 200% speedup on the example where the performance of
visitors was problematic.

Performance on sqlite3 is unaffected.

rdar://38818362

Differential Revision: https://reviews.llvm.org/D45113

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328911 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Fix liveness calculation for C++17 structured bindings
George Karpenkov [Sat, 31 Mar 2018 01:20:06 +0000 (01:20 +0000)]
[analyzer] Fix liveness calculation for C++17 structured bindings

C++ structured bindings for non-tuple-types are defined in a peculiar
way, where the resulting declaration is not a VarDecl, but a
BindingDecl.
That means a lot of existing machinery stops working.

rdar://36912381

Differential Revision: https://reviews.llvm.org/D44956

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328910 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ASTImporter] Add test helper Fixture
Peter Szecsi [Fri, 30 Mar 2018 22:03:29 +0000 (22:03 +0000)]
[ASTImporter] Add test helper Fixture

Add a helper test Fixture, so we can add tests which can check internal
attributes of AST nodes like getPreviousDecl(), isVirtual(), etc.
This enables us to check if a redeclaration chain is correctly built during
import, if the virtual flag is preserved during import, etc. We cannot check
such attributes with the existing testImport.
Also, this fixture makes it possible to import from several "From" contexts.

We also added several test cases here, some of them are disabled.
We plan to pass the disabled tests in other patches.

Patch by Gabor Marton!

Differential Revision: https://reviews.llvm.org/D43967

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328906 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Fix test triple in missing-bind-temporary.cpp.
Artem Dergachev [Fri, 30 Mar 2018 21:22:35 +0000 (21:22 +0000)]
[analyzer] Fix test triple in missing-bind-temporary.cpp.

Otherwise the default triple for x86-windows-msvc2015 auto-inserts
__attribute__((thiscall)) to some calls.

Fixes the respective buildbot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328903 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[analyzer] Track null or undef values through pointer arithmetic.
Artem Dergachev [Fri, 30 Mar 2018 19:27:42 +0000 (19:27 +0000)]
[analyzer] Track null or undef values through pointer arithmetic.

Pointer arithmetic on null or undefined pointers results in null or undefined
pointers. This is obvious for undefined pointers; for null pointers it follows
from our incorrect-but-somehow-working approach that declares that 0 (Loc)
doesn't necessarily represent a pointer of numeric address value 0, but instead
it represents any pointer that will cause a valid "null pointer dereference"
issue when dereferenced.

For now we've been seeing through pointer arithmetic at the original dereference
expression, i.e. in bugreporter::getDerefExpr(), but not during further
investigation of the value's origins in bugreporter::trackNullOrUndefValue().
The patch fixes it.

Differential Revision: https://reviews.llvm.org/D45071

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328896 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CFG] [analyzer] Work around a disappearing CXXBindTemporaryExpr.
Artem Dergachev [Fri, 30 Mar 2018 19:25:39 +0000 (19:25 +0000)]
[CFG] [analyzer] Work around a disappearing CXXBindTemporaryExpr.

Sometimes template instantiation causes CXXBindTemporaryExpr to be missing in
its usual spot. In CFG, temporary destructors work by relying on
CXXBindTemporaryExprs, so they won't work in this case.

Avoid the crash and notify the clients that we've encountered an unsupported AST
by failing to provide the ill-formed construction context for the temporary.

Differential Revision: https://reviews.llvm.org/D44955

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@328895 91177308-0d34-0410-b5e6-96231b3b80d8