Commit Graph

31359 Commits

Author SHA1 Message Date
Timur Iskhodzhanov 32d1e73023 Revert r185229 as it breaks compilation of <windows.h>
llvm-svn: 185256
2013-06-29 08:38:42 +00:00
Eli Friedman ba2778f4ba Remove dead code.
llvm-svn: 185231
2013-06-28 22:13:27 +00:00
Richard Smith 902befa277 PR7927, PR16247: Reimplement handling of matching extern "C" declarations
across scopes.

When we declare an extern "C" name that is not a redeclaration of an entity in
the same scope, check whether it redeclares some extern "C" entity from another
scope, and if not, check whether it conflicts with a (non-extern-"C") entity in
the translation unit.

When we declare a name in the translation unit that is not a redeclaration,
check whether it conflicts with any extern "C" entities (possibly from other
scopes).

llvm-svn: 185229
2013-06-28 22:03:51 +00:00
Eli Friedman b13e64eb60 Fix error recovery with in-class initializer.
Previously, for a field with an invalid in-class initializer, we
would create a CXXDefaultInitExpr referring to a null Expr*.
This is not a good idea.

llvm-svn: 185216
2013-06-28 21:07:41 +00:00
Eli Friedman c37dbf7f65 Fix line endings.
llvm-svn: 185215
2013-06-28 20:48:34 +00:00
Peter Collingbourne 66f82e68c3 [ms-cxxabi] Move CodeGenVTables::needsVTTParameter to ItaniumCXXABI.
This function only makes sense there.  Eventually it should no longer
be part of the CGCXXABI interface, as it is an Itanium-specific detail.

Differential Revision: http://llvm-reviews.chandlerc.com/D821

llvm-svn: 185213
2013-06-28 20:45:28 +00:00
Benjamin Kramer 17381a0627 Use the multiple argument form of path::append.
llvm-svn: 185164
2013-06-28 16:25:46 +00:00
Timur Iskhodzhanov 1151031eb7 Fix a trivial typo, add a FIXME to have more test coverage for VTableBuilder
llvm-svn: 185159
2013-06-28 15:42:28 +00:00
Alexander Kornienko 1e80887d63 Use lexing mode based on FormatStyle.Standard.
Summary:
Some valid pre-C++11 constructs change meaning when lexed in C++11
mode, e.g.
#define x(_a) printf("foo"_a);
(example from http://llvm.org/bugs/show_bug.cgi?id=16342). "foo"_a is treated as
a user-defined string literal when parsed in C++11 mode.
In order to deal with this correctly, we need to set lexing mode according to
which standard the code conforms to. We already have a configuration value for
this (FormatStyle.Standard), which seems to be appropriate to use in this case
as well.

Reviewers: klimek

CC: cfe-commits, gribozavr

Differential Revision: http://llvm-reviews.chandlerc.com/D1028

llvm-svn: 185149
2013-06-28 12:51:24 +00:00
Richard Smith feb3e1a1e3 Lazily deserialize function template specializations. This fixes a cycle in
module deserialization / merging, and more laziness here is general goodness.

llvm-svn: 185132
2013-06-28 04:37:53 +00:00
Rafael Espindola 157f34bd31 Update for llvm::sys::fs::unique_file not creating directories.
llvm-svn: 185127
2013-06-28 03:49:04 +00:00
Eli Friedman c7ad5c4e29 Delete dead code.
llvm-svn: 185119
2013-06-28 00:23:34 +00:00
Eli Friedman cb9cd6c714 Switch Decl instantiation to DeclNodes.inc.
This replaces a long list of declarations for visitor functions with
a list generated from DeclNodes.inc.  Nothing really interesting came
out of it; we had comprehensive coverage anyway
(excluding FriendTemplateDecls).

llvm-svn: 185118
2013-06-27 23:21:55 +00:00
Richard Smith 8d7f11da50 Fix nested lifetime extension when a std::initializer_list member is
initialized during aggregate initialization of the surrounding structure.

llvm-svn: 185117
2013-06-27 22:54:33 +00:00
Peter Collingbourne 5c5e6179a0 Use the zero-argument DIBuilder::createNullPtrType in Clang.
Differential Revision: http://llvm-reviews.chandlerc.com/D1051

llvm-svn: 185115
2013-06-27 22:51:01 +00:00
John McCall 611d9b6659 Ensure that debugger calls to signature-less functions default to
passing arguments in the fixed style.

We have an abstraction for deciding this, but it's (1) deep in
IR-generation, (2) necessarily tied to exact argument lists, and
(3) triggered by unprototyped function types, which we can't
legitimately make in C++ mode.  So this solution, wherein Sema
rewrites the function type to an exact prototype but leaves the
variadic bit enabled so as to request x86-64-like platforms to
pass the extra variadic info, is very much a hack, but it's one
that works in practice on the platforms that LLDB will support
in the medium term --- the only place we know of where it's a
problem is instance methods in Windows, where variadic functions
are implicitly cdecl.  We may have a more abstracted base on which
to build a solution by then.

rdar://13731520

llvm-svn: 185112
2013-06-27 22:43:24 +00:00
Richard Smith 5a0ef78cd7 Remove bogus VarDecl::extendsLifetimeOfTemporary function and inline it into
its only caller with a FIXME explaining why it's bogus.

llvm-svn: 185109
2013-06-27 21:43:17 +00:00
Eli Friedman 9fb40ee966 Remove unnecessary check.
llvm-svn: 185108
2013-06-27 21:20:28 +00:00
Eli Friedman ba4b86d074 Delete dead code.
llvm-svn: 185103
2013-06-27 21:04:24 +00:00
Eli Friedman b998bff32b Delete dead code.
llvm-svn: 185101
2013-06-27 20:48:08 +00:00
Douglas Gregor f83b4ea8b6 Under -fms-extensions, only inject a friend tag name when we didn't see a tag with that name in an enclosing scope.
r177473 made us correctly consider only those declarations in the
enclosing namespace scope when looking for a friend declaration. Under
ms-extensions mode, where we do some level of friend injection, this
meant that we were introducing a new tag type into a different scope
than what Microsoft actually does. Address this by only doing the
friend injection when we didn't see any tag with that name in any
outer scope. Fixes <rdar://problem/14250378>.

llvm-svn: 185100
2013-06-27 20:42:30 +00:00
Eli Friedman 2850ba8e21 Simplify StmtIterator.
llvm-svn: 185098
2013-06-27 20:39:04 +00:00
Rafael Espindola 73c23a7182 Small improvements to createOutputFile.
* Use a single stat to find out if the file exists and if it is a regular file.
* Use early returns when possible.
* Add comments explaining why we have each check.

llvm-svn: 185091
2013-06-27 18:26:26 +00:00
Joey Gouly 7db275b947 Add support for passing v8fp options via -mfpu.
llvm-svn: 185075
2013-06-27 13:19:54 +00:00
Larisse Voufo 70bb43a115 A bit of program simplification from r185056
llvm-svn: 185058
2013-06-27 03:36:30 +00:00
Larisse Voufo 64cf3efd47 Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type.
llvm-svn: 185056
2013-06-27 01:50:25 +00:00
Eli Friedman aa205c431f Delete dead code.
llvm-svn: 185053
2013-06-27 01:36:36 +00:00
Eli Friedman 481673f367 Simplify code.
llvm-svn: 185042
2013-06-26 23:47:39 +00:00
Eli Friedman 437313c26f Handle all TemplateArguments in trivial TypeLocs.
Armed with a much better understanding of what
TemplateSpecializationTypeLoc::initializeArgLocs actually does, I now
understand that it's fine to just use an empty TemplateArgumentLocInfo
for Integral, Declaration, and NullPtr TemplateArguments.

Fixes PR14281. (The testcases are actually derived from libcxx_test in
deduction-crash.cpp because the original testcase was impossible to reduce.)

llvm-svn: 185038
2013-06-26 23:30:50 +00:00
Richard Smith 83e37bee44 PR16467: Teach -Wunsequenced that in C11 (unlike C++11), an assignment's
side-effect is not sequenced before its value computation. Also fix a
mishandling of ?: expressions where the condition is constant that was
exposed by the tests for this.

llvm-svn: 185035
2013-06-26 23:16:51 +00:00
Fariborz Jahanian e23f26bf94 ObjectiveC: diagnose duplicate declaration of
private ivars in class extensions and class
@implementation. // rdar://14278560

llvm-svn: 185025
2013-06-26 22:10:27 +00:00
Joerg Sonnenberger ffc6d49982 Don't use unnamed local enums as template arguments.
Fixes -Werror bootstrap.

llvm-svn: 185023
2013-06-26 21:31:47 +00:00
Aaron Ballman 2a6febc0c5 This patch fixes PR16395, when HandleMSProperty returns null due to a declaration with no name.
Patch thanks to Robert Wilhelm.

llvm-svn: 185022
2013-06-26 21:28:44 +00:00
Eli Friedman 2782dacfbc Rewrite record layout for ms_struct structs.
The old implementation of ms_struct in RecordLayoutBuilder was a
complete mess: it depended on complicated conditionals which didn't
really reflect the underlying logic, and placed a burden on users of
the resulting RecordLayout. This commit rips out almost all of the
old code, and replaces it with simple checks in
RecordLayoutBuilder::LayoutBitField.

This commit also fixes <rdar://problem/14252115>, a bug where class
inheritance would cause us to lay out bitfields incorrectly.

llvm-svn: 185018
2013-06-26 20:50:34 +00:00
Aaron Ballman fcd5b7e76e Updating a link in the comments; no functional change.
llvm-svn: 185013
2013-06-26 19:17:19 +00:00
Joey Gouly d077bc6a20 Add support for passing '-target armv8' through the Driver.
llvm-svn: 184970
2013-06-26 17:19:48 +00:00
Reid Kleckner 596b85cc23 Match MSVC's handling of commas during macro argument expansion
This allows clang to parse the type_traits header in Visual Studio 2012,
which is included widely in practice.

This is a rework of r163022 by João Matos.  The original patch broke
preprocessing of gtest headers, which this patch addresses.

Patch by Will Wilson!

llvm-svn: 184968
2013-06-26 17:16:08 +00:00
Rafael Espindola 32e3e7cefc We only create one file, no need to delete a directory.
llvm-svn: 184949
2013-06-26 14:33:23 +00:00
Rafael Espindola 5bfc690f42 Remove unused include.
llvm-svn: 184936
2013-06-26 12:44:19 +00:00
Rafael Espindola a9b6429ec8 Remove unused include.
llvm-svn: 184922
2013-06-26 06:15:57 +00:00
Rafael Espindola 4168ee73a4 Remove more uses of llvm::sys::Path.
llvm-svn: 184921
2013-06-26 06:13:06 +00:00
Rafael Espindola 380988340c Remove PathV1.h from CompilerInvocation.cpp.
llvm-svn: 184918
2013-06-26 05:40:30 +00:00
Rafael Espindola 9678d27140 Use llvm::sys::fs::getMainExecutable.
llvm-svn: 184915
2013-06-26 05:03:40 +00:00
Rafael Espindola 399ab33a37 Remove PathV1.h from CompilerInstance.cpp.
llvm-svn: 184913
2013-06-26 04:32:59 +00:00
Rafael Espindola f5e5bc4703 Don't use PathV1.h in ASTUnit.cpp.
llvm-svn: 184912
2013-06-26 04:26:38 +00:00
Rafael Espindola a96bd562c2 Remove the last use of PathWithStatus.
llvm-svn: 184909
2013-06-26 04:12:57 +00:00
Rafael Espindola bc4aa5547e Use llvm::sys::fs::unique_file.
llvm-svn: 184908
2013-06-26 04:02:37 +00:00
Rafael Espindola bc7d949b32 Remove some uses of llvm::sys::Path.
llvm-svn: 184907
2013-06-26 03:52:38 +00:00
Rafael Espindola 76565f08f7 Remove PathV1.h use from WindowsToolChain.cpp.
llvm-svn: 184906
2013-06-26 03:39:10 +00:00
Nico Weber f579ab302a Fix a comment.
llvm-svn: 184905
2013-06-26 02:42:46 +00:00
Richard Smith 68ad0e7154 Lazily deserialize the "first' friend declaration when deserializing a class
declaration. This PCH a little lazier, and breaks a deserialization cycle that
causes crashes with modules enabled.

llvm-svn: 184904
2013-06-26 02:41:25 +00:00
Faisal Vali 18d3598ed0 Fix PCH bug with member templates of local classes in nontemplate functions.
As noted by Richard in the post:
http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130624/082605.html, the following code should not add an entry
into PendingLocalImplicitInstantiations, since local instantiations
should only occur within the context of other instantiations:

int foo(double y) {
   struct Lambda {
      template<class T> T operator()(T t) const { return t; };
   } lambda;
   return lambda(y);
}

Hence the attached code does the following:
  1) In MarkFunctionReferenced, check if ActiveInstantiations.size() 
      is non-zero before adding to PendingLocalImplicitInstantiations.
  2) In InstantiateFunctionDefinition, we swap out/in
      PendingLocalImplicitInstantiations so that only those 
      pending local instantiations that are added during the instantiation
      of the current function are instantiated recursively.

llvm-svn: 184903
2013-06-26 02:34:24 +00:00
Rafael Espindola 358256c77a Remove PathV1.h usage from ToolChains.cpp.
llvm-svn: 184902
2013-06-26 02:13:00 +00:00
Nico Weber 9096fc0dab Run clang-format on lib/Format code after r184894. No other changes.
llvm-svn: 184896
2013-06-26 00:30:14 +00:00
Nico Weber 8084cffd0b Formatter: Don't put a space after parameter-naming block comments.
Before: f(a, b, /*doFoo=*/ false);
Now: f(a, b, /*doFoo=*/false);

This style is a lot more common:
$ ack -H '=\*\/\w' lib | wc -l 
    1281
$ ack -H '=\*\/ \w' lib | wc -l 
      70

llvm-svn: 184894
2013-06-26 00:15:19 +00:00
Nick Lewycky 7a2a4799d6 Don't check for triviality on fields of templated records. We can't know the
answer until after instantiation. Fixes PR16061!

llvm-svn: 184890
2013-06-25 23:22:23 +00:00
David Majnemer 502b0ed264 Implement DR136
Friend declarations that specify a default argument must be a definition
and the only declaration in the translation unit.

llvm-svn: 184889
2013-06-25 23:09:30 +00:00
Richard Smith b80d54049b PR8302: Check for shadowing a template parameter when declaring a template
template parameter.

llvm-svn: 184884
2013-06-25 22:21:36 +00:00
Matt Beaumont-Gay 35779955b3 Don't try to get the layout of an invalid decl in getDeclAlign.
When the decl that we're getting alignment for is a FieldDecl, and the field's
parent record is invalid, skip the actual field alignment calculation (and
return 1-byte alignment in the general case).

Also, assert in in getASTRecordLayout that the decl is valid. This was
inspired by PR16292; see also r184581 and r184751.

llvm-svn: 184883
2013-06-25 22:19:15 +00:00
David Majnemer ba8f17ac10 Implement DR21
A default template-argument shall not be specified in a friend template
declaration.

Interestingly, we properly handled default template arguments on friend
class members but not on just friend classes.

llvm-svn: 184882
2013-06-25 22:08:55 +00:00
Richard Smith ef87be3a62 Fix null pointer dereference if we redeclare an unprototyped function. Patch by
WenHan Gu!

llvm-svn: 184875
2013-06-25 20:34:17 +00:00
Nico Weber 0f987a6fb3 Fix a comment.
llvm-svn: 184873
2013-06-25 19:25:12 +00:00
Richard Smith e83b1d3e7a More of N3652: don't add an implicit 'const' to 'constexpr' member functions when checking for overloads in C++1y.
llvm-svn: 184865
2013-06-25 18:46:26 +00:00
Fariborz Jahanian f030d16c92 Objective-C: Warn when IBOutletCollection property
is declared to have 'assign' attribute.
// rdar://14212998

llvm-svn: 184863
2013-06-25 17:34:50 +00:00
Eli Bendersky 099888eccd Remove misplaced comment
llvm-svn: 184862
2013-06-25 17:07:56 +00:00
Nick Lewycky 39dc9f8be4 In tooling, reenable freeing of datastructures in codegen, just as we do for
the frontend. We don't want to respect the -disable-free flag here.

llvm-svn: 184861
2013-06-25 17:01:21 +00:00
Rafael Espindola 355670dbc6 Use simpler version of llvm::sys::fs::exists.
llvm-svn: 184857
2013-06-25 15:14:22 +00:00
Rafael Espindola 00eaafd953 Don't use PathV1.h in Tools.cpp.
llvm-svn: 184856
2013-06-25 15:03:59 +00:00
Rafael Espindola 54bbaad459 Use the simpler version of llvm::sys::fs::exists.
llvm-svn: 184855
2013-06-25 14:48:00 +00:00
Rafael Espindola 04b3fc4981 Use the new llvm::sys::EnvPathSeparator.
llvm-svn: 184851
2013-06-25 14:29:51 +00:00
Chandler Carruth 6aa92ad762 Fix a couple of PPC predefined macros that I spotted while driving by
this code. These aren't technically standard predefines for the platform
but apparantly lots of folks use them as they show up within LLVM's own
codebase. ;] This may even fix some self host issues w/ the JIT!!!

llvm-svn: 184830
2013-06-25 11:13:47 +00:00
Rafael Espindola 37d229de2f Add r184803 back now that the bug in unique_file has been fixed.
Original message:

Use the new PathV2 instead of implementing the logic in clang.

llvm-svn: 184825
2013-06-25 04:26:55 +00:00
Rafael Espindola e7f89915b4 Revert "Use the new PathV2 instead of implementing the logic in clang."
This reverts commit 184803 while I debug the failures on the bots.

llvm-svn: 184818
2013-06-25 02:35:32 +00:00
Jordan Rose b8e286548c [analyzer] Handle zeroing CXXConstructExprs.
Re-apply r184511, reverted in r184561, with the trivial default constructor
fast path removed -- it turned out not to be necessary here.

Certain expressions can cause a constructor invocation to zero-initialize
its object even if the constructor itself does no initialization. The
analyzer now handles that before evaluating the call to the constructor,
using the same "default binding" mechanism that calloc() uses, rather
than simply ignoring the zero-initialization flag.

<rdar://problem/14212563>

llvm-svn: 184815
2013-06-25 01:56:08 +00:00
Jordan Rose b3b976f061 [analyzer] Don't initialize virtual base classes more than once.
In order to make sure virtual base classes are always initialized once,
the AST contains initializers for the base class in /all/ of its
descendents, not just the immediate descendents. However, at runtime,
the most-derived object is responsible for initializing all the virtual
base classes; all the other initializers will be ignored.

The analyzer now checks to see if it's being called from another base
constructor, and if so does not perform virtual base initialization.

<rdar://problem/14236851>

llvm-svn: 184814
2013-06-25 01:55:59 +00:00
Eli Friedman 5a8738ffe0 Fix regression from r184810.
Specifically, CallExpr::getCalleeDecl() can return null, so make sure to
handle that correctly.

llvm-svn: 184813
2013-06-25 01:55:41 +00:00
Nick Lewycky d3f3e4f04c Make -vectorize-... proper cc1 flags instead of abusing -backend-option. Fixes
usage of clang as a library.

llvm-svn: 184812
2013-06-25 01:49:44 +00:00
Richard Smith 5de91b58d0 Fix deserializing of class template partial specializations. Assign sequence
numbers as we deserialize class template partial specializations. We can't
assume that the old sequence numbers will work.

The sequence numbers are still deterministic, but are now a lot less
predictable for class template partial specializations in modules/PCH.

llvm-svn: 184811
2013-06-25 01:25:15 +00:00
Eli Friedman 0423b76be1 Fix noexcept for delete expressions.
Using "delete" on a pointer to an incomplete type can't throw.
While I'm here, clean up the signature of the canCalleeThrow() helper.

llvm-svn: 184810
2013-06-25 01:24:22 +00:00
Rafael Espindola e3d0c4a9bd Remove PathV1.h from Driver.cpp.
llvm-svn: 184807
2013-06-25 01:11:59 +00:00
Nico Weber ec9e41076b Formatter/ObjC: Correctly format casts in objc message send expressions.
llvm-svn: 184804
2013-06-25 00:55:57 +00:00
Rafael Espindola 503b726b43 Use the new PathV2 instead of implementing the logic in clang.
llvm-svn: 184803
2013-06-25 00:55:28 +00:00
Eli Friedman 96dbf6f082 Delete a couple dead checks.
Use castAs<> where appropriate. Don't check conditionals which are
always true. Delete a bit of dead code. Reindent a bunch of code which
is no longer guarded by an if statement.

llvm-svn: 184801
2013-06-25 00:46:32 +00:00
Eli Friedman f6e1fd7567 Delete dead code.
llvm-svn: 184795
2013-06-25 00:25:19 +00:00
Richard Smith bf78e646e1 Check for matching template-parameter-lists when merging template declarations.
llvm-svn: 184791
2013-06-24 22:51:00 +00:00
Ted Kremenek 009d61dd16 Tweak -Wdeprecated-objc-pointer-introspection to have a subgroup for results of using -performSelectorXXX.
-performSelector: and friends return a value that is boxed as an Objective-C
pointer.  Sometimes it is an Objective-C pointer, sometimes it isn't.
Some clients may wish to silence this warning based on calling
this method.

Fixes <rdar://problem/14147304>

llvm-svn: 184789
2013-06-24 21:35:39 +00:00
Argyrios Kyrtzidis 48d88de2af [libclang/codecompletion] Make sure the top-level decl hash takes into account ImportDecls.
The top-level hash is used to determine if we need to update the global code-completion results.
ImportDecls did not affect the hash so a newly introduced ImportDecl would not trigger an update of the global results.

rdar://14202797

llvm-svn: 184782
2013-06-24 21:19:12 +00:00
Eli Friedman d0ee1294c1 Change mangling of objects inside block literals.
This changes the mangling of local static variables/etc. inside blocks
to do something simple and sane.  This avoids depending on the way we mangle
blocks, which isn't really appropriate here.

John, please take a look at this to make sure the mangling I chose is sane.

Fixes <rdar://problem/14074423>.

llvm-svn: 184780
2013-06-24 20:24:19 +00:00
Reid Kleckner 18da98ef99 [ms-cxxabi] Use sugared types in the mangler instead of canonical types
At this point, it's clear that the MSVC mangler uses the type-as-written
instead of the canonical type, so this should bring us closer to MSVC.
The main thrust of this change is to fix the way we mangle decayed array
parameters of function pointer parameters.  With a DecayedType sugar
node, this code can now be much simpler.

Fixes PR16096.

This also fixes a separate issue that Richard spotted in review.
Because separate declarations of the same entity can be spelled and
mangled differently, MSVC always mangles the earliest declaration in an
attempt to avoid link errors.  Clang now does the same.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D844

llvm-svn: 184777
2013-06-24 19:21:52 +00:00
Argyrios Kyrtzidis b11a192dfc [arcmt/driver] For the -ccc-arcmt-* flags, claim them when -fno-objc-arc is passed to avoid the
"argument unused during compilation" warning.

rdar://14240566

llvm-svn: 184776
2013-06-24 19:01:18 +00:00
Eli Friedman 57d1f1c8a5 Use getAs<> where appropriate on QualTypes instead of using dyn_cast.
llvm-svn: 184775
2013-06-24 18:47:11 +00:00
Rafael Espindola 609a664427 Convert some uses of llvm::sys::Path.
llvm-svn: 184774
2013-06-24 18:33:43 +00:00
Rafael Espindola 0294075f9b Use the simpler version of llvm::sys::fs::exists.
llvm-svn: 184770
2013-06-24 18:19:15 +00:00
Anna Zaks 7925e3db63 [analyzer] Add a debug checker that prints Exploded Graph
Add a debug checker that is useful to understand how the ExplodedGraph is
built; it can be triggered using the following command:

 clang -cc1 -analyze -analyzer-checker=debug.ViewExplodedGraph my_program.c

A patch by Béatrice Creusillet!

llvm-svn: 184768
2013-06-24 18:12:12 +00:00
Rafael Espindola 03bc68268f Convert last use of PathV1.h in Compilation.cpp
The way we decide which file to remove is fairly odd. I took a quick look at
maybe changing that, but it would be a more work than I want to put at this
right now, so I left pair of FIXMEs.

llvm-svn: 184766
2013-06-24 17:59:44 +00:00
Reid Kleckner 8a36502a60 [AST] Introduce a new DecayedType sugar node
The goal of this sugar node is to be able to look at an arbitrary
FunctionType and tell if any of the parameters were decayed from an
array or function type.  Ultimately this is necessary to implement
Microsoft's C++ name mangling scheme, which mangles decayed arrays
differently from normal pointers.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D1014

llvm-svn: 184763
2013-06-24 17:51:48 +00:00
Kaelyn Uhrain 52dd02d8ef Add the global namespace (the "::" namespace specifier) to the list of
namespaces to try for potential typo corrections.

llvm-svn: 184762
2013-06-24 17:49:03 +00:00
Reid Kleckner 7f62b95480 Check the canonical parameter type with getAs<>() in a static checker
This will prevent breakage when I introduce the DecayedType sugar node.

llvm-svn: 184755
2013-06-24 16:56:16 +00:00
Rafael Espindola a466b9aeb9 Convert a use of PathV1.h
llvm-svn: 184753
2013-06-24 16:46:15 +00:00
Rafael Espindola 36da85486a Convert a use of PathV1.h.
llvm-svn: 184743
2013-06-24 15:00:11 +00:00
Reid Kleckner 5a11580205 [Sema] Call CheckParmForFunctionDef on ObjC method parameters
CheckParmForFunctionDef performs standard checks for type completeness
and other things like a destructor check for the MSVC++ ABI.

llvm-svn: 184740
2013-06-24 14:38:26 +00:00
Chandler Carruth e4458b3204 The profile library must come before the C library so that it can use
atexit.

llvm-svn: 184708
2013-06-24 09:38:45 +00:00
Richard Smith cf4ab520b5 Avoid adding entries to the DeclContext lookup table multiple times when lazily
constructing a lookup table.

Previously, buildLookup would add lookup table entries for each item lexically
within the DC, and adding the first entry with a given name would trigger the
external source to add all its entries with that name. Then buildLookup would
carry on and re-add those entries all over again.

Instead, follow a simple rule: a declaration from an external source is only
ever made visible by the external source. One exception to this: since we don't
usually build a lookup table for the TU in C, and we never serialize one, we
don't expect the external source to provide lookups in the TU in C, so we build
those ones ourselves.

llvm-svn: 184696
2013-06-24 07:20:36 +00:00
David Blaikie ce1ae387d6 DebugInfo: ensure negative enumerators are emitted as such
There's still a problem here - since we're not appropriately using the
signedness/range of the enum to chooset the encoding and emission of
enumerators, but GCC has some bugs around this too so I assume that's
not /such/ a high priority though I may get to it soon out of
completeness.

llvm-svn: 184695
2013-06-24 07:13:13 +00:00
Richard Smith 8f8f05cf00 Slightly improve cross-module merging for function templates.
llvm-svn: 184689
2013-06-24 04:45:28 +00:00
Dmitri Gribenko 02489eb406 Comment parsing: allow "\param ..." to describe variadic arguments
Original patch by Fariborz Jahanian; extended by me.

Fixes rdar://14124644

llvm-svn: 184688
2013-06-24 04:41:32 +00:00
Richard Smith 51445cd307 When setting the external visible declarations for a decl context, check
whether they replace any existing lookups in the context, rather than
accumulating a bunch of lookup results referring to the same entity.

llvm-svn: 184679
2013-06-24 01:46:41 +00:00
Richard Smith 6ea058245e Add -ast-dump-lookups switch to -cc1 to dump DeclContext lookup maps. Test to
follow.

llvm-svn: 184678
2013-06-24 01:45:33 +00:00
Dmitri Gribenko c0510b9c97 Move comment on Sema::isFunctionPointerVarDecl() to the header file
llvm-svn: 184677
2013-06-24 01:33:34 +00:00
Dmitri Gribenko 27cb3dd085 ArrayRef'ize Sema::CodeCompleteConstructorInitializer
Patch by Robert Wilhelm.

llvm-svn: 184675
2013-06-23 22:58:02 +00:00
Chandler Carruth 363817092e Fix the addition of Clang's profile runtime library to the link step
when specifying --coverage (or related) flags.

The system for doing this was based on the old LLVM-hosted profile_rt
library, and hadn't been updated for Linux to use the new compiler-rt
library. Also, it couldn't possibly work on multiarch or biarch systems
in many cases. The whole thing now works much the same as the sanitizer
libraries that are built and used out of the compiler-rt repo.

Note that other target OSes haven't been updated because I don't know if
they're doing anything special with the installation path of profile_rt.
I suspect however that *all* of these are wrong and would encourage
maintainers of each target to take a hard look at how compiler-rt
runtime libraries are linked on their platforms.

llvm-svn: 184666
2013-06-23 11:28:48 +00:00
Stephen Lin 9354fc5abd Add null check (resolves PR16423)
llvm-svn: 184661
2013-06-23 07:37:13 +00:00
Dmitri Gribenko d666293435 Comment parsing: followup to r184610: allow multiple \returns
Remove unneeded member in CommentSema, add a test for the XML schema (the
schema already allowed multiple paragraphs in <ResultDiscussion>, but there
were no tests for that), fix HTML generation (it is not allowed to have <p>
inside <dl>).

llvm-svn: 184652
2013-06-22 23:03:37 +00:00
Richard Smith 392497bebe Fix assert if an attempt is made to explicitly instantiate an alias template.
Patch by Ismail Pazarbasi!

llvm-svn: 184650
2013-06-22 22:03:31 +00:00
Richard Smith 33937e76fd Add dumping support for DeclContext's StoredDeclsMap.
llvm-svn: 184648
2013-06-22 21:49:40 +00:00
David Blaikie 47c1150f50 DebugInfo: Support (using GNU extensions) for template template parameters and parameter packs
llvm-svn: 184644
2013-06-22 18:59:18 +00:00
Benjamin Kramer a157d0503d Remove duplicated case.
llvm-svn: 184640
2013-06-22 16:44:45 +00:00
Larisse Voufo b9bbaba6b1 Instantiation bug fix extension (cf. r184503) -- minor code fixes, including a typo that caused a runtime assertion after firing diagnosis for class definitions, with the 'template' keyword as template header, in friend declarations.
llvm-svn: 184634
2013-06-22 13:56:11 +00:00
Chandler Carruth b427c56399 Reword and reformat some of the "Multiarch" code in the toolchain setup.
There are fundamentally two different things that were getting conflated
here.

1) A bi-arch GCC toolchain install. This is not a full blown cross
   compiler, but it supports targetting both 32-bit and 64-bit variants
   of the same architecture using multilib OS installs and runtimes.

2) A "multiarch" Debian OS/runtime layout that lays out the libraries,
   headers, etc as-if there were going to be a full blown cross compiler
   even when in reality it is just a bi-arch GCC targeting two variants.
   Also, these tend to use oddly "canonicalized" triples without the
   vendor in them unlike the typical cross compiler runtime library
   search that vanilla GCC cross compilers perform.

Now, when we mean the bi-arch nature of GCC accomplished with just
a suffix or tweak to the GCC paths, we say 'Biarch' or something
related. When we mean the Debian layout of includes and libraries, we
say multiarch or reference the multiarch triple.

In the process of reading and often renaming stuff in all these places,
also reformat with clang-format. No functionality change should be going
on here, this is just tidying up.

llvm-svn: 184632
2013-06-22 11:35:51 +00:00
David Majnemer 626032f6fc Revert r184401 which reverted r183462.
The problem with r183462 was that we assumed that a diagnostic id of
zero would be silent.

This small correction to CheckDerivedToBaseConversion changes it's
behavior to omit the diagnostic when given a diagnostic id of zero.

This fix passes the test case added in r184402.

llvm-svn: 184631
2013-06-22 06:43:58 +00:00
Richard Trieu 9be9c6804f Extend -Wnon-pod-varargs to check calls made from member pointers.
llvm-svn: 184629
2013-06-22 02:30:38 +00:00
Anna Zaks 27982c70fc [analyzer] Use output form collections’ count to decide if ObjC for loop should be entered
This fixes false positives by allowing us to know that a loop is always entered if
the collection count method returns a positive value and vice versa.

Addresses radar://14169391.

llvm-svn: 184618
2013-06-22 00:23:26 +00:00
Anna Zaks 56b4975bad [CFG] Set the “loop target” (back edge) for VisitObjCForCollectionStmt loops
Add the back edge info by creating a basic block, marked as loop target. This is
consistent with how other loops are processed, but was omitted from
VisitObjCForCollectionStmt.

llvm-svn: 184617
2013-06-22 00:23:20 +00:00
Richard Trieu 41bc0994c3 Extend -Wnon-pod-varargs to more cases, such as function pointers as return
types and function pointer arrays.

llvm-svn: 184616
2013-06-22 00:20:41 +00:00
David Blaikie 18cfbc53ee DebugInfo: Random tidying up/simplification
No functionality change intended.

llvm-svn: 184614
2013-06-22 00:09:36 +00:00
David Blaikie e5323aa921 Provide suggested no-arg calls for overloaded member functions missing calls
Reviewed by Richard Smith.

llvm-svn: 184612
2013-06-21 23:54:45 +00:00
Fariborz Jahanian fb6f6f61ca [document parsing]: Allow multiple adjacent \return and the like
commands. Render them properly in XML output.
// rdar://14207725

llvm-svn: 184610
2013-06-21 23:49:29 +00:00
Tim Northover 1711cc930b Teach ARM va_arg to ignore empty structs.
Empty structs are ignored for parameter passing purposes, but va_arg was
incrementing the pointer anyway which could lead to va_list getting out of
sync.

llvm-svn: 184605
2013-06-21 23:05:33 +00:00
Tim Northover 1060eae78e Check for trivial constructibility before emptiness in ARM ABI.
According to the Itanium ABI (3.1.1), types with non-trivial copy constructors
passed by value should be passed indirectly, with the caller creating a
temporary.

We got this mostly correct, but forgot that empty structs can have non-trivial
constructors too and passed them incorrectly. This simply reverses the order of
the check.

llvm-svn: 184603
2013-06-21 22:49:34 +00:00
Nick Lewycky 92a6c74bbf Fix a leak of TargetMachine in clang. We'll continue to leak it on purpose if
given -disable-free. (Reviewed by John McCall over IRC.)

llvm-svn: 184595
2013-06-21 21:15:32 +00:00
David Blaikie 940ca4d462 PR16214: Debug info for types first used via pointers or qualified types & later require definitions
llvm-svn: 184594
2013-06-21 21:03:11 +00:00
Matt Beaumont-Gay 76d0b46dd1 Propagate the invalid bit from bases to derived template classes.
Fixes PR16292.

llvm-svn: 184581
2013-06-21 18:58:32 +00:00
Justin Holewinski 7ceab3a892 [NVPTX] Add NVPTX register constraints
llvm-svn: 184578
2013-06-21 18:51:24 +00:00
Manuel Klimek 836c2868f9 Add an option to not indent declarations when breaking after the type.
Make that option the default for LLVM style.

llvm-svn: 184563
2013-06-21 17:25:42 +00:00
Jordan Rose e83cb0922b Revert "[analyzer] Handle zeroing CXXConstructExprs."
Per review from Anna, this really should have been two commits, and besides
it's causing problems on our internal buildbot. Reverting until these have
been worked out.

This reverts r184511 / 98123284826bb4ce422775563ff1a01580ec5766.

llvm-svn: 184561
2013-06-21 16:30:32 +00:00
Douglas Gregor 963c553564 [Modules] If a module map resides in a system header directory, treat it as a system module.
This prevents -pedantic from causing warnings in the system headers
used to create modules. Fixes <rdar://problem/14201171>.

llvm-svn: 184560
2013-06-21 16:28:10 +00:00
Samuel Benzaquen c6f2c9b566 Add support for polymorphic matchers. Use runtime type checking to determine the right polymorphic overload to use.
llvm-svn: 184558
2013-06-21 15:51:31 +00:00
Reid Kleckner 23f4c4b64f [ms-cxxabi] Destroy temporary record arguments in the callee
Itanium destroys them in the caller at the end of the full expression,
but MSVC destroys them in the callee.  This is further complicated by
the need to emit EH-only destructor cleanups in the caller.

This should help clang compile MSVC's debug iterators more correctly.
There is still an outstanding issue in PR5064 of a memcpy emitted by the
LLVM backend, which is not correct for C++ records.

Fixes PR16226.

Reviewers: rjmccall

Differential Revision: http://llvm-reviews.chandlerc.com/D929

llvm-svn: 184543
2013-06-21 12:45:15 +00:00
Eli Friedman 6f0cd6e866 Delete dead code.
llvm-svn: 184520
2013-06-21 02:13:57 +00:00
Eli Friedman fd6b3f86bf Delete dead code.
llvm-svn: 184517
2013-06-21 01:49:53 +00:00
Nico Weber 5b0b46ffa2 Add an assert() suggested by Richard.
llvm-svn: 184516
2013-06-21 01:29:36 +00:00
David Blaikie f7bcb0c279 Fix all the silly things I committed in r184509
llvm-svn: 184512
2013-06-21 00:59:44 +00:00
Jordan Rose 4ace1a74c0 [analyzer] Handle zeroing CXXConstructExprs.
Certain expressions can cause a constructor invocation to zero-initialize
its object even if the constructor itself does no initialization. The
analyzer now handles that before evaluating the call to the constructor,
using the same "default binding" mechanism that calloc() uses, rather
than simply ignoring the zero-initialization flag.

As a bonus, trivial default constructors are now no longer inlined; they
are instead processed explicitly by ExprEngine. This has a (positive)
effect on the generated path edges: they no longer stop at a default
constructor call unless there's a user-provided implementation.

<rdar://problem/14212563>

llvm-svn: 184511
2013-06-21 00:59:00 +00:00
David Blaikie b8f2fbbe97 Alternative fix for r184473.
This just seems a bit tidier/more principled. Based on a patch provided
by Adrian - with the only minor tweak that it needed to use
"getTypeOrNull" rather than "getCompletedTypeOrNull" since we don't
store declarations in the CompletedTypes cache.

No intended functionality change.

llvm-svn: 184509
2013-06-21 00:40:50 +00:00
Douglas Gregor 600a2f5a21 When building a module, keep *all* declared methods in the global method pool.
As an optimization, we only kept declared methods with distinct
signatures in the global method pool, to keep the method lists
small. Under modules, however, one could have two different methods
with the same signature that occur in different (sub)modules. If only
the later submodule is important, message sends to 'id' with that
selector would fail because the first method (the only one that got
into the method pool) was hidden. When building a module, keep *all*
of the declared methods.

I did a quick check of both module build time and uses of modules, and
found no performance regression despite this causing us to keep more
methods in the global method pool. Fixes <rdar://problem/14148896>.

llvm-svn: 184504
2013-06-21 00:20:25 +00:00
Larisse Voufo 725de3e14f Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)
llvm-svn: 184503
2013-06-21 00:08:46 +00:00
Chandler Carruth d6c62b66b5 Update a comment to clarify that searching the target triple bin
directory for programs used by the driver is actually the standard
behavior we want to be compatible with GCC cross compilers -- it isn't
specific to SUSE or any other distro.

Also start fleshing out testing of the different cross compilation
patterns, both with a new very bare-bones tree of cross compilers and by
extending the multilib trees. Currently, we don't correctly model doing
a cross compile using the non-triple target of a bi-arch GCC install,
but I'll add support for that (and tests) next.

llvm-svn: 184499
2013-06-20 23:37:54 +00:00
Nico Weber 95296d4a16 Fix a crash with __flaot128 noticed by Eli.
llvm-svn: 184498
2013-06-20 23:30:30 +00:00
Michael Gottesman 930ecdb77b [checked-arithmetic builtins] Added builtins to enable users to perform checked-arithmetic in c.
This will enable users in security critical applications to perform
checked-arithmetic in a fast safe manner that is amenable to c.

Tests/an update to Language Extensions is included as well.

rdar://13421498.

llvm-svn: 184497
2013-06-20 23:28:10 +00:00
Richard Trieu 72ae1736b3 Add back a condition accidentially removed in r184470.
llvm-svn: 184496
2013-06-20 23:21:54 +00:00