]> granicus.if.org Git - clang/log
clang
6 years ago[ObjC] Allow declaring __strong pointer fields in structs in Objective-C
Akira Hatanaka [Wed, 28 Feb 2018 07:15:55 +0000 (07:15 +0000)]
[ObjC] Allow declaring __strong pointer fields in structs in Objective-C
ARC mode.

Declaring __strong pointer fields in structs was not allowed in
Objective-C ARC until now because that would make the struct non-trivial
to default-initialize, copy/move, and destroy, which is not something C
was designed to do. This patch lifts that restriction.

Special functions for non-trivial C structs are synthesized that are
needed to default-initialize, copy/move, and destroy the structs and
manage the ownership of the objects the __strong pointer fields point
to. Non-trivial structs passed to functions are destructed in the callee
function.

rdar://problem/33599681

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

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

6 years agoFix a couple of cases where we would fail to correctly parse deduced class template...
Richard Smith [Wed, 28 Feb 2018 03:02:23 +0000 (03:02 +0000)]
Fix a couple of cases where we would fail to correctly parse deduced class template specialization types.

Specifically, we would not properly parse these types within template arguments
(for non-type template parameters), and in tentative parses. Fixing both of
these essentially requires that we parse deduced template specialization types
as types in all contexts, even in template argument lists -- in particular,
tentative parsing may look ahead and annotate a deduced template specialization
type before we figure out that we're actually supposed to treat the tokens as a
template-name. We deal with this by simply permitting deduced template
specialization types when parsing template arguments, and converting them to
template template arguments.

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

6 years agoUpdate cxx_status to mark "SVN" items as "Clang 6" instead.
Richard Smith [Wed, 28 Feb 2018 03:02:07 +0000 (03:02 +0000)]
Update cxx_status to mark "SVN" items as "Clang 6" instead.

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

6 years ago[analyzer] [tests] Write to logfile instead of stdout while updating
George Karpenkov [Wed, 28 Feb 2018 01:55:23 +0000 (01:55 +0000)]
[analyzer] [tests] Write to logfile instead of stdout while updating

reference results

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

6 years ago[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings...
Eugene Zelenko [Wed, 28 Feb 2018 01:10:04 +0000 (01:10 +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@326292 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAMDGPU: Move run and check lines around to match processor order in AMDGPU.h
Konstantin Zhuravlyov [Wed, 28 Feb 2018 00:27:00 +0000 (00:27 +0000)]
AMDGPU: Move run and check lines around to match processor order in AMDGPU.h

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

6 years agoInline trivial function. NFC.
Rafael Espindola [Wed, 28 Feb 2018 00:14:18 +0000 (00:14 +0000)]
Inline trivial function. NFC.

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

6 years agoPass a GlobalDecl to setAliasAttributes. NFC.
Rafael Espindola [Wed, 28 Feb 2018 00:06:01 +0000 (00:06 +0000)]
Pass a GlobalDecl to setAliasAttributes. NFC.

This just makes a followup change easier to read.

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

6 years agoImprove the way attribute argument printing happens for omitted optional arguments...
Aaron Ballman [Tue, 27 Feb 2018 23:49:28 +0000 (23:49 +0000)]
Improve the way attribute argument printing happens for omitted optional arguments when pretty printing.

Patch by Joel Denny.

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

6 years agoPass a GlobalDecl to setFunctionDefinitionAttributes. NFC.
Rafael Espindola [Tue, 27 Feb 2018 23:44:36 +0000 (23:44 +0000)]
Pass a GlobalDecl to setFunctionDefinitionAttributes. NFC.

This just makes a followup patch easier to read.

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

6 years ago[analyzer] UndefinedAssignmentChecker: Better warning message in implicit ctors.
Artem Dergachev [Tue, 27 Feb 2018 22:05:55 +0000 (22:05 +0000)]
[analyzer] UndefinedAssignmentChecker: Better warning message in implicit ctors.

When a class forgets to initialize a field in the constructor, and then gets
copied around, a warning is emitted that the value assigned to a specific field
is undefined.

When the copy/move constructor is implicit (not written out in the code) but not
trivial (is not a trivial memory copy, eg. because members have an explicit copy
constructor), the body of such constructor is auto-generated in the AST.
In this case the checker's warning message is squeezed at the top of
the class declaration, and it gets hard to guess which field is at fault.

Fix the warning message to include the name of the field.

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

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

6 years agoAMDGPU: Define FP_FAST_FMA{F} macros for amdgcn
Konstantin Zhuravlyov [Tue, 27 Feb 2018 21:48:05 +0000 (21:48 +0000)]
AMDGPU: Define FP_FAST_FMA{F} macros for amdgcn

- Expand GK_*s (i.e. GFX6 -> GFX600, GFX601, etc.)
  - This allows us to choose features correctly in some cases (for example, fast fmaf is available on gfx600, but not gfx601)
- Move HasFMAF, HasFP64, HasLDEXPF to GPUInfo tables
- Add HasFastFMA, HasFastFMAF to GPUInfo tables
- Add missing tests

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

6 years ago[OPENMP] Emit warning for non-trivial types in map clauses.
Alexey Bataev [Tue, 27 Feb 2018 21:31:11 +0000 (21:31 +0000)]
[OPENMP] Emit warning for non-trivial types in map clauses.

If the mapped type is non-trivial, the warning message is emitted for
better user experience.

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

6 years ago[analyzer] MallocChecker: Suppress false positives in shared pointers.
Artem Dergachev [Tue, 27 Feb 2018 21:19:33 +0000 (21:19 +0000)]
[analyzer] MallocChecker: Suppress false positives in shared pointers.

Throw away MallocChecker warnings that occur after releasing a pointer within a
destructor (or its callees) after performing C11 atomic fetch_add or fetch_sub
within that destructor (or its callees).

This is an indication that the destructor's class is likely a
reference-counting pointer. The analyzer is not able to understand that the
original reference count is usually large enough to avoid most use-after-frees.

Even when the smart pointer is a local variable, we still have these false
positives that this patch suppresses, because the analyzer doesn't currently
support atomics well enough.

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

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

6 years ago[analyzer] Fix trivial copy for empty objects.
Artem Dergachev [Tue, 27 Feb 2018 21:10:08 +0000 (21:10 +0000)]
[analyzer] Fix trivial copy for empty objects.

The SVal for any empty C++ object is an UnknownVal. Because RegionStore does
not have binding extents, binding an empty object to an UnknownVal may
potentially overwrite existing bindings at the same offset.

Therefore, when performing a trivial copy of an empty object, don't try to
take the value of the object and bind it to the copy. Doing nothing is accurate
enough, and it doesn't screw any existing bindings.

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

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

6 years ago[analyzer] Track temporaries without construction contexts for destruction.
Artem Dergachev [Tue, 27 Feb 2018 21:02:58 +0000 (21:02 +0000)]
[analyzer] Track temporaries without construction contexts for destruction.

Sometimes it is not known at compile time which temporary objects will be
constructed, eg. 'x ? A() : B()' or 'C() || D()'. In this case we track which
temporary was constructed to know how to properly call the destructor.

Once the construction context for temporaries was introduced, we moved the
tracking code to the code that investigates the construction context.

Bring back the old mechanism because construction contexts are not always
available yet - eg. in the case where a temporary is constructed without a
constructor expression, eg. returned from a function by value. The mechanism
should still go away eventually.

Additionally, fix a bug in the temporary cleanup code for the case when
construction contexts are not available, which could lead to temporaries
staying in the program state and increasing memory consumption.

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

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

6 years ago[analyzer] Don't crash when dynamic type of a variable is set via placement new.
Artem Dergachev [Tue, 27 Feb 2018 20:54:40 +0000 (20:54 +0000)]
[analyzer] Don't crash when dynamic type of a variable is set via placement new.

If a variable or an otherwise a concrete typed-value region is being
placement-new'ed into, its dynamic type may change in arbitrary manners. And
when the region is used, there may be a third type that's different from both
the static and the dynamic type. It cannot be *completely* different from the
dynamic type, but it may be a base class of the dynamic type - and in this case
there isn't (and shouldn't be) any indication anywhere in the AST that there is
a derived-to-base cast from the dynamic type to the third type.

Perform a generic cast (evalCast()) from the third type to the dynamic type
in this case. From the point of view of the SVal hierarchy, this would have
produced non-canonical SVals if we used such generic cast in the normal case,
but in this case there doesn't seem to be a better option.

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

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

6 years ago[analyzer] Disable constructor inlining when lifetime extending through a field.
Artem Dergachev [Tue, 27 Feb 2018 20:14:06 +0000 (20:14 +0000)]
[analyzer] Disable constructor inlining when lifetime extending through a field.

Automatic destructors are missing in the CFG in situations like

  const int &x = C().x;

For now it's better to disable construction inlining, because inlining
constructors while doing nothing on destructors is very bad.

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

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

6 years ago[analyzer] Self-debug: Dump dynamic type info and taint with the program state.
Artem Dergachev [Tue, 27 Feb 2018 20:06:20 +0000 (20:06 +0000)]
[analyzer] Self-debug: Dump dynamic type info and taint with the program state.

Useful for debugging problems with dynamic type info and taint.

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

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

6 years ago[CFG] NFC: Refactor ConstructionContext into a finite set of cases.
Artem Dergachev [Tue, 27 Feb 2018 20:03:35 +0000 (20:03 +0000)]
[CFG] NFC: Refactor ConstructionContext into a finite set of cases.

ConstructionContext is moved into a separate translation unit and is separated
into multiple classes. The "old" "raw" ConstructionContext is renamed into
ConstructionContextLayer - which corresponds to the idea of building the context
gradually layer-by-layer, but it isn't easy to use in the clients. Once
CXXConstructExpr is reached, layers that we've gathered so far are transformed
into the actual, "new-style" "flat" ConstructionContext, which is put into the
CFGConstructor element and has no layers whatsoever (until it actually needs
them, eg. aggregate initialization). The new-style ConstructionContext is
instead presented as a variety of sub-classes that enumerate different ways of
constructing an object in C++. There are 5 of these supported for now,
which is around a half of what needs to be supported.

The layer-by-layer buildup process is still a little bit weird, but it hides
all the weirdness in one place, that sounds like a good thing.

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

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

6 years ago[analyzer] Introduce correct lifetime extension behavior in simple cases.
Artem Dergachev [Tue, 27 Feb 2018 19:47:49 +0000 (19:47 +0000)]
[analyzer] Introduce correct lifetime extension behavior in simple cases.

This patch uses the reference to MaterializeTemporaryExpr stored in the
construction context since r326014 in order to model that expression correctly.

When modeling MaterializeTemporaryExpr, instead of copying the raw memory
contents from the sub-expression's rvalue to a completely new temporary region,
that we conjure up for the lack of better options, we now have the better
option to recall the region into which the object was originally constructed
and declare that region to be the value of the expression, which is semantically
correct.

This only works when the construction context is available, which is worked on
independently.

The temporary region's liveness (in the sense of removeDeadBindings) is extended
until the MaterializeTemporaryExpr is resolved, in order to keep the store
bindings around, because it wouldn't be referenced from anywhere else in the
program state.

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

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

6 years ago[MinGW, CrossWindows] Allow passing -static together with -shared
Martin Storsjo [Tue, 27 Feb 2018 19:42:19 +0000 (19:42 +0000)]
[MinGW, CrossWindows] Allow passing -static together with -shared

In these combinations, link a DLL as usual, but pass -Bstatic instead
of -Bdynamic to indicate prefering static libraries.

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

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

6 years ago[analyzer] Remove redundant check
George Karpenkov [Tue, 27 Feb 2018 19:28:52 +0000 (19:28 +0000)]
[analyzer] Remove redundant check

There is no point in assigning void just to crash on it in the next line

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

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

6 years ago[analyzer] Only attempt to get the value of locations of known type
George Karpenkov [Tue, 27 Feb 2018 19:28:52 +0000 (19:28 +0000)]
[analyzer] Only attempt to get the value of locations of known type

Fixes https://bugs.llvm.org/show_bug.cgi?id=36474

In general, getSVal API should be changed so that it does not crash on
some non-obvious conditions.
It should either be updated to require a type, or to return Optional<SVal>.

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

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

6 years ago[analyzer] Quickfix: don't crash when runtime definition is not available.
George Karpenkov [Tue, 27 Feb 2018 19:19:49 +0000 (19:19 +0000)]
[analyzer] Quickfix: don't crash when runtime definition is not available.

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

6 years ago[analyzer] Logging test quickfix #2.
George Karpenkov [Tue, 27 Feb 2018 19:19:43 +0000 (19:19 +0000)]
[analyzer] Logging test quickfix #2.

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

6 years ago[clang-format] Format operator key in protos
Krasimir Georgiev [Tue, 27 Feb 2018 19:07:47 +0000 (19:07 +0000)]
[clang-format] Format operator key in protos

Summary: This fixes a glitch where ``operator: value`` in a text proto would mess up the underlying formatting since it gets parsed as a kw_operator instead of an identifier.

Subscribers: klimek, cfe-commits

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

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

6 years agoHandle the NetBSD case in ToolChain::getOSLibName()
Kamil Rytarowski [Tue, 27 Feb 2018 18:16:47 +0000 (18:16 +0000)]
Handle the NetBSD case in ToolChain::getOSLibName()

Return a new CompilerRT Path on NetBSD: "netbsd", instead of
getOS(), which returns a string like "netbsd8.9.12".

Sponsored by <The NetBSD Foundation>

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

6 years ago[OPENMP] Allow multiple mappings for member expressions for pointers.
Alexey Bataev [Tue, 27 Feb 2018 17:42:00 +0000 (17:42 +0000)]
[OPENMP] Allow multiple mappings for member expressions for pointers.

If several member expressions are mapped and they reference the same
address as a base, but access different members, this must be allowed.

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

6 years ago[clang-format] Tidy up new API guessLanguage()
Ben Hamilton [Tue, 27 Feb 2018 15:56:40 +0000 (15:56 +0000)]
[clang-format] Tidy up new API guessLanguage()

Summary:
This fixes a few issues djasper@ brought up in his review of D43522.

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

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

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

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

6 years agoRevert "[Tooling] [0/1] Refactor FrontendActionFactory::create() to return std::uniqu...
Roman Lebedev [Tue, 27 Feb 2018 15:54:55 +0000 (15:54 +0000)]
Revert "[Tooling] [0/1] Refactor FrontendActionFactory::create() to return std::unique_ptr<>"

This reverts commit rL326201

This broke gcc4.8 builds, compiler just segfaults:¬
http://lab.llvm.org:8011/builders/clang-atom-d525-fedora-rel/builds/14909¬
http://lab.llvm.org:8011/builders/clang-x86_64-linux-abi-test/builds/22673¬

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

6 years ago[Tooling] [0/1] Refactor FrontendActionFactory::create() to return std::unique_ptr<>
Roman Lebedev [Tue, 27 Feb 2018 15:19:20 +0000 (15:19 +0000)]
[Tooling] [0/1] Refactor FrontendActionFactory::create() to return std::unique_ptr<>

Summary:
Noticed during review of D41102.

I'm not sure whether there are any principal reasons why it returns raw owning pointer,
or it is just a old code that was not updated post-C++11.

I'm not too sure what testing i should do, because `check-all` is not error clean here for some reason,
but it does not //appear// asif those failures are related to these changes.

This is clang part.
Clang-tools-extra part is D43780.

Reviewers: klimek, bkramer, alexfh, pcc

Reviewed By: alexfh

Subscribers: cfe-commits

Tags: #clang

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

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

6 years agoAttrDocs.td: fix some bad code-blocks
Hans Wennborg [Tue, 27 Feb 2018 13:48:50 +0000 (13:48 +0000)]
AttrDocs.td: fix some bad code-blocks

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

6 years agoAttrDocs.td: fix bad bullet list
Hans Wennborg [Tue, 27 Feb 2018 13:48:47 +0000 (13:48 +0000)]
AttrDocs.td: fix bad bullet list

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

6 years agoAttrDocs.td: fix bad indent and code block
Hans Wennborg [Tue, 27 Feb 2018 13:48:41 +0000 (13:48 +0000)]
AttrDocs.td: fix bad indent and code block

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

6 years agoclang-format: use AfterControlStatement to format ObjC control blocks
Francois Ferrand [Tue, 27 Feb 2018 13:48:27 +0000 (13:48 +0000)]
clang-format: use AfterControlStatement to format ObjC control blocks

ObjC defines `@autoreleasepool` and `@synchronized` control blocks. These
used to be formatted according to the `AfterObjCDeclaration` brace-
wrapping flag, which is not very consistent.

This patch changes the behavior to use the `AfterControlStatement` flag
instead. This should not affect the behavior unless a custom brace
wrapping mode is used.

Reviewers: krasimir, djasper, klimek, benhamilton

Subscribers: cfe-commits

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

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

6 years agoclang-format: fix formatting of ObjC @synchronized blocks
Francois Ferrand [Tue, 27 Feb 2018 13:48:21 +0000 (13:48 +0000)]
clang-format: fix formatting of ObjC @synchronized blocks

Summary:
The blocks used to be formatted using the "default" behavior, and would
thus be mistaken for function calls followed by blocks: this could lead
to unexpected inlining of the block and extra line-break before the
opening brace.

They are now formatted similarly to `@autoreleasepool` blocks, as
expected:

  @synchronized(self) {
      f();
  }

Reviewers: krasimir, djasper, klimek

Subscribers: cfe-commits

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

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

6 years ago[test] Extend the Driver/mingw-msvcrt.c test with a -SAME check. NFC.
Martin Storsjo [Tue, 27 Feb 2018 08:35:35 +0000 (08:35 +0000)]
[test] Extend the Driver/mingw-msvcrt.c test with a -SAME check. NFC.

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

6 years ago[RecordLayout] Don't align to non-power-of-2 sizes when using -mms-bitfields
Martin Storsjo [Tue, 27 Feb 2018 06:27:06 +0000 (06:27 +0000)]
[RecordLayout] Don't align to non-power-of-2 sizes when using -mms-bitfields

When targeting GNU/MinGW for i386, the size of the "long double" data
type is 12 bytes (while it is 8 bytes in MSVC). When building
with -mms-bitfields to have struct layouts match MSVC, data types
are laid out in a struct with alignment according to their size.
However, this doesn't make sense for the long double type, since
it doesn't match MSVC at all, and aligning to a non-power-of-2
size triggers other asserts later.

This matches what GCC does, aligning a long double to 4 bytes
in structs on i386 even when -mms-bitfields is specified.

This fixes asserts when using the max_align_t data type when
building for MinGW/i386 with the -mms-bitfields flag.

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

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

6 years ago[Driver] Fix codeview-column-info on macOS
Shoaib Meenai [Tue, 27 Feb 2018 06:04:23 +0000 (06:04 +0000)]
[Driver] Fix codeview-column-info on macOS

macOS home directory paths begin with /Users, and clang-cl interprets
the /U portion as a macro undefine rather than a path, causing test
failures on macOS. Use a -- to explicitly treat the input file as a path
and fix the test.

This effectively reverts r326168 and adds an alternative fix.

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

6 years agoAttempt to fix greendragon bot after r326141
Adam Nemet [Tue, 27 Feb 2018 04:49:26 +0000 (04:49 +0000)]
Attempt to fix greendragon bot after r326141

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

6 years ago[analyzer] Fix an uninitialized field.
Artem Dergachev [Tue, 27 Feb 2018 02:53:30 +0000 (02:53 +0000)]
[analyzer] Fix an uninitialized field.

Found by the analyzer!

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

6 years ago[Driver] Allow using a canonical form of '-fuse-ld=' when cross-compiling on Windows.
Igor Kudrin [Tue, 27 Feb 2018 02:51:30 +0000 (02:51 +0000)]
[Driver] Allow using a canonical form of '-fuse-ld=' when cross-compiling on Windows.

clang used to require adding an ".exe" suffix when targeting ELF systems on Windows.

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

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

6 years ago[analyzer] Switch the default exploration strategy to priority queue based on coverage
George Karpenkov [Tue, 27 Feb 2018 01:31:56 +0000 (01:31 +0000)]
[analyzer] Switch the default exploration strategy to priority queue based on coverage

After the investigation it seems safe to flip the switch.

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

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

6 years ago[analyzer] Logging test typo quickfix.
George Karpenkov [Tue, 27 Feb 2018 01:31:06 +0000 (01:31 +0000)]
[analyzer] Logging test typo quickfix.

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

6 years ago[analyzer] Logging test quickfix.
George Karpenkov [Tue, 27 Feb 2018 01:13:28 +0000 (01:13 +0000)]
[analyzer] Logging test quickfix.

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

6 years agoRevert "Revert "[analyzer] Quickfix: do not overflow in calculating offset in RegionM...
George Karpenkov [Tue, 27 Feb 2018 00:05:04 +0000 (00:05 +0000)]
Revert "Revert "[analyzer] Quickfix: do not overflow in calculating offset in RegionManager""

This reverts commit c4cc41166d93178a3ddd4b2b5a685cf74a459247.

Revert and fix uninitialized read.

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

6 years ago[Driver] Add SafeStack to a map of incompatible sanitizers
Petr Hosek [Tue, 27 Feb 2018 00:01:26 +0000 (00:01 +0000)]
[Driver] Add SafeStack to a map of incompatible sanitizers

This allows reporting an error when user tries to use SafeStack with
incompatible sanitizers.

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

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

6 years ago[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings...
Eugene Zelenko [Mon, 26 Feb 2018 23:15:52 +0000 (23:15 +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@326146 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix which Darwin versions have ObjC runtime with full subscripting support.
Volodymyr Sapsai [Mon, 26 Feb 2018 23:10:23 +0000 (23:10 +0000)]
Fix which Darwin versions have ObjC runtime with full subscripting support.

Update min deployment target in some tests so that they don't try
to link against libarclite and don't fail when it's not available.

rdar://problem/29253617

Reviewers: vsk, kubamracek

Reviewed By: vsk

Subscribers: jkorous-apple, cfe-commits

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

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

6 years agoFix codeview-column-info.c test with a triple
Reid Kleckner [Mon, 26 Feb 2018 23:06:40 +0000 (23:06 +0000)]
Fix codeview-column-info.c test with a triple

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

6 years agoRe-land "Emit proper CodeView when -gcodeview is passed without the cl driver."
Reid Kleckner [Mon, 26 Feb 2018 22:55:33 +0000 (22:55 +0000)]
Re-land "Emit proper CodeView when -gcodeview is passed without the cl driver."

Reverts r326116 and re-lands r326113 with a fix to ASan so that it
enables column info in its test suite.

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

6 years ago[analyzer] Exploration strategy prioritizing unexplored nodes first
George Karpenkov [Mon, 26 Feb 2018 22:14:18 +0000 (22:14 +0000)]
[analyzer] Exploration strategy prioritizing unexplored nodes first

See D42775 for discussion.  Turns out, just exploring nodes which
weren't explored first is not quite enough, as e.g. the first quick
traversal resulting in a report can mark everything as "visited", and
then subsequent traversals of the same region will get all the pitfalls
of DFS.
Priority queue-based approach in comparison shows much greater
increase in coverage and even performance, without sacrificing memory.

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

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

6 years ago[analyzer] Do not analyze bison-generated files
George Karpenkov [Mon, 26 Feb 2018 22:14:16 +0000 (22:14 +0000)]
[analyzer] Do not analyze bison-generated files

Bison/YACC generated files result in a very large number of (presumably)
false positives from the analyzer.
These false positives are "true" in a sense of the information analyzer
sees: assuming that the lexer can return any token at any point a number
of uninitialized reads does occur.
(naturally, the analyzer can not capture a complex invariant that
certain tokens can only occur under certain conditions).

Current fix simply stops analysis on those files.
I have examined a very large number of such auto-generated files, and
they do all start with such a comment.
Conversely, user code is very unlikely to contain such a comment.

rdar://33608161

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

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

6 years agoRevert "[analyzer] Quickfix: do not overflow in calculating offset in RegionManager"
George Karpenkov [Mon, 26 Feb 2018 21:32:57 +0000 (21:32 +0000)]
Revert "[analyzer] Quickfix: do not overflow in calculating offset in RegionManager"

This reverts commit df306c4c5ab4a6b8d3c47432346d1f9b90c328b4.

Reverting until I can figured out the reasons for failures.

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

6 years ago[analyzer] Quickfix: do not overflow in calculating offset in RegionManager
George Karpenkov [Mon, 26 Feb 2018 21:03:06 +0000 (21:03 +0000)]
[analyzer] Quickfix: do not overflow in calculating offset in RegionManager

Addresses https://bugs.llvm.org/show_bug.cgi?id=36206

rdar://37159026

A proper fix would be much harder, and would involve changing the
appropriate code in ExprEngine to be aware of the size limitations of
the type used for addressing.

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

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

6 years agoRevert "Emit proper CodeView when -gcodeview is passed without the cl driver."
Zachary Turner [Mon, 26 Feb 2018 19:51:29 +0000 (19:51 +0000)]
Revert "Emit proper CodeView when -gcodeview is passed without the cl driver."

This reverts commit e17911006548518634fad66bb8648bcad49a1d64.

This is failing on ASAN bots because asan expects column info,
and it's also failing on some linux bots for unknown reasons which
i need to investigate.

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

6 years agoEmit proper CodeView when -gcodeview is passed without the cl driver.
Zachary Turner [Mon, 26 Feb 2018 19:25:39 +0000 (19:25 +0000)]
Emit proper CodeView when -gcodeview is passed without the cl driver.

Windows debuggers don't work properly when column info is emitted
with lines.  We handled this by checking if the driver mode was
cl, but it's possible to cause the gcc driver to emit codeview as
well, and in that path we were emitting column info with codeview.

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

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

6 years agoFix for LLVM r326109
David Zarzycki [Mon, 26 Feb 2018 18:42:30 +0000 (18:42 +0000)]
Fix for LLVM r326109

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

6 years ago[Driver] Forward opt-remark hotness threshold to LTO
Adam Nemet [Mon, 26 Feb 2018 18:38:11 +0000 (18:38 +0000)]
[Driver] Forward opt-remark hotness threshold to LTO

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

6 years ago[DebugInfo] Support DWARF v5 source code embedding extension
Scott Linder [Mon, 26 Feb 2018 17:32:31 +0000 (17:32 +0000)]
[DebugInfo] Support DWARF v5 source code embedding extension

In DWARF v5 the Line Number Program Header is extensible, allowing values with
new content types. This vendor extension to DWARF v5 allows source text to be
embedded directly in the line tables of the debug line section.

Add new flag (-g[no-]embed-source) to Driver and CC1 which indicates
that source should be passed through to LLVM during CodeGen.

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

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

6 years ago[CodeGen][DebugInfo] Refactor duplicated code, NFC
Scott Linder [Mon, 26 Feb 2018 16:31:08 +0000 (16:31 +0000)]
[CodeGen][DebugInfo] Refactor duplicated code, NFC

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

6 years agoRe-land: "[Support] Replace HashString with djbHash."
Jonas Devlieghere [Mon, 26 Feb 2018 15:16:42 +0000 (15:16 +0000)]
Re-land: "[Support] Replace HashString with djbHash."

This patch removes the HashString function from StringExtraces and
replaces its uses with calls to djbHash from DJB.h.

This change is *almost* NFC. While the algorithm is identical, the
djbHash implementation in StringExtras used 0 as its default seed while
the implementation in DJB uses 5381. The latter has been shown to result
in less collisions and improved avalanching and is used by the DWARF
accelerator tables.

Because some test were implicitly relying on the hash order, I've
reverted to using zero as a seed for the following two files:

  lld/include/lld/Core/SymbolTable.h
  llvm/lib/Support/StringMap.cpp

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

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

6 years agoRe-commit r324991 "Fix for PR32992. Static const classes not exported."
Hans Wennborg [Mon, 26 Feb 2018 15:03:59 +0000 (15:03 +0000)]
Re-commit r324991 "Fix for PR32992. Static const classes not exported."

Fix for PR32992. Static const classes not exported.

Patch by zahiraam!

(This re-lands the commit, but using S.MarkVariableReferenced instead of
S.PendingInstantiations.push_back, and with an additional test.)

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

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

6 years agoResolve build bot problems in unittests/Format/FormatTest.cpp
Bjorn Pettersson [Mon, 26 Feb 2018 14:14:11 +0000 (14:14 +0000)]
Resolve build bot problems in unittests/Format/FormatTest.cpp

Summary:
Make the new GetStyleWithEmptyFileName test case independent
of the file system used when running the test. Since the
test is supposed to use the fallback "Google" style we now
use a InMemoryFileSystem to make sure that we do not accidentaly
find a .clang-format file in the real file system. That could
for example happen when having the build directory inside the
llvm och clang repo (as there is a .clang-format file inside
the repos).

Reviewers: vsapsai, jolesiak, krasimir, benhamilton

Reviewed By: krasimir

Subscribers: uabelho, twoh, klimek, cfe-commits

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

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

6 years agoExplicitly initialize ForceEnableInt128 to avoid UB
Ilya Biryukov [Mon, 26 Feb 2018 12:06:05 +0000 (12:06 +0000)]
Explicitly initialize ForceEnableInt128 to avoid UB

This fixes an uninitialized value read found by msan.

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

6 years agoRevert "[Support] Replace HashString with djbHash."
Jonas Devlieghere [Mon, 26 Feb 2018 12:05:18 +0000 (12:05 +0000)]
Revert "[Support] Replace HashString with djbHash."

It looks like some of our tests depend on the ordering of hashed values.
I'm reverting my changes while I try to reproduce and fix this locally.

Failing builds:

  lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/18388
  lab.llvm.org:8011/builders/clang-cmake-x86_64-sde-avx512-linux/builds/6743
  lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/15607

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

6 years ago[Support] Replace HashString with djbHash.
Jonas Devlieghere [Mon, 26 Feb 2018 11:30:13 +0000 (11:30 +0000)]
[Support] Replace HashString with djbHash.

This removes the HashString function from StringExtraces and replaces
its uses with calls to djbHash from DJB.h

This is *almost* NFC. While the algorithm is identical, the djbHash
implementation in StringExtras used 0 as its seed while the
implementation in DJB uses 5381. The latter has been shown to result in
less collisions and improved avalanching.

https://reviews.llvm.org/D43615
(cherry picked from commit 77f7f965bc9499a9ae768a296ca5a1f7347d1d2c)

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

6 years ago[www] Update link to analyzer's "Building a Checker in 24 hours" video
Devin Coughlin [Mon, 26 Feb 2018 00:39:25 +0000 (00:39 +0000)]
[www] Update link to analyzer's "Building a Checker in 24 hours" video

The video is now uploaded to YouTube.

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

6 years agoWhen diagnosing the arguments to alloc_size, report the failing argument using a...
Aaron Ballman [Sun, 25 Feb 2018 20:40:06 +0000 (20:40 +0000)]
When diagnosing the arguments to alloc_size, report the failing argument using a 1-based index instead of a 0-based index for consistency.

Patch by Joel Denny.

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

6 years agoFix a failing assertion with the pointer_with_type_tag attribute when the function...
Aaron Ballman [Sun, 25 Feb 2018 20:28:10 +0000 (20:28 +0000)]
Fix a failing assertion with the pointer_with_type_tag attribute when the function the attribute appertains to is variadic.

Patch by Joel Denny.

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

6 years agoSwitch the default behavior of the Clang<> spelling to opt-in to the C2x attribute...
Aaron Ballman [Sun, 25 Feb 2018 15:34:17 +0000 (15:34 +0000)]
Switch the default behavior of the Clang<> spelling to opt-in to the C2x attribute spellings. NFC to the attribute spellings themselves.

The Clang<> spelling helper generates a spelling for C++11, GNU, and C2x attribute spellings. Previously, users had to manually opt in to the C2x spelling while we cautiously added attributes to that spelling. Now that majority of attributes are exposed in C2x, we can switch the default.

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

6 years agoDocument why the consumed attributes (consumable, callable_when, et al) are not expos...
Aaron Ballman [Sun, 25 Feb 2018 14:54:25 +0000 (14:54 +0000)]
Document why the consumed attributes (consumable, callable_when, et al) are not exposed with a C2x spelling. NFC.

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

6 years agoAdd a C2x spelling for the external_source_symbol and internal_linkage attributes...
Aaron Ballman [Sun, 25 Feb 2018 14:43:45 +0000 (14:43 +0000)]
Add a C2x spelling for the external_source_symbol and internal_linkage attributes in the clang vendor namespace.

Both of these attributes have existing meaning in C code, so there was no reason to exclude them from using the new spelling.

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

6 years agoAdd a C++11 and C2x spelling for the type safety attribute (argument_with_type_tag...
Aaron Ballman [Sun, 25 Feb 2018 14:01:04 +0000 (14:01 +0000)]
Add a C++11 and C2x spelling for the type safety attribute (argument_with_type_tag, pointer_with_type_tag, and type_tag_for_datatype) in the clang vendor namespace.

The TypeTagForDatatype attribute had custom parsing rules that previously prevented it from being supported with square bracket notation. The ArgumentWithTypeTag attribute previously had unnecessary custom parsing that could be handled declaratively.

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

6 years ago[RISCV] Enable __int128_t and __uint128_t through clang flag
Mandeep Singh Grang [Sun, 25 Feb 2018 03:58:23 +0000 (03:58 +0000)]
[RISCV] Enable __int128_t and __uint128_t through clang flag

Summary:
If the flag -fforce-enable-int128 is passed, it will enable support for __int128_t and __uint128_t types.
This flag can then be used to build compiler-rt for RISCV32.

Reviewers: asb, kito-cheng, apazos, efriedma

Reviewed By: asb, efriedma

Subscribers: shiva0217, efriedma, jfb, dschuff, sdardis, sbc100, jgravelle-google, aheejin, rbar, johnrusso, simoncook, jordy.potman.lists, sabuasal, niosHD, cfe-commits

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

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

6 years ago[X86] Remove some masked cvt builtins that can be replaced with legacy sse/avx buiilt...
Craig Topper [Sat, 24 Feb 2018 18:55:13 +0000 (18:55 +0000)]
[X86] Remove some masked cvt builtins that can be replaced with legacy sse/avx buiiltins and a select.

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

6 years agoAdd a C++11 and C2x spelling for the objc_bridge_related attribute in the clang vendo...
Aaron Ballman [Sat, 24 Feb 2018 17:37:37 +0000 (17:37 +0000)]
Add a C++11 and C2x spelling for the objc_bridge_related attribute in the clang vendor namespace.

This attribute has custom parsing rules that previously prevented it from being supported with square bracket notation.

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

6 years agoAdd a C++11 and C2x spelling for the availability attribute in the clang vendor names...
Aaron Ballman [Sat, 24 Feb 2018 17:16:42 +0000 (17:16 +0000)]
Add a C++11 and C2x spelling for the availability attribute in the clang vendor namespace.

This attribute has custom parsing rules that previously prevented it from being supported with square bracket notation. Rework the clang attribute argument parsing to be more easily extended for other custom-parsed attributes.

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

6 years agoRemove unused variable. We should be warning-free.
Daniel Jasper [Sat, 24 Feb 2018 06:57:47 +0000 (06:57 +0000)]
Remove unused variable. We should be warning-free.

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

6 years agoMake module use diagnostics refer to the top-level module
Daniel Jasper [Sat, 24 Feb 2018 06:54:09 +0000 (06:54 +0000)]
Make module use diagnostics refer to the top-level module

All use declarations need to be directly placed in the top-level module
anyway, knowing the submodule doesn't really help. The header that has
the offending #include can easily be seen in the diagnostics source
location.

Review: https://reviews.llvm.org/D43673

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

6 years ago[X86] Remove __builtin_ia32_permvarsf256_mask and __builtin_ia32_permvarsi256_mask...
Craig Topper [Sat, 24 Feb 2018 06:46:42 +0000 (06:46 +0000)]
[X86] Remove __builtin_ia32_permvarsf256_mask and __builtin_ia32_permvarsi256_mask and use the avx2 unmasked versions and a select instead.

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

6 years ago[CFG] Keep speculatively working around an MSVC compiler crash.
Artem Dergachev [Sat, 24 Feb 2018 03:54:22 +0000 (03:54 +0000)]
[CFG] Keep speculatively working around an MSVC compiler crash.

Replace if() with a switch(). Because random changes in the code seem to
suppress the crash.

Story so far:
r325966 - Crash introduced.
r325969 - Speculative fix had no effect.
r325978 - Tried to bisect the offending function, crash suddenly disappeared.
r326016 - After another random change in the code, bug appeared again.

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

6 years ago[CFG] Provide construction contexts for temporaries in conditional operators.
Artem Dergachev [Sat, 24 Feb 2018 03:10:15 +0000 (03:10 +0000)]
[CFG] Provide construction contexts for temporaries in conditional operators.

When a lifetime-extended temporary is on a branch of a conditional operator,
materialization of such temporary occurs after the condition is resolved.

This change allows us to understand, by including the MaterializeTemporaryExpr
in the construction context, the target for temporary materialization in such
cases.

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

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

6 years ago[CFG] Provide construction contexts for temporaries bound to const references.
Artem Dergachev [Sat, 24 Feb 2018 02:07:50 +0000 (02:07 +0000)]
[CFG] Provide construction contexts for temporaries bound to const references.

In order to bind a temporary to a const lvalue reference, a no-op cast is added
to make the temporary itself const, and only then the reference is taken
(materialized). Skip the no-op cast when looking for the construction context.

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

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

6 years ago[CFG] Provide construction contexts for functional cast-like constructors.
Artem Dergachev [Sat, 24 Feb 2018 02:05:11 +0000 (02:05 +0000)]
[CFG] Provide construction contexts for functional cast-like constructors.

When a constructor of a temporary with a single argument is treated
as a functional cast expression, skip the functional cast expression
and provide the correct construction context for the temporary.

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

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

6 years ago[CFG] Provide construction contexts for lifetime-extended temporaries.
Artem Dergachev [Sat, 24 Feb 2018 02:00:30 +0000 (02:00 +0000)]
[CFG] Provide construction contexts for lifetime-extended temporaries.

When constructing a temporary that is going to be lifetime-extended through a
MaterializeTemporaryExpr later, CFG elements for the respective constructor
can now be queried to obtain the reference to that MaterializeTemporaryExpr
and therefore gain information about lifetime extension.

This may produce multi-layered construction contexts when information about
both temporary destruction and lifetime extension is available.

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

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

6 years agoAdd another test for PR36157.
Richard Smith [Sat, 24 Feb 2018 00:00:58 +0000 (00:00 +0000)]
Add another test for PR36157.

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

6 years ago[ExprConstant] Fix crash when initialize an indirect field with another field.
Volodymyr Sapsai [Fri, 23 Feb 2018 23:59:20 +0000 (23:59 +0000)]
[ExprConstant] Fix crash when initialize an indirect field with another field.

When indirect field is initialized with another field, you have
MemberExpr with CXXThisExpr that corresponds to the field's immediate
anonymous parent. But 'this' was referring to the non-anonymous parent.
So when we were building LValue Designator, it was incorrect as it had
wrong starting point. Usage of such designator would cause unexpected
APValue changes and crashes.

The fix is in adjusting 'this' for indirect fields from non-anonymous
parent to the field's immediate parent.

Discovered by OSS-Fuzz:
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4985

rdar://problem/36359187

Reviewers: rsmith, efriedma

Reviewed By: rsmith

Subscribers: cfe-commits, jkorous-apple

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

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

6 years agobpf: Hook target feature "alu32" with LLVM
Yonghong Song [Fri, 23 Feb 2018 23:55:29 +0000 (23:55 +0000)]
bpf: Hook target feature "alu32" with LLVM

LLVM has supported a new target feature "alu32" which could be enabled or
disabled by "-mattr=[+|-]alu32" when using llc.

This patch link Clang with it, so it could be also done by passing related
options to Clang, for example:

  -Xclang -target-feature -Xclang +alu32

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Reviewed-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@325996 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Sema][ObjC] Process category attributes before checking protocol uses
Alex Lorenz [Fri, 23 Feb 2018 23:49:43 +0000 (23:49 +0000)]
[Sema][ObjC] Process category attributes before checking protocol uses

This ensures that any availability attributes are attached to the
category before the availability for the referenced protocols is checked.

rdar://37829755

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

6 years ago[CFG] Try to narrow down MSVC compiler crash via binary search.
Artem Dergachev [Fri, 23 Feb 2018 23:38:41 +0000 (23:38 +0000)]
[CFG] Try to narrow down MSVC compiler crash via binary search.

Split the presumably offending function in two to see which part of it causes
the crash to occur.

The crash was introduced in r325966.
r325969 did not help.

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

6 years ago[analyzer] Relax the assert used when traversing the node graph.
George Karpenkov [Fri, 23 Feb 2018 23:26:57 +0000 (23:26 +0000)]
[analyzer] Relax the assert used when traversing the node graph.

The assertion gets exposed when changing the exploration order.
This is a quick hacky fix, but the intention is that if the nodes do
merge, it should not matter which predecessor should be traverse.
A proper fix would be not to traverse predecessors at all, as all
information relevant for any decision should be avilable locally.

rdar://37540480

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

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

6 years ago[analyzer] mark returns of functions where the region passed as parameter was not...
George Karpenkov [Fri, 23 Feb 2018 23:26:56 +0000 (23:26 +0000)]
[analyzer] mark returns of functions where the region passed as parameter was not initialized

In the wild, many cases of null pointer dereference, or uninitialized
value read occur because the value was meant to be initialized by the
inlined function, but did not, most often due to error condition in the
inlined function.
This change highlights the return branch taken by the inlined function,
in order to help user understand the error report and see why the value
was uninitialized.

rdar://36287652

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

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

6 years ago[analyzer] Consider switch- and goto- labels when constructing the set of executed...
George Karpenkov [Fri, 23 Feb 2018 23:26:54 +0000 (23:26 +0000)]
[analyzer] Consider switch- and goto- labels when constructing the set of executed lines

When viewing the report in the collapsed mode the label signifying where
did the execution go is often necessary for properly understanding the
context.

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

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

6 years ago[CFG] NFC: Speculative attempt to fix MSVC internal compiler error on buildbot.
Artem Dergachev [Fri, 23 Feb 2018 22:49:25 +0000 (22:49 +0000)]
[CFG] NFC: Speculative attempt to fix MSVC internal compiler error on buildbot.

Don't use fancy initialization and member access in a DenseMap.

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

6 years ago[CFG] [analyzer] NFC: Allow more complicated construction contexts.
Artem Dergachev [Fri, 23 Feb 2018 22:20:39 +0000 (22:20 +0000)]
[CFG] [analyzer] NFC: Allow more complicated construction contexts.

ConstructionContexts introduced in D42672 are an additional piece of information
included with CFGConstructor elements that help the client of the CFG (such as
the Static Analyzer) understand where the newly constructed object is stored.

The patch refactors the ConstructionContext class to prepare for including
multi-layered contexts that are being constructed gradually, layer-by-layer,
as the AST is traversed.

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

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

6 years agoSet Module Metadata "RtLibUseGOT" when fno-plt is used.
Sriraman Tallam [Fri, 23 Feb 2018 21:27:33 +0000 (21:27 +0000)]
Set Module Metadata "RtLibUseGOT" when fno-plt is used.

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

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

6 years ago[Driver] Make -fno-common default for Fuchsia
Petr Hosek [Fri, 23 Feb 2018 20:10:14 +0000 (20:10 +0000)]
[Driver] Make -fno-common default for Fuchsia

We never want to generate common symbols on Fuchsia.

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

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

6 years agoReally fix test on windows.
Rafael Espindola [Fri, 23 Feb 2018 19:38:41 +0000 (19:38 +0000)]
Really fix test on windows.

Sorry for the noise.

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