]> granicus.if.org Git - clang/log
clang
6 years agoclang-cl: Simplify handling of /arch: flag.
Nico Weber [Thu, 25 Jan 2018 14:38:29 +0000 (14:38 +0000)]
clang-cl: Simplify handling of /arch: flag.

r213083 initially implemented /arch: support by mapping it to CPU features.
Then r241077 additionally mapped it to CPU, which made the feature flags
redundant (if harmless). This change here removes the redundant mapping to
feature flags, and rewrites test/Driver/cl-x86-flags.c to be a bit more of an
integration test that checks for preprocessor defines like AVX (like documented
on MSDN) instead of for driver flags.

To keep emitting warn_drv_unused_argument, use getLastArgNoClaim() followed by an explicit claim() if needed.

This is in preparation for adding support for /arch:AVX512(F).

No intended behavior change.

https://reviews.llvm.org/D42497

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

6 years ago[CodeGen] Decorate aggregate accesses with TBAA tags
Ivan A. Kosarev [Thu, 25 Jan 2018 14:21:55 +0000 (14:21 +0000)]
[CodeGen] Decorate aggregate accesses with TBAA tags

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

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

6 years ago[clang-format] Fixes indentation of inner text proto messages
Krasimir Georgiev [Thu, 25 Jan 2018 14:10:43 +0000 (14:10 +0000)]
[clang-format] Fixes indentation of inner text proto messages

Summary:
Consider the text proto:
```
message {
  sub { key: value }
}
```
Previously the first `{` was TT_Unknown, which caused the inner message to be
indented by the continuation width. This didn't happen for:
```
message {
  sub: { key: value }
}
```
This is because the code to mark the first `{` as a TT_DictLiteral was only
considering the case where it marches forward and reaches a `:`.

This patch updates this by looking not only for `:`, but also for `<` and `{`.

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

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

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

6 years ago[Driver] Add support for mips32 and scudo
Simon Dardis [Thu, 25 Jan 2018 10:09:33 +0000 (10:09 +0000)]
[Driver] Add support for mips32 and scudo

r317337 missed that scudo is supported on MIPS32, so permit that option for
MIPS32.

Reviewers: cryptoad, atanasyan

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

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

6 years agoFreeBSD needs also execinfo (in sanitizers)
Kamil Rytarowski [Wed, 24 Jan 2018 23:08:49 +0000 (23:08 +0000)]
FreeBSD needs also execinfo (in sanitizers)

Summary: As NetBSD, FreeBSD needs execinfo for backtrace's matters.

Patch by: David CARLIER.

Reviewers: joerg, vitalybuka

Reviewed By: vitalybuka

Subscribers: emaste, krytarowski, cfe-commits

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

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

6 years ago[analyzer] Do not attempt to get the pointee of void*
Alexander Shaposhnikov [Wed, 24 Jan 2018 22:17:30 +0000 (22:17 +0000)]
[analyzer] Do not attempt to get the pointee of void*

Do not attempt to get the pointee of void* while generating a bug report
(otherwise it will trigger an assert inside RegionStoreManager::getBinding
assert(!T->isVoidType() && "Attempting to dereference a void pointer!")).

Test plan: make check-all

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

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

6 years ago[coroutines] Pass coro func args to promise ctor
Brian Gesiak [Wed, 24 Jan 2018 22:15:42 +0000 (22:15 +0000)]
[coroutines] Pass coro func args to promise ctor

Summary:
Use corutine function arguments to initialize a promise type, but only
if the promise type defines a constructor that takes those arguments.
Otherwise, fall back to the default constructor.

Test Plan: check-clang

Reviewers: rsmith, GorNishanov, eric_niebler

Reviewed By: GorNishanov

Subscribers: toby-allsopp, lewissbaker, EricWF, cfe-commits

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

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

6 years ago[analyzer] NFC: Run many existing C++ tests with a custom operator new().
Artem Dergachev [Wed, 24 Jan 2018 21:24:10 +0000 (21:24 +0000)]
[analyzer] NFC: Run many existing C++ tests with a custom operator new().

In order to provide more test coverage for inlined operator new(), add more
run-lines to existing test cases, which would trigger our fake header
to provide a body for operator new(). Most of the code should still behave
reasonably. When behavior intentionally changes, #ifs are provided.

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

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

6 years ago[analyzer] Enable c++-allocator-inlining by default.
Artem Dergachev [Wed, 24 Jan 2018 20:59:40 +0000 (20:59 +0000)]
[analyzer] Enable c++-allocator-inlining by default.

This allows the analyzer to analyze ("inline") custom operator new() calls and,
even more importantly, inline constructors of objects that were allocated
by any operator new() - not necessarily a custom one.

All changes in the tests in the current commit are intended improvements,
even if they didn't carry any explicit FIXME flag.

It is possible to restore the old behavior via

  -analyzer-config c++-allocator-inlining=false

(this flag is supported by scan-build as well, and it can be into a clang
--analyze invocation via -Xclang .. -Xclang ..). There is no intention to
remove the old behavior for now.

Differential Revision: https://reviews.llvm.org/D42219
rdar://problem/12180598

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

6 years ago[analyzer] Assume that the allocated value is non-null before construction.
Artem Dergachev [Wed, 24 Jan 2018 20:32:26 +0000 (20:32 +0000)]
[analyzer] Assume that the allocated value is non-null before construction.

I.e. not after. In the c++-allocator-inlining=true mode, we need to make the
assumption that the conservatively evaluated operator new() has returned a
non-null value. Previously we did this on CXXNewExpr, but now we have to do that
before calling the constructor, because some clever constructors are sometimes
assuming that their "this" is null and doing weird stuff. We would also crash
upon evaluating CXXNewExpr when the allocator was inlined and returned null and
had a throw specification; this is UB even for custom allocators, but we still
need not to crash.

Added more FIXME tests to ensure that eventually we fix calling the constructor
for null return values.

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

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

6 years agoRevert r323051 "[cmake] Use CLANG_BINARY_DIR to determine the build directory."
Vassil Vassilev [Wed, 24 Jan 2018 19:26:50 +0000 (19:26 +0000)]
Revert r323051 "[cmake] Use CLANG_BINARY_DIR to determine the build directory."

This broke swift builds.

Thanks for the post-commit review of Chris Bieneman and Davide Italiano!

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

6 years agoIRGen: Emit an inline implementation of __builtin_wmemcmp on MSVCRT platforms.
Peter Collingbourne [Wed, 24 Jan 2018 18:59:58 +0000 (18:59 +0000)]
IRGen: Emit an inline implementation of __builtin_wmemcmp on MSVCRT platforms.

The MSVC runtime library does not provide a definition of wmemcmp,
so we need an inline implementation.

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

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

6 years agoDon't create hidden dllimport global values.
Rafael Espindola [Wed, 24 Jan 2018 18:58:32 +0000 (18:58 +0000)]
Don't create hidden dllimport global values.

Hidden visibility is almost the opposite of dllimport. We were
producing them before (dllimport wins in the existing llvm
implementation), but now the llvm verifier produces an error.

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

6 years ago[Hexagon] Accept lowercase b in -hvx-length=64b and -hvx-length=128b
Krzysztof Parzyszek [Wed, 24 Jan 2018 18:42:19 +0000 (18:42 +0000)]
[Hexagon] Accept lowercase b in -hvx-length=64b and -hvx-length=128b

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

6 years ago[CodeComplete] only respect LoadExternal hint at namespace/tu scope
Sam McCall [Wed, 24 Jan 2018 17:50:20 +0000 (17:50 +0000)]
[CodeComplete] only respect LoadExternal hint at namespace/tu scope

Reviewers: ilya-biryukov

Subscribers: cfe-commits

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

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

6 years ago[CUDA] Disable PGO and coverage instrumentation in NVPTX.
Artem Belevich [Wed, 24 Jan 2018 17:41:02 +0000 (17:41 +0000)]
[CUDA] Disable PGO and coverage instrumentation in NVPTX.

NVPTX does not have runtime support necessary for profiling to work
and even call arc collection is prohibitively expensive. Furthermore,
there's no easy way to collect the samples. NVPTX also does not
support global constructors that clang generates if sample/arc collection
is enabled.

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

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

6 years agoclang-cl: Parse /permissive-, /Bt, Bt+ (PR32672)
Hans Wennborg [Wed, 24 Jan 2018 15:18:12 +0000 (15:18 +0000)]
clang-cl: Parse /permissive-, /Bt, Bt+ (PR32672)

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

6 years ago[clang-format] Disable string literal breaking for text protos
Krasimir Georgiev [Wed, 24 Jan 2018 11:18:39 +0000 (11:18 +0000)]
[clang-format] Disable string literal breaking for text protos

Summary:
Commonly string literals in protos are already multiline, so breaking them
further is undesirable.

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

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

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

6 years agoFix typos of occurred and occurrence
Malcolm Parsons [Wed, 24 Jan 2018 10:26:09 +0000 (10:26 +0000)]
Fix typos of occurred and occurrence

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

6 years agoRefactor RecursiveASTVisitor test for post-order traversal
Raphael Isemann [Wed, 24 Jan 2018 09:40:16 +0000 (09:40 +0000)]
Refactor RecursiveASTVisitor test for post-order traversal

Summary:
The new test is now in the right directory with the other ASTVisitor tests and uses
now the provided TestVisitor framework.

Subscribers: hintonda, v.g.vassilev, klimek, cfe-commits, mgorny

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

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

6 years agoAttempt to fix implicit-fallthrough warning after r323218.
Nico Weber [Wed, 24 Jan 2018 01:47:22 +0000 (01:47 +0000)]
Attempt to fix implicit-fallthrough warning after r323218.

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

6 years agoFix typo in comment.
Nico Weber [Wed, 24 Jan 2018 01:45:57 +0000 (01:45 +0000)]
Fix typo in comment.

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

6 years agoFix test Driver/solaris-ld.c for Windows.
Douglas Yung [Wed, 24 Jan 2018 00:05:01 +0000 (00:05 +0000)]
Fix test Driver/solaris-ld.c for Windows.

- Test needs to be able to handle "clang.exe" on Windows
- Test needs to be able to handle either '/' or '\\' used as the path separator

Reviewed by Paul Robinson

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

6 years agoAdjust MaxAtomicInlineWidth for i386/i486 targets.
Wei Mi [Tue, 23 Jan 2018 23:27:57 +0000 (23:27 +0000)]
Adjust MaxAtomicInlineWidth for i386/i486 targets.

This is to fix the bug reported in https://bugs.llvm.org/show_bug.cgi?id=34347#c6.
Currently, all  MaxAtomicInlineWidth of x86-32 targets are set to 64. However,
i386 doesn't support any cmpxchg related instructions. i486 only supports cmpxchg.
So in this patch MaxAtomicInlineWidth is reset as follows:
For i386, the MaxAtomicInlineWidth should be 0 because no cmpxchg is supported.
For i486, the MaxAtomicInlineWidth should be 32 because it supports cmpxchg.
For others 32 bits x86 cpu, the MaxAtomicInlineWidth should be 64 because of cmpxchg8b.

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

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

6 years agoFix test Driver/solaris-ld.c
Richard Trieu [Tue, 23 Jan 2018 21:58:56 +0000 (21:58 +0000)]
Fix test Driver/solaris-ld.c

Allow test to accept calls to ld without full path.

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

6 years agoAST: correct mangling for SEL on MS ABI
Saleem Abdulrasool [Tue, 23 Jan 2018 20:56:52 +0000 (20:56 +0000)]
AST: correct mangling for SEL on MS ABI

We would previously treat `SEL` as a pointer-only type.  This is not the
case.  It should be treated similarly to `id` and `Class`.  Add some
test cases to ensure that it will be properly handled as well.

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

6 years ago[WebAssembly] Factor out settings common to wasm32 and wasm64. NFC.
Dan Gohman [Tue, 23 Jan 2018 20:22:12 +0000 (20:22 +0000)]
[WebAssembly] Factor out settings common to wasm32 and wasm64. NFC.

MaxAtomicPromoteWidth and MaxAtomicInlineWidth are 64 on both
wasm32 and wasm64, so they can be set in shared code.

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

6 years ago[analyzer] Mark lines as relevant even if they weren't executed but have a label...
George Karpenkov [Tue, 23 Jan 2018 20:01:31 +0000 (20:01 +0000)]
[analyzer] Mark lines as relevant even if they weren't executed but have a label attached

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

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

6 years agoCodeGen: use `llvm.used` for ObjC protocols
Saleem Abdulrasool [Tue, 23 Jan 2018 19:35:51 +0000 (19:35 +0000)]
CodeGen: use `llvm.used` for ObjC protocols

These symbols are supposed to be preserved even by the linker.  Use the
`llvm.used` to ensure that the symbols are not removed by DCE in the
linker.  This should be a no-op change on MachO since the symbols are
annotated as `no_dead_strip`.

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

6 years ago[analyzer] Show full analyzer invocation for reproducibility in HTML reports
George Karpenkov [Tue, 23 Jan 2018 19:28:52 +0000 (19:28 +0000)]
[analyzer] Show full analyzer invocation for reproducibility in HTML reports

Analyzing problems which appear in scan-build results can be very
difficult, as after the launch no exact invocation is stored, and it's
super-hard to launch the debugger.
With this patch, the exact analyzer invocation appears in the footer,
and can be copied to debug/check reproducibility/etc.

rdar://35980230

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

6 years ago[html] [NFC] Use raw strings to dump the style table.
George Karpenkov [Tue, 23 Jan 2018 19:28:43 +0000 (19:28 +0000)]
[html] [NFC] Use raw strings to dump the style table.

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

6 years agoAST: adjust ObjC MS mangling to work with typedefs
Saleem Abdulrasool [Tue, 23 Jan 2018 19:17:25 +0000 (19:17 +0000)]
AST: adjust ObjC MS mangling to work with typedefs

Rather than hardcode the pointerness of the `id` and `class` types,
handle them generically.  This allows for the template type
specialization of `remove_pointer<id>` which would look through the `id`
type and deal with the `objc_object` structure without the pointer.

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

6 years ago[CUDA] CUDA has no device-side library builtins.
Artem Belevich [Tue, 23 Jan 2018 19:08:18 +0000 (19:08 +0000)]
[CUDA] CUDA has no device-side library builtins.

We should (almost) never consider a device-side declaration to match a
library builtin functio.  Otherwise clang may ignore the implementation
provided by the CUDA headers and emit clang's idea of the builtin.

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

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

6 years ago[OPENMP] Replace call of EmitLoadOfLValue() by EmitLoadOfScalar(), NFC.
Alexey Bataev [Tue, 23 Jan 2018 18:44:14 +0000 (18:44 +0000)]
[OPENMP] Replace call of EmitLoadOfLValue() by EmitLoadOfScalar(), NFC.

Replace calls of EmitLoadOfLValue() by EmitLoadOfScalar() functions if
it is known that the value is scalar.

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

6 years ago[Docs] Re-generate command line documentation.
Craig Topper [Tue, 23 Jan 2018 18:40:15 +0000 (18:40 +0000)]
[Docs] Re-generate command line documentation.

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

6 years ago[OPENMP] Remove more empty SourceLocations() from the code.
Alexey Bataev [Tue, 23 Jan 2018 18:12:38 +0000 (18:12 +0000)]
[OPENMP] Remove more empty SourceLocations() from the code.

Removed more empty SourceLocations() from the OpenMP code and replaced
with the correct locations for better debug info emission.

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

6 years agotest/Driver: Add some --stdlib=platform, NFC.
Jonas Hahnfeld [Tue, 23 Jan 2018 18:12:12 +0000 (18:12 +0000)]
test/Driver: Add some --stdlib=platform, NFC.

This fixes the failing test when building with CLANG_DEFAULT_CXX_STDLIB.

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

6 years agotest: simplify the matching logic a bit (NFC)
Saleem Abdulrasool [Tue, 23 Jan 2018 17:57:04 +0000 (17:57 +0000)]
test: simplify the matching logic a bit (NFC)

Use CHECK-SAME directives to simplify the test conditions a bit.  This
makes it easier to see what is being checked.  NFC.

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

6 years agoName two bool parameters. No behavior change.
Nico Weber [Tue, 23 Jan 2018 17:29:41 +0000 (17:29 +0000)]
Name two bool parameters. No behavior change.

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

6 years agoclang-format: Support macros in front of @interface / @protocol for ObjC code.
Nico Weber [Tue, 23 Jan 2018 17:10:25 +0000 (17:10 +0000)]
clang-format: Support macros in front of @interface / @protocol for ObjC code.

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

6 years agotest: adjust the target for some Windows tests
Saleem Abdulrasool [Tue, 23 Jan 2018 17:05:57 +0000 (17:05 +0000)]
test: adjust the target for some Windows tests

The tests are targeting Windows but do not specify an environment.  When
executed on Linux, they would use an ELF output rather than the COFF
output.  Explicitly provide an environment.

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

6 years ago[WebAssembly] Add mem.* builtin functions.
Dan Gohman [Tue, 23 Jan 2018 17:04:04 +0000 (17:04 +0000)]
[WebAssembly] Add mem.* builtin functions.

This corresponds to r323222 in LLVM. The new names are not yet
finalized, so use them at your own risk.

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

6 years agoclang-format: Support formatting Java 8 interface default methods.
Nico Weber [Tue, 23 Jan 2018 16:30:56 +0000 (16:30 +0000)]
clang-format: Support formatting Java 8 interface default methods.

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

6 years agoFix Driver/solaris-ld.c test on Windows
Fedor Sergeev [Tue, 23 Jan 2018 13:59:11 +0000 (13:59 +0000)]
Fix Driver/solaris-ld.c test on Windows

Fixing failure introduced with r323193.

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

6 years ago[Tooling] Added a VFS parameter to ClangTool
Ilya Biryukov [Tue, 23 Jan 2018 12:30:02 +0000 (12:30 +0000)]
[Tooling] Added a VFS parameter to ClangTool

Summary:
The parameter overrides the underlying vfs used by ClangTool for
filesystem operations.

Patch by Vladimir Plyashkun.

Reviewers: alexfh, ilya-biryukov

Reviewed By: ilya-biryukov

Subscribers: klimek, cfe-commits

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

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

6 years ago[Solaris] Make RHEL devtoolsets handling Linux-specific
Fedor Sergeev [Tue, 23 Jan 2018 12:24:01 +0000 (12:24 +0000)]
[Solaris] Make RHEL devtoolsets handling Linux-specific

Summary:
This patch is meant to address the last outstanding review comment on the already approved
(but not yet commited) https://reviews.llvm.org/D35755, namely making the handling of the RHEL
devtoolsets Linux-specific.

Don't know if it's best integrated into the former or applied subsequently.

Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu.

Reviewers: fedor.sergeev, tstellar, jyknight

Reviewed By: fedor.sergeev

Subscribers: cfe-commits

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

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

6 years ago[Solaris] gcc toolchain handling revamp
Fedor Sergeev [Tue, 23 Jan 2018 12:23:52 +0000 (12:23 +0000)]
[Solaris] gcc toolchain handling revamp

Summary:
General idea is to utilize generic (mostly Generic_GCC) code
and get rid of Solaris-specific handling as much as possible.

In particular:
- scanLibDirForGCCTripleSolaris was removed, relying on generic
  CollectLibDirsAndTriples

- findBiarchMultilibs is now properly utilized to switch between
   m32 and m64 include & lib paths on Solaris

- C system include handling copied from Linux (bar multilib hacks)

Fixes PR24606.

Reviewers: dlj, rafael, jyknight, theraven, tstellar

Reviewed By: jyknight

Subscribers: aaron.ballman, mgorny, krytarowski, ro, joerg, cfe-commits

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

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

6 years ago[clang-format] Ignore UnbreakableTailLength sometimes during breaking
Krasimir Georgiev [Tue, 23 Jan 2018 11:26:19 +0000 (11:26 +0000)]
[clang-format] Ignore UnbreakableTailLength sometimes during breaking

Summary:
This patch fixes an issue where the UnbreakableTailLength would be counted towards
the length of a token during breaking, even though we can break after the token.

For example, this proto text with column limit 20
```
# ColumnLimit: 20  V
foo: {
  bar: {
    bazoo: "aaaaaaa"
  }
}
```
was broken:
```
# ColumnLimit: 20  V
foo: {
  bar: {
    bazoo:
        "aaaaaaa"
  }
}
```
because the 2 closing `}` were counted towards the string literal's `UnbreakableTailLength`.

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

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

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

6 years ago[ARM] Pass _Float16 as int or float
Sjoerd Meijer [Tue, 23 Jan 2018 10:13:49 +0000 (10:13 +0000)]
[ARM] Pass _Float16 as int or float

Pass and return _Float16 as if it were an int or float for ARM, but with the
top 16 bits unspecified, similarly like we already do for __fp16.

We will implement proper half-precision function argument lowering in the ARM
backend soon, but want to use this workaround in the mean time.

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

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

6 years ago[NFC] fix trivial typos in comments
Hiroshi Inoue [Tue, 23 Jan 2018 05:50:06 +0000 (05:50 +0000)]
[NFC] fix trivial typos in comments

"the the" -> "the"

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

6 years agoNewPM: Improve/fix GCOV - which needs to run early in the pass pipeline.
David Blaikie [Tue, 23 Jan 2018 01:25:24 +0000 (01:25 +0000)]
NewPM: Improve/fix GCOV - which needs to run early in the pass pipeline.

Using a new extension point in the new PM, register GCOV at the start of
the pipeline rather than the end.

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

6 years agoAdd hasTrailingReturn AST matcher
Julie Hockett [Mon, 22 Jan 2018 22:45:23 +0000 (22:45 +0000)]
Add hasTrailingReturn AST matcher

Adds AST matcher for a FunctionDecl that has a trailing return type.

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

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

6 years ago[ASTMatchers] [NFC] Fix code examples
Fangrui Song [Mon, 22 Jan 2018 22:34:15 +0000 (22:34 +0000)]
[ASTMatchers] [NFC] Fix code examples

Subscribers: klimek, cfe-commits

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

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

6 years agoReland "[CodeGen] Fix crash when a function taking transparent union is redeclared."
Volodymyr Sapsai [Mon, 22 Jan 2018 22:29:24 +0000 (22:29 +0000)]
Reland "[CodeGen] Fix crash when a function taking transparent union is redeclared."

When a function taking transparent union is declared as taking one of
union members earlier in the translation unit, clang would hit an
"Invalid cast" assertion during EmitFunctionProlog. This case
corresponds to function f1 in test/CodeGen/transparent-union-redecl.c.
We decided to cast i32 to union because after merging function
declarations function parameter type becomes int,
CGFunctionInfo::ArgInfo type matches with ABIArgInfo type, so we decide
it is a trivial case. But these types should also be castable to
parameter declaration type which is not the case here.

Now the fix is in converting from ABIArgInfo type to VarDecl type and using
argument demotion when necessary.

Additional tests in Sema/transparent-union.c capture current behavior and make
sure there are no regressions.

rdar://problem/34949329

Reviewers: rjmccall, rafael

Reviewed By: rjmccall

Subscribers: aemerson, cfe-commits, kristof.beyls, ahatanak

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

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

6 years agoIntroduce the "retpoline" x86 mitigation technique for variant #2 of the speculative...
Chandler Carruth [Mon, 22 Jan 2018 22:05:25 +0000 (22:05 +0000)]
Introduce the "retpoline" x86 mitigation technique for variant #2 of the speculative execution vulnerabilities disclosed today, specifically identified by CVE-2017-5715, "Branch Target Injection", and is one of the two halves to Spectre..

Summary:
First, we need to explain the core of the vulnerability. Note that this
is a very incomplete description, please see the Project Zero blog post
for details:
https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html

The basis for branch target injection is to direct speculative execution
of the processor to some "gadget" of executable code by poisoning the
prediction of indirect branches with the address of that gadget. The
gadget in turn contains an operation that provides a side channel for
reading data. Most commonly, this will look like a load of secret data
followed by a branch on the loaded value and then a load of some
predictable cache line. The attacker then uses timing of the processors
cache to determine which direction the branch took *in the speculative
execution*, and in turn what one bit of the loaded value was. Due to the
nature of these timing side channels and the branch predictor on Intel
processors, this allows an attacker to leak data only accessible to
a privileged domain (like the kernel) back into an unprivileged domain.

The goal is simple: avoid generating code which contains an indirect
branch that could have its prediction poisoned by an attacker. In many
cases, the compiler can simply use directed conditional branches and
a small search tree. LLVM already has support for lowering switches in
this way and the first step of this patch is to disable jump-table
lowering of switches and introduce a pass to rewrite explicit indirectbr
sequences into a switch over integers.

However, there is no fully general alternative to indirect calls. We
introduce a new construct we call a "retpoline" to implement indirect
calls in a non-speculatable way. It can be thought of loosely as
a trampoline for indirect calls which uses the RET instruction on x86.
Further, we arrange for a specific call->ret sequence which ensures the
processor predicts the return to go to a controlled, known location. The
retpoline then "smashes" the return address pushed onto the stack by the
call with the desired target of the original indirect call. The result
is a predicted return to the next instruction after a call (which can be
used to trap speculative execution within an infinite loop) and an
actual indirect branch to an arbitrary address.

On 64-bit x86 ABIs, this is especially easily done in the compiler by
using a guaranteed scratch register to pass the target into this device.
For 32-bit ABIs there isn't a guaranteed scratch register and so several
different retpoline variants are introduced to use a scratch register if
one is available in the calling convention and to otherwise use direct
stack push/pop sequences to pass the target address.

This "retpoline" mitigation is fully described in the following blog
post: https://support.google.com/faqs/answer/7625886

We also support a target feature that disables emission of the retpoline
thunk by the compiler to allow for custom thunks if users want them.
These are particularly useful in environments like kernels that
routinely do hot-patching on boot and want to hot-patch their thunk to
different code sequences. They can write this custom thunk and use
`-mretpoline-external-thunk` *in addition* to `-mretpoline`. In this
case, on x86-64 thu thunk names must be:
```
  __llvm_external_retpoline_r11
```
or on 32-bit:
```
  __llvm_external_retpoline_eax
  __llvm_external_retpoline_ecx
  __llvm_external_retpoline_edx
  __llvm_external_retpoline_push
```
And the target of the retpoline is passed in the named register, or in
the case of the `push` suffix on the top of the stack via a `pushl`
instruction.

There is one other important source of indirect branches in x86 ELF
binaries: the PLT. These patches also include support for LLD to
generate PLT entries that perform a retpoline-style indirection.

The only other indirect branches remaining that we are aware of are from
precompiled runtimes (such as crt0.o and similar). The ones we have
found are not really attackable, and so we have not focused on them
here, but eventually these runtimes should also be replicated for
retpoline-ed configurations for completeness.

For kernels or other freestanding or fully static executables, the
compiler switch `-mretpoline` is sufficient to fully mitigate this
particular attack. For dynamic executables, you must compile *all*
libraries with `-mretpoline` and additionally link the dynamic
executable and all shared libraries with LLD and pass `-z retpolineplt`
(or use similar functionality from some other linker). We strongly
recommend also using `-z now` as non-lazy binding allows the
retpoline-mitigated PLT to be substantially smaller.

When manually apply similar transformations to `-mretpoline` to the
Linux kernel we observed very small performance hits to applications
running typical workloads, and relatively minor hits (approximately 2%)
even for extremely syscall-heavy applications. This is largely due to
the small number of indirect branches that occur in performance
sensitive paths of the kernel.

When using these patches on statically linked applications, especially
C++ applications, you should expect to see a much more dramatic
performance hit. For microbenchmarks that are switch, indirect-, or
virtual-call heavy we have seen overheads ranging from 10% to 50%.

However, real-world workloads exhibit substantially lower performance
impact. Notably, techniques such as PGO and ThinLTO dramatically reduce
the impact of hot indirect calls (by speculatively promoting them to
direct calls) and allow optimized search trees to be used to lower
switches. If you need to deploy these techniques in C++ applications, we
*strongly* recommend that you ensure all hot call targets are statically
linked (avoiding PLT indirection) and use both PGO and ThinLTO. Well
tuned servers using all of these techniques saw 5% - 10% overhead from
the use of retpoline.

We will add detailed documentation covering these components in
subsequent patches, but wanted to make the core functionality available
as soon as possible. Happy for more code review, but we'd really like to
get these patches landed and backported ASAP for obvious reasons. We're
planning to backport this to both 6.0 and 5.0 release streams and get
a 5.0 release with just this cherry picked ASAP for distros and vendors.

This patch is the work of a number of people over the past month: Eric, Reid,
Rui, and myself. I'm mailing it out as a single commit due to the time
sensitive nature of landing this and the need to backport it. Huge thanks to
everyone who helped out here, and everyone at Intel who helped out in
discussions about how to craft this. Also, credit goes to Paul Turner (at
Google, but not an LLVM contributor) for much of the underlying retpoline
design.

Reviewers: echristo, rnk, ruiu, craig.topper, DavidKreitzer

Subscribers: sanjoy, emaste, mcrosier, mgorny, mehdi_amini, hiraditya, llvm-commits

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

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

6 years ago[CodeComplete] Omit templated constructors from member list too.
Sam McCall [Mon, 22 Jan 2018 20:44:47 +0000 (20:44 +0000)]
[CodeComplete] Omit templated constructors from member list too.

Also avoid printing a 'void' return type for constructor expressions.

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

6 years ago[analyzer] Protect against dereferencing a null pointer
Alexander Shaposhnikov [Mon, 22 Jan 2018 20:18:42 +0000 (20:18 +0000)]
[analyzer] Protect against dereferencing a null pointer

The check (inside StackHintGeneratorForSymbol::getMessage)
if (!N)
    return getMessageForSymbolNotFound()
is moved to the beginning of the function.

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

Test plan: make check-all

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

6 years ago[CodeComplete] Fix completion in the middle of idents in macro calls
Ilya Biryukov [Mon, 22 Jan 2018 17:18:28 +0000 (17:18 +0000)]
[CodeComplete] Fix completion in the middle of idents in macro calls

Summary:
This patch removes IdentifierInfo from completion token after remembering
the identifier in the preprocessor.

Prior to this patch, completion token had the IdentifierInfo set to null when
completing at the start of identifier and to the II for completion prefix
when in the middle of identifier.

This patch unifies how code completion token is handled when it is insterted
before the identifier and in the middle of the identifier.

The actual IdentifierInfo can still be obtained from the Preprocessor.

Reviewers: bkramer, arphaman

Reviewed By: bkramer

Subscribers: cfe-commits

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

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

6 years ago[DOCS] Mention OpenMP Tools Interface in runtime library
Jonas Hahnfeld [Mon, 22 Jan 2018 15:27:45 +0000 (15:27 +0000)]
[DOCS] Mention OpenMP Tools Interface in runtime library

Also list supported configurations (architectures + operating
systems).

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

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

6 years ago[modules] Correctly overload getModule in the MultiplexExternalSemaSource
Raphael Isemann [Mon, 22 Jan 2018 15:27:25 +0000 (15:27 +0000)]
[modules] Correctly overload getModule in the MultiplexExternalSemaSource

Summary:
The MultiplexExternalSemaSource doesn't correctly overload the `getModule` function,
causing the multiplexer to not forward this call as intended.

Reviewers: v.g.vassilev

Reviewed By: v.g.vassilev

Subscribers: cfe-commits

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

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

6 years ago[analyzer] Model and check unrepresentable left shifts
Gabor Horvath [Mon, 22 Jan 2018 13:32:10 +0000 (13:32 +0000)]
[analyzer] Model and check unrepresentable left shifts

Patch by: Reka Nikolett Kovacs

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

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

6 years ago[NFC] fix trivial typos in comments
Hiroshi Inoue [Mon, 22 Jan 2018 07:44:38 +0000 (07:44 +0000)]
[NFC] fix trivial typos in comments

"the the" -> "the"

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

6 years ago[analyzer] Provide a check name when MallocChecker enables CStringChecker
Devin Coughlin [Sat, 20 Jan 2018 23:11:17 +0000 (23:11 +0000)]
[analyzer] Provide a check name when MallocChecker enables CStringChecker

Fix an assertion failure caused by a missing CheckName. The malloc checker
enables "basic" support in the CStringChecker, which causes some CString
bounds checks to be enabled. In this case, make sure that we have a
valid CheckName for the BugType.

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

6 years ago[cmake] Use CLANG_BINARY_DIR to determine the build directory.
Vassil Vassilev [Sat, 20 Jan 2018 21:43:35 +0000 (21:43 +0000)]
[cmake] Use CLANG_BINARY_DIR to determine the build directory.

The patch puts the ClangConfig.cmake in the expected location  when clang is
embedded into a framework.

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

6 years ago[X86] Add rdpid command line option and intrinsics.
Craig Topper [Sat, 20 Jan 2018 18:36:52 +0000 (18:36 +0000)]
[X86] Add rdpid command line option and intrinsics.

Summary: This patch adds -mrdpid/-mno-rdpid and the rdpid intrinsic. The corresponding LLVM commit has already been made.

Reviewers: RKSimon, spatel, zvi, AndreiGrischenko

Reviewed By: RKSimon

Subscribers: cfe-commits

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

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

6 years ago[X86] Put the code that defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 for the preproces...
Craig Topper [Sat, 20 Jan 2018 18:36:06 +0000 (18:36 +0000)]
[X86] Put the code that defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 for the preprocessor with the other __GCC_HAVE_SYNC_COMPARE_AND_SWAP_* defines. NFC

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

6 years agoLink sanitized programs on NetBSD with -lkvm
Kamil Rytarowski [Sat, 20 Jan 2018 01:03:45 +0000 (01:03 +0000)]
Link sanitized programs on NetBSD with -lkvm

Summary:
kvm - kernel memory interface

The kvm(3) functions like kvm_open(), kvm_getargv() or kvm_getenvv()
are used in programs that can request information about a kernel and
its processes. The LLVM sanitizers will make use of them on NetBSD.

Sponsored by <The NetBSD Foundation>

Reviewers: joerg, vitalybuka, dvyukov

Reviewed By: vitalybuka

Subscribers: llvm-commits, cfe-commits, #sanitizers

Tags: #sanitizers

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

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

6 years ago[Lex] Fix crash on code completion in comment in included file.
Volodymyr Sapsai [Fri, 19 Jan 2018 23:41:47 +0000 (23:41 +0000)]
[Lex] Fix crash on code completion in comment in included file.

This fixes PR32732 by updating CurLexerKind to reflect available lexers.
We were hitting null pointer in Preprocessor::Lex because CurLexerKind
was CLK_Lexer but CurLexer was null. And we set it to null in
Preprocessor::HandleEndOfFile when exiting a file with code completion
point.

To reproduce the crash it is important for a comment to be inside a
class specifier. In this case in Parser::ParseClassSpecifier we improve
error recovery by pushing a semicolon token back into the preprocessor
and later on try to lex a token because we haven't reached the end of
file.

Also clang crashes only on code completion in included file, i.e. when
IncludeMacroStack is not empty. Though we reset CurLexer even if include
stack is empty. The difference is that during pushing back a semicolon
token, preprocessor calls EnterCachingLexMode which decides it is
already in caching mode because various lexers are null and
IncludeMacroStack is not empty. As the result, CurLexerKind remains
CLK_Lexer instead of updating to CLK_CachingLexer.

rdar://problem/34787685

Reviewers: akyrtzi, doug.gregor, arphaman

Reviewed By: arphaman

Subscribers: cfe-commits, kfunk, arphaman, nemanjai, kbarton

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

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

6 years ago[AArch64] Add ARMv8.2-A FP16 scalar intrinsics
Abderrazek Zaafrani [Fri, 19 Jan 2018 23:11:18 +0000 (23:11 +0000)]
[AArch64] Add ARMv8.2-A FP16 scalar intrinsics

https://reviews.llvm.org/D41792

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

6 years agoAllow BlockDecl in CXXRecord scope to have no access specifier.
Richard Trieu [Fri, 19 Jan 2018 20:46:19 +0000 (20:46 +0000)]
Allow BlockDecl in CXXRecord scope to have no access specifier.

Using a BlockDecl in a default member initializer causes it to be attached to
CXXMethodDecl without its access specifier being set.  This prevents a crash
where getAccess is called on this BlockDecl, since that method expects any
Decl in CXXRecord scope to have an access specifier.

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

6 years ago[X86] Add goldmont to test/Driver/x86-march.c
Craig Topper [Fri, 19 Jan 2018 19:43:36 +0000 (19:43 +0000)]
[X86] Add goldmont to test/Driver/x86-march.c

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

6 years ago[cmake] Also pass CMAKE_ASM_COMPILER_ID to next stage when bootstrapping
Don Hinton [Fri, 19 Jan 2018 18:31:12 +0000 (18:31 +0000)]
[cmake] Also pass CMAKE_ASM_COMPILER_ID to next stage when bootstrapping

Summary:
When setting CMAKE_ASM_COMPILER=clang, we also need to set
CMAKE_ASM_COMPILER_ID=Clang.

This is needed because cmake won't set CMAKE_ASM_COMPILER_ID if
CMAKE_ASM_COMPILER is already set.

Without CMAKE_ASM_COMPILER_ID, cmake can't set
CMAKE_ASM_COMPILER_OPTIONS_TARGET either, which means
CMAKE_ASM_COMPILER_TARGET is ignored, causing cross compiling to fail,
i.e., `--target=${CMAKE_ASM_COMPILER_TARGET}` isn't passed.

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

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

6 years ago[WebAssembly] Add target flags for sign-ext opcodes.
Dan Gohman [Fri, 19 Jan 2018 17:16:32 +0000 (17:16 +0000)]
[WebAssembly] Add target flags for sign-ext opcodes.

Add -msign-ext and -mno-sign-ext to control the new sign-ext target
feature.

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

6 years agoChange memcpy/memove/memset to have dest and source alignment attributes (Step 1).
Daniel Neilson [Fri, 19 Jan 2018 17:12:54 +0000 (17:12 +0000)]
Change memcpy/memove/memset to have dest and source alignment attributes (Step 1).

Summary:
  Upstream LLVM is changing the the prototypes of the @llvm.memcpy/memmove/memset
intrinsics. This change updates the Clang tests for this change.

  The @llvm.memcpy/memmove/memset intrinsics currently have an explicit argument
which is required to be a constant integer. It represents the alignment of the
dest (and source), and so must be the minimum of the actual alignment of the
two.

 This change removes the alignment argument in favour of placing the alignment
attribute on the source and destination pointers of the memory intrinsic call.

 For example, code which used to read:
   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 100, i32 4, i1 false)
will now read
   call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %dest, i8* align 4 %src, i32 100, i1 false)

 At this time the source and destination alignments must be the same (Step 1).
Step 2 of the change, to be landed shortly, will relax that contraint and allow
the source and destination to have different alignments.

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

6 years ago[clang-format] Adds a canonical delimiter to raw string formatting
Krasimir Georgiev [Fri, 19 Jan 2018 16:18:47 +0000 (16:18 +0000)]
[clang-format] Adds a canonical delimiter to raw string formatting

Summary:
This patch adds canonical delimiter support to the raw string formatting.
This allows matching delimiters to be updated to the canonical one.

Reviewers: bkramer

Reviewed By: bkramer

Subscribers: klimek, cfe-commits

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

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

6 years ago[clang-format] Fix shortening blocks in macros causing merged next line
Krasimir Georgiev [Fri, 19 Jan 2018 16:12:37 +0000 (16:12 +0000)]
[clang-format] Fix shortening blocks in macros causing merged next line

Summary:
This patch addresses bug 36002, where a combination of options causes the line
following a short block in macro to be merged with that macro.

Reviewers: bkramer

Reviewed By: bkramer

Subscribers: klimek, cfe-commits

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

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

6 years ago[CodeGenCXX] annotate a GEP to a derived class with 'inbounds' (PR35909)
Sanjay Patel [Fri, 19 Jan 2018 15:14:51 +0000 (15:14 +0000)]
[CodeGenCXX] annotate a GEP to a derived class with 'inbounds' (PR35909)

The standard says:
[expr.static.cast] p11: "If the prvalue of type “pointer to cv1 B” points to a B
that is actually a subobject of an object of type D, the resulting pointer points
to the enclosing object of type D. Otherwise, the behavior is undefined."

Therefore, the GEP must be inbounds.

This should solve the failure to optimize away a null check shown in PR35909:
https://bugs.llvm.org/show_bug.cgi?id=35909

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

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

6 years ago[Fuchsia] Tests for the Fuzzer support in Fuchsia driver
Petr Hosek [Fri, 19 Jan 2018 04:08:06 +0000 (04:08 +0000)]
[Fuchsia] Tests for the Fuzzer support in Fuchsia driver

This adds driver tests for the Fuzzer support.

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

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

6 years ago[Refactor] Use enum instead of magic number in handleX86ForceAlignArgPointerAttr...
Hongbin Zheng [Fri, 19 Jan 2018 03:07:00 +0000 (03:07 +0000)]
[Refactor] Use enum instead of magic number in handleX86ForceAlignArgPointerAttr, NFC

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

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

6 years ago[Fuchsia] Enable Fuzzer as a supported sanitizer on Fuchsia
Petr Hosek [Fri, 19 Jan 2018 01:58:26 +0000 (01:58 +0000)]
[Fuchsia] Enable Fuzzer as a supported sanitizer on Fuchsia

libFuzzer has been ported to Fuchsia so enable it in the driver.

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

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

6 years ago[X86] Add missing check for RDSEED to ICL, CNL, SKX sections of test/Preprocessor...
Craig Topper [Fri, 19 Jan 2018 00:28:42 +0000 (00:28 +0000)]
[X86] Add missing check for RDSEED to ICL, CNL, SKX sections of test/Preprocessor/predefined-arch-macros.c

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

6 years agoRemove TautologicalInRangeCompare from Extra and TautologicalCompare.
Nico Weber [Thu, 18 Jan 2018 21:40:27 +0000 (21:40 +0000)]
Remove TautologicalInRangeCompare from Extra and TautologicalCompare.

This removes the following (already default-off) warnings from -Wextra:
  -Wtautological-type-limit-compare,
  -Wtautological-unsigned-zero-compare
  -Wtautological-unsigned-enum-zero-compare

On the thread "[cfe-dev] -Wtautological-constant-compare issues", clang
code owners Richard Smith, John McCall, and Reid Kleckner as well as
libc++ code owner Marshall Clow stated that these new warnings are not
yet ready for prime time and shouldn't be part of -Wextra.

Furthermore, Vedant Kumar (Apple), Peter Hosek (Fuchsia), and me (Chromium)
expressed the same concerns (Vedant on that thread, Peter on
https://reviews.llvm.org/D39462, me on https://reviews.llvm.org/D41512).

So remove them from -Wextra, and remove TautologicalInRangeCompare from
TautologicalCompare too until they're usable with real-world code.

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

6 years agoc-index-test: small fix to CXString handling and disposal
Steve O'Brien [Thu, 18 Jan 2018 20:21:07 +0000 (20:21 +0000)]
c-index-test: small fix to CXString handling and disposal

Summary: (Separating some unrelated changes out of D42043)

Reviewers: vsk, benlangmuir, akyrtzi

Subscribers: cfe-commits

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

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

6 years agoConvert comment to C-style to prevent warning
Sam Clegg [Thu, 18 Jan 2018 19:31:33 +0000 (19:31 +0000)]
Convert comment to C-style to prevent warning

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

6 years ago[ClangFormat] ObjCSpaceBeforeProtocolList should be true in the google style
Ben Hamilton [Thu, 18 Jan 2018 18:37:16 +0000 (18:37 +0000)]
[ClangFormat] ObjCSpaceBeforeProtocolList should be true in the google style

Summary:
The Google style guide is neutral on whether there should be a
space before the protocol list in an Objective-C @interface or
@implementation.

The majority of Objective-C code in both Apple's public
header files and Google's open-source uses a space before
the protocol list, so this changes the google style to
default ObjCSpaceBeforeProtocolList to true.

Test Plan: make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: krasimir, djasper, klimek

Reviewed By: krasimir

Subscribers: klimek, cfe-commits

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

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

6 years ago[OpenMP] Correct generation of offloading entries
Jonas Hahnfeld [Thu, 18 Jan 2018 15:38:03 +0000 (15:38 +0000)]
[OpenMP] Correct generation of offloading entries

Firstly, each offloading entry must have a unique name or the
linker will complain if there are multiple files with target
regions. Secondly, the compiler must not introduce padding so
mark the struct with a PackedAttr.

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

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

6 years ago[Frontend] Allow to use PrecompiledPreamble without calling CanReuse
Ilya Biryukov [Thu, 18 Jan 2018 15:16:53 +0000 (15:16 +0000)]
[Frontend] Allow to use PrecompiledPreamble without calling CanReuse

Summary:
The new method 'OverridePreamble' allows to override the preamble of
any source file without checking if preamble bounds or dependencies
were changed.

This is used for completion in clangd.

Reviewers: bkramer, sammccall

Reviewed By: sammccall

Subscribers: cfe-commits

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

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

6 years agoFix MSVC "uninitialized variable" warning.
Simon Pilgrim [Thu, 18 Jan 2018 13:28:54 +0000 (13:28 +0000)]
Fix MSVC "uninitialized variable" warning.

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

6 years ago[ASTMatcher] Add isScoped matcher for enumDecl.
Haojian Wu [Thu, 18 Jan 2018 09:47:57 +0000 (09:47 +0000)]
[ASTMatcher] Add isScoped matcher for enumDecl.

Summary:

Reviewers: bkramer, aaron.ballman

Subscribers: aaron.ballman, cfe-commits, klimek

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

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

6 years agoRevert rC322769: [RISCV] Propagate -mabi and -march values to GNU assembler.
Hiroshi Inoue [Thu, 18 Jan 2018 06:13:25 +0000 (06:13 +0000)]
Revert rC322769: [RISCV] Propagate -mabi and -march values to GNU assembler.

Temporarily revert rC322769 due to buildbot failurs.

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

6 years agoFix Scope::dump()
Richard Trieu [Thu, 18 Jan 2018 04:28:56 +0000 (04:28 +0000)]
Fix Scope::dump()

The dump function for Scope only has 20 out of the 24 flags.  Since it looped
until no flags were left, having an unknown flag lead to an infinite loop.
That loop has been changed to a single pass for each flag, plus an assert to
alert if new flags are added.

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

6 years ago[analyzer] a few helper methods for getting and comparing symbolic values
George Karpenkov [Thu, 18 Jan 2018 03:18:36 +0000 (03:18 +0000)]
[analyzer] a few helper methods for getting and comparing symbolic values

API calls should express intent, and that's a motivation behind this patch.

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

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

6 years agoUpdate for llvm change.
Rafael Espindola [Thu, 18 Jan 2018 02:08:38 +0000 (02:08 +0000)]
Update for llvm change.

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

6 years ago[analyzer] NFC: Remove unused method - BugReporter::RemoveUnneededCalls().
Artem Dergachev [Thu, 18 Jan 2018 01:40:31 +0000 (01:40 +0000)]
[analyzer] NFC: Remove unused method - BugReporter::RemoveUnneededCalls().

Patch by Henry Wong!

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

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

6 years ago[analyzer] NFC: RetainCount: Protect from dumping raw region to path notes.
Artem Dergachev [Thu, 18 Jan 2018 01:01:56 +0000 (01:01 +0000)]
[analyzer] NFC: RetainCount: Protect from dumping raw region to path notes.

MemRegion::getString() is a wrapper around MemRegion::dump(), which is not
user-friendly and should never be used for diagnostic messages.

Actual cases where raw dumps were reaching the user were unintentionally fixed
in r315736; these were noticed accidentally and shouldn't be reproducible
anymore. For now RetainCountChecker only tracks pointers through variable
regions, and for those dumps are "fine". However, we should still use a less
dangerous method for producing our path notes.

This patch replaces the dump with printing a variable name, asserting that this
is indeed a variable.

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

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

6 years ago[analyzer] NFC: Use "= default" for default ProgramPoint constructors.
Artem Dergachev [Thu, 18 Jan 2018 00:55:29 +0000 (00:55 +0000)]
[analyzer] NFC: Use "= default" for default ProgramPoint constructors.

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

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

6 years ago[analyzer] operator new: Fix callback order for CXXNewExpr.
Artem Dergachev [Thu, 18 Jan 2018 00:53:50 +0000 (00:53 +0000)]
[analyzer] operator new: Fix callback order for CXXNewExpr.

PreStmt<CXXNewExpr> was never called.

Additionally, under c++-allocator-inlining=true, PostStmt<CXXNewExpr> was
called twice when the allocator was inlined: once after evaluating the
new-expression itself, once after evaluating the allocator call which, for the
lack of better options, uses the new-expression as the call site.

This patch fixes both problems.

Differential Revision: https://reviews.llvm.org/D41934
rdar://problem/12180598

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

6 years ago[analyzer] operator new: Add a new ProgramPoint for check::NewAllocator.
Artem Dergachev [Thu, 18 Jan 2018 00:50:19 +0000 (00:50 +0000)]
[analyzer] operator new: Add a new ProgramPoint for check::NewAllocator.

Add PostAllocatorCall program point to represent the moment in the analysis
between the operator new() call and the constructor call. Pointer cast from
"void *" to the correct object pointer type has already happened by this point.

The new program point, unlike the previously used PostImplicitCall, contains a
reference to the new-expression, which allows adding path diagnostics over it.

Differential Revision: https://reviews.llvm.org/D41800
rdar://problem/12180598

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

6 years ago[analyzer] Suppress "this" pointer escape during construction.
Artem Dergachev [Thu, 18 Jan 2018 00:44:41 +0000 (00:44 +0000)]
[analyzer] Suppress "this" pointer escape during construction.

Pointer escape event notifies checkers that a pointer can no longer be reliably
tracked by the analyzer. For example, if a pointer is passed into a function
that has no body available, or written into a global, MallocChecker would
no longer report memory leaks for such pointer.

In case of operator new() under -analyzer-config c++-allocator-inlining=true,
MallocChecker would start tracking the pointer allocated by operator new()
only to immediately meet a pointer escape event notifying the checker that the
pointer has escaped into a constructor (assuming that the body of the
constructor is not available) and immediately stop tracking it. Even though
it is theoretically possible for such constructor to put "this" into
a global container that would later be freed, we prefer to preserve the old
behavior of MallocChecker, i.e. a memory leak warning, in order to
be able to find any memory leaks in C++ at all. In fact, c++-allocator-inlining
*reduces* the amount of false positives coming from this-pointers escaping in
constructors, because it'd be able to inline constructors in some cases.

With other checkers working similarly, we simply suppress the escape event for
this-value of the constructor, regardless of analyzer options.

Differential Revision: https://reviews.llvm.org/D41797
rdar://problem/12180598

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

6 years agoUse an enum value instead of a string.
Rafael Espindola [Thu, 18 Jan 2018 00:20:03 +0000 (00:20 +0000)]
Use an enum value instead of a string.

The old StringSwitch use was also broken. It assumed that a
StringSwitch returns Optional<T> instead of T and was missing a
.Default.

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