Commit Graph

17726 Commits

Author SHA1 Message Date
Anders Carlsson fd4834061c Remove IsDefinition from CodeGenModule::setTypeVisibility; it is always true.
llvm-svn: 124529
2011-01-29 05:26:32 +00:00
Anders Carlsson 6b3afd7df1 When trying to get the most derived class, don't assume that we can ignore all casts. We can only ignore derived-to-base and no-op casts. Fixes selfhost.
llvm-svn: 124528
2011-01-29 05:04:11 +00:00
Anders Carlsson 1ae64c5a9d When calling a virtual member function on a base class and the most derived class is marked 'final', we can devirtualize the call.
llvm-svn: 124524
2011-01-29 03:52:01 +00:00
Anders Carlsson a376b53695 When doing a derived-to-base class through a virtual class, we don't have to get the vbase offset from the vtable if the derived class is marked final.
llvm-svn: 124523
2011-01-29 03:18:56 +00:00
Fariborz Jahanian 9f9438b314 More work to support -fapple-kext regarding
indirect vf calls and addition of extra entry
at bottom of vtbls.

llvm-svn: 124507
2011-01-28 23:42:29 +00:00
John McCall 388ef53234 Fix some corner cases in the __is_base_of logic.
llvm-svn: 124505
2011-01-28 22:02:36 +00:00
John McCall b91ab89729 Add my new file to the CMake lists, sorry about that.
llvm-svn: 124503
2011-01-28 20:10:46 +00:00
John McCall ed1ae86ac6 Move all the cleanups framework code into a single file.
Pure motion.

llvm-svn: 124484
2011-01-28 11:13:47 +00:00
John McCall cb5f77f046 Reorganize the value-dominance metaprogram and introduce a specialization
for CodeGen's RValue type.

llvm-svn: 124483
2011-01-28 10:53:53 +00:00
John McCall e4df6c8d96 Convert the exception-freeing cleanup over to the conditional cleanups code,
fixing a crash which probably nobody was ever going to see.  In doing so,
fix a horrendous number of problems with the conditional-cleanups code.
Also, make conditional cleanups re-use the cleanup's activation variable,
which avoids some unfortunate repetitiveness.

llvm-svn: 124481
2011-01-28 08:37:24 +00:00
Nico Weber 24b2a822dd PR9037: Allow override, final, and new as an extension on inline members.
llvm-svn: 124477
2011-01-28 06:07:34 +00:00
Douglas Gregor c03a1083af Give OpaqueValueExpr a source location, because its source location
might be queried in places where we absolutely require a valid
location (e.g., for template instantiation). Fixes some major
brokenness in the use of __is_convertible_to.

llvm-svn: 124465
2011-01-28 02:26:04 +00:00
Douglas Gregor 3fb22baddb Allow elision of invocations of move constructors from temporary objects.
llvm-svn: 124455
2011-01-27 23:24:55 +00:00
Douglas Gregor 21d3fca917 When producing IR for a lvalue-to-rvalue cast *as an lvalue*, only
non-class prvalues actually require the realization of a
temporary. For everything else, we already have an lvalue (or class
prvalue) in the subexpression.

Note: we're missing some move elision in this case. I'll tackle that next.
llvm-svn: 124453
2011-01-27 23:22:05 +00:00
Fariborz Jahanian ee504a0881 Fix an objective-c rewriter bug rewriting a __block
variable declaration of a struct declared type.
// rdar://8918702

llvm-svn: 124451
2011-01-27 23:18:15 +00:00
Douglas Gregor edb7685712 Teach the evaluation of the __is_convertible_to trait to translate
access control errors into SFINAE errors, so that the trait provides
enough support to implement the C++0x std::is_convertible type trait.

To get there, the SFINAETrap now knows how to set up a SFINAE context
independent of any template instantiations or template argument
deduction steps, and (separately) can set a Sema flag to translate
access control errors into SFINAE errors. The latter can also be
useful if we decide that access control errors during template argument
deduction should cause substitution failure (rather than a hard error)
as has been proposed for C++0x.

llvm-svn: 124446
2011-01-27 22:31:44 +00:00
Douglas Gregor 61b7f5e3fd Separate the access-control diagnostics from other diagnostics that do not have SFINAE behavior.
llvm-svn: 124441
2011-01-27 21:06:28 +00:00
Douglas Gregor e5bef035c6 Document some serious badness in our evaluation of the type traits: we need to be sure we have complete types in many cases
llvm-svn: 124428
2011-01-27 20:35:44 +00:00
Douglas Gregor 8006e76b4e Implement the Microsoft __is_convertible_to type trait, modeling the
semantics after the C++0x is_convertible type trait. This
implementation is not 100% complete, because it allows access errors
to be hard errors (rather than just evaluating false).

Original patch by Steven Watanabe!

llvm-svn: 124425
2011-01-27 20:28:01 +00:00
Abramo Bagnara 92141d22ce Fixed parameter names.
llvm-svn: 124408
2011-01-27 19:55:10 +00:00
Jeffrey Yasskin bbc4eea2c2 Revert r124217 because it didn't catch the actual error case it was trying to
catch:

  lock_guard(my_mutex);

declares a variable instead of creating a temporary.

llvm-svn: 124398
2011-01-27 19:17:54 +00:00
Ted Kremenek 1be4a59a11 Teach -Wuninitialized about indirect goto. Fixes PR 9071.
llvm-svn: 124394
2011-01-27 18:51:39 +00:00
Ted Kremenek afe348ea43 Wire up attributes 'ns_consumed' and 'cf_consumed' in the static analyzer's ObjC retain/release checker.
llvm-svn: 124386
2011-01-27 18:43:03 +00:00
Argyrios Kyrtzidis ff115a2f35 Allow #pragma unused to be used on global variables like gcc. Fixes rdar://8793832.
llvm-svn: 124383
2011-01-27 18:16:48 +00:00
Douglas Gregor ffd6dc432e Teach ASTUnit to save the specified target features, since
TargetInfo::CreateTargetInfo() mangles the target options in a way
that is not idempotent. Fixes <rdar://problem/8807535>.

llvm-svn: 124382
2011-01-27 18:02:58 +00:00
Argyrios Kyrtzidis add754a02e [analyzer] Fix crash when handling dot syntax on 'super'.
llvm-svn: 124376
2011-01-27 16:17:11 +00:00
Axel Naumann 63fbaeda29 TextDiagnosticPrinter.cpp: Show diagnostics as far as possible even with invalid PresomedLoc, instead of just silencing it.
FileManager.cpp: Allow virtual files in nonexistent directories.
FileManager.cpp: Close FileDescriptor for virtual files that correspond to actual files.
FileManager.cpp: Enable virtual files to be created even for files that were flagged as NON_EXISTENT_FILE, e.g. by a prior (unsuccessful) addFile().

ASTReader.cpp: Read a PCH even if the original source files cannot be found.

Add a test for reading a PCH of a file that has been removed and diagnostics referencing that file.

llvm-svn: 124374
2011-01-27 10:55:51 +00:00
John McCall 284c48fff6 Do a proper recursive lookup when deciding whether a class's usual
deallocation function has a two-argument form.  Store the result of this
check in new[] and delete[] nodes.

Fixes rdar://problem/8913519

llvm-svn: 124373
2011-01-27 09:37:56 +00:00
NAKAMURA Takumi f9cbcc4cc2 Fix whitespace.
llvm-svn: 124364
2011-01-27 07:10:08 +00:00
NAKAMURA Takumi 7c2888689d 7bit-ize.
llvm-svn: 124363
2011-01-27 07:09:49 +00:00
Ted Kremenek 0e89838ced Hook up attribute ns_consumes_self in the ObjC retain/release checker in the static analyzer.
llvm-svn: 124360
2011-01-27 06:54:14 +00:00
Ted Kremenek 1373e5496b Tweak -Wuninitialized fixit for '_Bool' types to be initialized to 0, and C++ 'bool' types to false.
llvm-svn: 124356
2011-01-27 05:18:52 +00:00
Ted Kremenek 064b0345f5 Teach -Wuninitialized to suggest "= false" for initializing bool variables.
llvm-svn: 124352
2011-01-27 02:57:57 +00:00
John McCall 2903675929 Notes on dynamic array cookies in MSVC.
My thanks to chapuni for his help in investigating this.

llvm-svn: 124351
2011-01-27 02:46:02 +00:00
John McCall 08432c8e00 Import three interesting bits that apply only to C++ methods.
llvm-svn: 124349
2011-01-27 02:37:01 +00:00
Ted Kremenek 93a313869f Teach -Wuninitialized not to assert when analyzing
blocks that reference captured variables.

llvm-svn: 124348
2011-01-27 02:29:34 +00:00
Ted Kremenek 4058d87ad5 Teach -Wuninitialized about ObjC fast enumeration loops.
llvm-svn: 124347
2011-01-27 02:01:31 +00:00
Douglas Gregor 0693defea9 When we run into a template parameter that should have a default
argument but doesn't (because previous template parameters had default
arguments), clear out all of the default arguments so that we maintain
the invariant that a template parameter has a default argument only if
subsequence template parameters also have default arguments.
Fixes a crash-on-invalid <rdar://problem/8913649>.

llvm-svn: 124345
2011-01-27 01:40:17 +00:00
Douglas Gregor dff0be70ba Cope with parenthesized function declarators when emitting a
diagnostic about ref-qualifiers where they do not belong.

llvm-svn: 124344
2011-01-27 01:30:16 +00:00
Douglas Gregor 582813596a Fix a horrible bug in our handling of C-style casting, where a C-style
derived-to-base cast that also casts away constness (one of the cases
for static_cast followed by const_cast) would be treated as a bit-cast
rather than a derived-to-base class, causing miscompiles and
heartburn.

Fixes <rdar://problem/8913298>.

llvm-svn: 124340
2011-01-27 00:58:17 +00:00
Fariborz Jahanian 2f2fa7284b Fixes an IRgen bug where __block variable is
referenced in the block-literal initializer
of that variable. // rdar://8893785

llvm-svn: 124332
2011-01-26 23:08:27 +00:00
Douglas Gregor 56d5f0abaa Add __has_feature(cxx_reference_qualified_functions); update tests and
documentation.

llvm-svn: 124322
2011-01-26 21:25:54 +00:00
Douglas Gregor c83f9865a0 Implement the restriction that a function with a ref-qualifier cannot
overload a function without a ref-qualifier (C++0x
[over.load]p2). This, apparently, completes the implementation of
rvalue references for *this.

llvm-svn: 124321
2011-01-26 21:20:37 +00:00
Douglas Gregor ce95084d5c Handle C-style casts to rvalue reference types that cast away constness.
llvm-svn: 124319
2011-01-26 21:04:06 +00:00
Douglas Gregor a52713096d Improve the extension warning for the use of ref-qualifiers, to
distinguish them from rvalue references. Using the rvalue-references
warning was weird when the ref-qualifier was '&'.

llvm-svn: 124316
2011-01-26 20:35:32 +00:00
John McCall 5143d646b9 When mangling a qualified array type, push the qualifiers down to the
element type.  Fixes rdar://problem/8913416.

llvm-svn: 124315
2011-01-26 20:05:40 +00:00
Douglas Gregor e1a47c1766 Rvalue references for *this: explicitly keep track of whether a
reference binding is for the implicit object parameter of a member
function with a ref-qualifier. My previous comment, that we didn't
need to track this explicitly, was wrong: we do in fact get
rvalue-references-prefer-rvalues overloading with ref-qualifiers.

llvm-svn: 124313
2011-01-26 19:41:18 +00:00
Douglas Gregor 0282432039 Rvalue references for *this: implement the implicit conversion rules
for the implicit object argument to a non-static member function with
a ref-qualifier (C++0x [over.match.funcs]p4).

llvm-svn: 124311
2011-01-26 19:30:28 +00:00
John McCall 0a6bf2ebe2 Un-nest the meat of this function.
llvm-svn: 124310
2011-01-26 19:21:13 +00:00
John McCall f256eb54a2 Fix some obvious bugs in the conditional-cleanup code and then make the
dtor cleanup use it.

llvm-svn: 124309
2011-01-26 19:15:39 +00:00