Commit Graph

21200 Commits

Author SHA1 Message Date
Zhongxing Xu bfb8e2fe6e If size was equal to 0, either NULL or a pointer suitable to be passed to
free() is returned by realloc(). Most code expect NULL.

And we only need to transfer one final ProgramState.

llvm-svn: 138937
2011-09-01 04:53:59 +00:00
Argyrios Kyrtzidis 019f3c2444 Fix "multi-line comment" compiler error.
llvm-svn: 138936
2011-09-01 03:07:11 +00:00
Douglas Gregor 528499bb44 When defining the implicit move assignment operator, don't perform
semantic analysis when taking the address of an xvalue. Instead, just
build the unary operator directly, since it's safe to do so (from the
IRgen and AST perspectives) for any glvalue. Fixes PR10822.

llvm-svn: 138935
2011-09-01 02:09:07 +00:00
Argyrios Kyrtzidis 7d847c9fd8 Support importing of ObjC categories from modules.
The initial incentive was to fix a crash when PCH chaining categories
to an interface, but the fix was done in the "modules way" that I hear
is popular with the kids these days.

Each module stores the local chain of categories and we combine them
when the interface is loaded. We also warn if non-dependent modules
introduce duplicate named categories.

llvm-svn: 138926
2011-09-01 00:58:55 +00:00
Chandler Carruth eef47ba664 Create a CaretDiagnostic class to hold the logic for emitting
(unsurprisingly) caret diagnostics. This is designed to bring some
organization to the monstrous EmitCaretDiagnostic function, and allow
factoring it more easily and with less mindless parameter passing.

Currently this just lifts the existing function into a method, and
splits off the obviously invariant arguments to be class members. No
functionality is changed, and there are still lots of warts to let
existing code continue functioning as-is. Definitely WIP, more cleanups
to follow.

llvm-svn: 138921
2011-08-31 23:59:23 +00:00
Chandler Carruth 153a7bb35e Sink all of the include stack printing logic into its member function.
llvm-svn: 138920
2011-08-31 23:59:19 +00:00
Fariborz Jahanian 97d744bea4 objective-c: this patch (re)introduces objective-c's default property
synthesis. This new feature is currently placed under 
-fobjc-default-synthesize-properties option
and is off by default pending further testing.
It will become the default feature soon. 
// rdar://8843851

llvm-svn: 138913
2011-08-31 22:24:06 +00:00
Douglas Gregor dd8a2fe0be Switch the "no module found" default-fatal warning to a default-fatal error.
llvm-svn: 138909
2011-08-31 21:52:21 +00:00
John McCall fa6f5d6ab8 Don't assert when diagnosing a missing cast of an unknown-anytype
message send to an unknown method.

rdar://problem/9416370, redux.

llvm-svn: 138893
2011-08-31 20:57:36 +00:00
Chad Rosier 64707fee22 [driver] If no -miphoneos-version-min is specified on the command line *and*
IPHONEOS_DEPLOYMENT_TARGET if undefined, set -miphoneos-version-min based on 
isysroot.

llvm-svn: 138892
2011-08-31 20:56:25 +00:00
Eli Friedman 874844123f Make sure to initialize field. Hopefully this will fix some test failures on Windows.
llvm-svn: 138880
2011-08-31 18:45:31 +00:00
Jordy Rose 973a8886f6 [analyzer] Fix varargs helper to only use POD types even for named arguments. Thanks, Joerg.
llvm-svn: 138875
2011-08-31 18:33:45 +00:00
Douglas Gregor ca97589f7d Switch __import__ over to __import_module__, so we don't conflict with
existing practice with Python extension modules. Not that Python
extension modules should be using a double-underscored identifier
anyway, but...

llvm-svn: 138870
2011-08-31 18:19:09 +00:00
Fariborz Jahanian bd0642fede objective-c - This patch buffers method implementations
and does the Sema on their body after the entire 
class/category @implementation is seen. This change allows messaging 
of forward private methods, as well as, access to 
synthesized ivars of properties with foward synthesize
declarations; among others. In effect, this patch removes
several restrictions placed on objective-c due to in-place
semantics processing of methods.
This is part of // rdar://8843851.

llvm-svn: 138865
2011-08-31 17:37:55 +00:00
Sebastian Redl b74486312b Serialize the new bits in CXXRecordDecl::DefinitionData.
llvm-svn: 138855
2011-08-31 13:59:56 +00:00
Chandler Carruth c841b6e598 Improve the diagnostic text for -Wmissing-noreturn to include the name
of the function in question when applicable (that is, not for blocks).
Patch by Joerg Sonnenberger with some stylistic tweaks by me.

When discussing this weth Joerg, streaming the decl directly into the
diagnostic didn't work because we have a pointer-to-const, and the
overload doesn't accept such. In order to make my style tweaks to the
patch, I first changed the overload to accept a pointer-to-const, and
then changed the diagnostic printing layer to also use
a pointer-to-const, cleaning up a gross line of code along the way.

llvm-svn: 138854
2011-08-31 09:01:53 +00:00
Eli Friedman 3781a36238 Change err_pp_file_not_found back to an Error; when it's a Warning, we suppress it in system headers. And it is not a good idea to suppress it in system headers. (This was originally changed in r134996 to implement -MG.)
Fixes <rdar://10041960>.  And also brings down the number of warnings without a flag by one :)

llvm-svn: 138842
2011-08-30 23:07:51 +00:00
Douglas Gregor 86325ad2b5 Allow C99 hexfloats in C++0x mode. This change resolves the standards
collision between C99 hexfloats and C++0x user-defined literals by
giving C99 hexfloats precedence. Also, warning about user-defined
literals that conflict with hexfloats and those that have names that
are reserved by the implementation. Fixes <rdar://problem/9940194>.

llvm-svn: 138839
2011-08-30 22:40:35 +00:00
Jeffrey Yasskin 924255875e Fix PR10694: Boolean conversions can be from pointers, and those conversions
aren't considered narrowing conversions.

llvm-svn: 138838
2011-08-30 22:25:41 +00:00
Douglas Gregor 05ef93158d When writing out the entries in a lookup table for a DeclContext, make
sure that all of the CXXConversionDecls go into the same
bucket. Otherwise, name lookup might not find them all. Fixes
<rdar://problem/10041960>.

llvm-svn: 138824
2011-08-30 20:49:19 +00:00
Sebastian Redl 22653bac1a Declare and define implicit move constructor and assignment operator.
This makes the code duplication of implicit special member handling even worse,
but the cleanup will have to come later. For now, this works.
Follow-up with tests for explicit defaulting and enabling the __has_feature
flag to come.

llvm-svn: 138821
2011-08-30 19:58:05 +00:00
Argyrios Kyrtzidis 3a5094b18c Remove a few mutating ObjCCategoryDecl methods.
Remove
  -setClassInterface
  -setNextClassCategory
  -insertNextClassCategory

and combine them in the Create function.

llvm-svn: 138817
2011-08-30 19:43:26 +00:00
Argyrios Kyrtzidis d3497db59b In ASTWriter::WriteDeclContextVisibleBlock, don't write empty lookups.
Empty lookups can occur in the DeclContext map when we are chaining PCHs, where
the empty lookup indicates that we already looked in ExternalASTSource.

llvm-svn: 138816
2011-08-30 19:43:23 +00:00
Argyrios Kyrtzidis 342e08fbf1 Remove a couple of unnecessary objc method lookups.
llvm-svn: 138815
2011-08-30 19:43:21 +00:00
Fariborz Jahanian 59b75285f6 objc - fixes a regression in declaring c decls nested in
objective-c containers due to recent changes to objc decl 
contexts. // rdar://10041908

llvm-svn: 138803
2011-08-30 17:10:52 +00:00
Jordy Rose b7abce9f8b Remove obsolete ObjCInferRelatedReturnType from LangOptions...the correct option is ObjCInferRelatedResultType.
llvm-svn: 138793
2011-08-30 01:51:13 +00:00
John McCall 3480ef24d1 The size of struct UnwindException varies by platform with no
apparent general rule.  Just special-case it as appropriate.
PR10789.

llvm-svn: 138792
2011-08-30 01:42:09 +00:00
John McCall 154a2fd3cb Be sure to emit lvalue-to-rvalue casts for loads from x-values.
Doing this happens to disrupt the pattern that ARC was looking for
for move optimizations, so we need to fix that simultaneously.

llvm-svn: 138789
2011-08-30 00:57:29 +00:00
Douglas Gregor 9f05ed53fd Fix a typo when determining whether to strip cv-qualifiers during template argument deduction
llvm-svn: 138787
2011-08-30 00:37:54 +00:00
John McCall 0562caaad6 Update the comment on the default-argument conversion fix; thanks to
Johannes Schaub for talking me around to sense.

llvm-svn: 138784
2011-08-29 23:55:37 +00:00
Nico Weber f926a45df5 Do not warn about [super finalize] in arc mode.
llvm-svn: 138776
2011-08-29 22:59:14 +00:00
Ivan Krasin 69a990badb Clang/PNaCl: Improve test coverage for PNaClTargetInfo (type aligns), fixes nits:
- wrong alignment for double (it was 4, but 8 is desired),
- added checks for _REENTRANT define,
- fixed the issue that defines were not tested (because the check for inside #ifdef).

llvm-svn: 138775
2011-08-29 22:39:12 +00:00
Caitlin Sadowski dd5fd87a6d Thread safety: added basic handling for pt_guarded_by/var and guarded_by/var annotations. We identify situations where we are accessing (reading or writing) guarded variables, and report an error if the appropriate locks are not held.
llvm-svn: 138774
2011-08-29 22:27:51 +00:00
Fariborz Jahanian abc11aa3bc Fix a rewriter bug caused by recent changes in objc's
group decls.

llvm-svn: 138772
2011-08-29 22:21:46 +00:00
Eli Friedman f8cb480528 Add missing function _mm_ucomige_sd to emmintrin.h. PR10803.
llvm-svn: 138769
2011-08-29 21:26:24 +00:00
Anna Zaks 50dd696339 [analyzer] MacOSKeychainAPIChecker: Simplify getSymbolForRegion by using existing API. Thanks Jordy.
llvm-svn: 138765
2011-08-29 21:10:00 +00:00
Anna Zaks 814adf7752 Fix: Bug 10798 - [analyzer] Crash when analyzing ICU. (A slight improvement on the previous commit.)
llvm-svn: 138762
2011-08-29 20:43:37 +00:00
Anna Zaks cda129eb1c Fix bug 10797: Crash: "cast<Ty>() argument of incompatible type!" assert when analyzing ICU.
Patch by Jean-Daniel Dupas. Thanks for spotting and fixing!

llvm-svn: 138757
2011-08-29 20:05:54 +00:00
Eli Friedman d62d51c84d Some minor updates to the Linux search path handling for Slackware. Patch by Will Dietz. PR10692.
llvm-svn: 138753
2011-08-29 18:56:43 +00:00
Fariborz Jahanian 4327b32654 Minor clean up of objc's decl context stuff.
No change in functionality.

llvm-svn: 138742
2011-08-29 17:33:12 +00:00
Douglas Gregor 26858b7e10 Add and document __has_feature values for the remaining C++0x
features, so clients can check for the availability of these features
even before we get around to implementing them.

llvm-svn: 138741
2011-08-29 17:28:38 +00:00
Caitlin Sadowski 293d24a5ba Thread safety: various minor bugfixes, with test cases
This patch is by DeLesley Hutchins.

llvm-svn: 138738
2011-08-29 17:12:27 +00:00
Jeffrey Yasskin 74231381a3 Print 'int' instead of 'const int' in the narrowing conversion error, since the
qualification of a type doesn't affect whether a conversion is a narrowing
conversion.
This doesn't work in template cases because SubstTemplateTypeParmType gets in
the way.

llvm-svn: 138735
2011-08-29 15:59:37 +00:00
Nico Weber 1fb82667dd Warn on missing [super finalize] calls.
This matches gcc's logic. Second half of PR10661.

llvm-svn: 138730
2011-08-28 22:35:17 +00:00
Jordy Rose 58a20d31b7 [analyzer] Introduce a new callback for checkers, printState, to be used for debug-printing the contents of a ProgramState.
Unlike the other callbacks, this one is a simple virtual method, since it is only to be used for debugging.

This new callback replaces the old ProgramState::Printer interface, and allows us to move the printing of refcount bindings from CFRefCount to RetainReleaseChecker.

llvm-svn: 138728
2011-08-28 19:11:56 +00:00
Jordy Rose e9ff97b850 [analyzer] Remove the ProgramState argument from ExprEngine::evalBind; we were ignoring it anyway. No functionality change.
llvm-svn: 138720
2011-08-28 06:02:28 +00:00
Jordy Rose d26e9e7f7c [analyzer] Eliminate almost all uses of TransferFuncs from ExprEngine.
llvm-svn: 138719
2011-08-28 05:54:23 +00:00
Jordy Rose d188d66e69 [analyzer] Migrate argument invalidation from CFRefCount to ExprEngine.
This is a common path for function and C++ method calls, Objective-C messages and property accesses, and C++ construct-exprs.

As support, add message receiver accessors to ObjCMessage and CallOrObjCMessage.

llvm-svn: 138718
2011-08-28 05:16:28 +00:00
Jordy Rose 1fad663126 [analyzer] Change the check::RegionChanges callback to include the regions explicitly requested for invalidation.
Also, allow CallOrObjCMessage to wrap a CXXConstructExpr as well.

Finally, this allows us to remove the clunky whitelisting system from CFRefCount/RetainReleaseChecker. Slight regression due to CXXNewExprs not yet being handled in post-statement callbacks (PR forthcoming).

llvm-svn: 138716
2011-08-27 22:51:26 +00:00
John McCall 4bb057d321 Disable the l-value to r-value conversion on C++ class types passed
to varargs functions in unevaluated contexts.  AFAICT, there is no
standards justification for this, but it matches what other compilers do
and therefore preserves compatibility with certain template metaprogramming
idioms.

Should fix self-host.

llvm-svn: 138715
2011-08-27 22:06:17 +00:00
Fariborz Jahanian 83aa8ab3ae objective-c - Make warning on unimplemented protocols point
to class implementation where it is supposed to be
implemented. // rdar://10009982.

llvm-svn: 138714
2011-08-27 21:55:47 +00:00
Ted Kremenek 996bfab499 [analyzer] Rename current PathDiagnosticClient::HandlePathDiagnostic() to HandlePathDiagnosticImpl(), and slot in new HandlePathDiagnostic() for potentially handling concurrent access to PathDiagnosticClients (in the future).
llvm-svn: 138713
2011-08-27 21:39:14 +00:00
Ted Kremenek 60120fb1b1 [analyzer] Pull body of loop in AnalysisConsumer::HandleDeclContext() into its own method. No real functionality change.
llvm-svn: 138712
2011-08-27 21:28:09 +00:00
Fariborz Jahanian 3a039e339f objective-c: Treat top-level objective-c declarations
, such as list of forward @class decls, in a DeclGroup
node. Deal with its consequence throught clang. This
is in preparation for more Sema work ahead. // rdar://8843851.
Feel free to reverse if it breaks something important
and I am unavailable.

llvm-svn: 138709
2011-08-27 20:50:59 +00:00
Benjamin Kramer 1174675c7b Remove unused variables noticed by GCC.
llvm-svn: 138707
2011-08-27 17:54:32 +00:00
Douglas Gregor d90c3c92d5 Take an entirely different approach to handling the "parsing" of
__import__ within the preprocessor, since the prior one foolishly
assumed that Preprocessor::Lex() was re-entrant. We now handle
__import__ at the top level (only), after macro expansion. This should
fix the buildbot failures.

llvm-svn: 138704
2011-08-27 06:37:51 +00:00
John McCall 29ad95b232 The lvalue-to-rvalue on structs in C++ is actually part
of default argument promotion and needs to happen unconditionally.
This is particularly semantically important in C++0x.

llvm-svn: 138691
2011-08-27 01:09:30 +00:00
Benjamin Kramer 79cfba180a Twinify.
llvm-svn: 138689
2011-08-27 00:34:29 +00:00
Douglas Gregor 472f85d86b In C++0x mode, suggest nullptr as the initializer for an uninitialized
pointer variable. Patch by David Blaikie!

llvm-svn: 138687
2011-08-27 00:18:50 +00:00
Douglas Gregor afeabec7e1 Improve caret location for the GNU old-style field designator warning, from David Blaikie
llvm-svn: 138684
2011-08-27 00:13:16 +00:00
Douglas Gregor c67bcd5b65 Remove the -import-module option. It's no longer useful
llvm-svn: 138681
2011-08-27 00:03:05 +00:00
Douglas Gregor 5be7a1c818 Try to unbreak the build on systems where uint64_t isn't something that StringRef::getAsInteger can handle as its second argument
llvm-svn: 138680
2011-08-26 23:57:29 +00:00
Douglas Gregor 081425343b Introduce support for a simple module import declaration, which
loads the named module. The syntax itself is intentionally hideous and
will be replaced at some later point with something more
palatable. For now, we're focusing on the semantics:
  - Module imports are handled first by the preprocessor (to get macro
  definitions) and then the same tokens are also handled by the parser
  (to get declarations). If both happen (as in normal compilation),
  the second one is redundant, because we currently have no way to
  hide macros or declarations when loading a module. Chris gets credit
  for this mad-but-workable scheme.
  - The Preprocessor now holds on to a reference to a module loader,
  which is responsible for loading named modules. CompilerInstance is
  the only important module loader: it now knows how to create and
  wire up an AST reader on demand to actually perform the module load.
  - We search for modules in the include path, using the module name
  with the suffix ".pcm" (precompiled module) for the file name. This
  is a temporary hack; we hope to improve the situation in the
  future.

llvm-svn: 138679
2011-08-26 23:56:07 +00:00
Argyrios Kyrtzidis 1045430525 [arcmt] Add a test case for r138671 and improve the loop.
llvm-svn: 138674
2011-08-26 23:20:23 +00:00
Argyrios Kyrtzidis 3da6bc16bb [arcmt] Fix horrible bug where migrating files if there is a space in the paths
of the migrated files. rdar://10022801

llvm-svn: 138671
2011-08-26 22:40:55 +00:00
Chad Rosier 97c373793b Cleanup r138662 per Ben and David's suggestions, thanks.
llvm-svn: 138670
2011-08-26 22:27:02 +00:00
Douglas Gregor 4e4c83e995 Teach the ASTReader how to avoid cycles when loading declarations that
are lexically within a particular DeclContext. Test forthcoming.

llvm-svn: 138668
2011-08-26 22:04:51 +00:00
Chad Rosier f0be551d68 Make sure the std::string isn't deallocated prior to use. Many thanks to Eli
for catching this.

llvm-svn: 138666
2011-08-26 21:47:20 +00:00
Chad Rosier 39ab743e59 [driver] When generating temporary files allow a prefix to be added. In many
cases we want the prefix to be the original file name less the suffix.  For an
input such as test.c to named temporary would be something like test-3O4Clq.o
Part of <rdar://problem/8314451>

llvm-svn: 138662
2011-08-26 21:28:44 +00:00
Douglas Gregor f337ae9477 When we're deserializing declarations lexically stored in a RecordDecl
after having already deserialized the fields, clear out the fields
first. This makes sure that we keep all of the declarations in the
lexical context (including those implicitly added by later
type-checking) within the same list. A test case for this behavior is
coming as part of another commit; testing for this problem in
isolation is a nightmare.

llvm-svn: 138661
2011-08-26 21:23:06 +00:00
Fariborz Jahanian 97b6ac5407 objc-arc: Mention property's attribute by name when
finding life-time conflict with its declared ivar.
// rdar://10007230

llvm-svn: 138659
2011-08-26 21:21:19 +00:00
John McCall 17054bd670 Slight optimization enabled by the previous assert:
emit all gl-value arguments as reference bindings.

llvm-svn: 138655
2011-08-26 21:08:13 +00:00
Jordy Rose 256a6dd13b [analyzer] Remove a couple of unnecessary returns after llvm_unreachables.
llvm-svn: 138649
2011-08-26 20:32:01 +00:00
Eli Friedman 755c0c996a Don't assert on taking the address of a non-type template parameter. Fixes PR10766.
llvm-svn: 138648
2011-08-26 20:28:17 +00:00
Eli Friedman 79b2d3a4d4 Make sure we don't crash printing builtin candidates for overloads of deleted operators. Fixes PR10757.
llvm-svn: 138645
2011-08-26 19:46:22 +00:00
John McCall 0a76c0cf68 Assert that a call argument is a gl-value iff the parameter is a reference type.
llvm-svn: 138639
2011-08-26 18:42:59 +00:00
John McCall 1cd60a2670 In -Wno-error=non-pod-varargs, initialize a temporary with
the crazy comma expression so that we get an r-value in the
varargs position.

llvm-svn: 138638
2011-08-26 18:41:18 +00:00
Chad Rosier f29d9aa5f5 [driver] Remove a few more options when clang invokes cc1plus for i386 kexts.
<rdar://problem/10027287>

llvm-svn: 138637
2011-08-26 18:30:43 +00:00
Axel Naumann cb2c52f7ac From Vassil Vassilev: unnamed decls cannot be removed from the lookup map.
llvm-svn: 138631
2011-08-26 14:06:12 +00:00
John McCall cac93853ae What say we document some of these AggValueSlot flags a bit
better.

llvm-svn: 138628
2011-08-26 08:02:37 +00:00
John McCall 46759f4f46 Since the 'is aliased' bit is critical for correctness in C++, it
really shouldn't be optional.  Fix the remaining place where a
temporary was being passed as potentially-aliased memory.

Fixes PR10756.

llvm-svn: 138627
2011-08-26 07:31:35 +00:00
John McCall a8a39bc346 An initialization does not alias.
llvm-svn: 138624
2011-08-26 05:38:08 +00:00
Chad Rosier aedf7d5f4e Take 2: Actually fix spacing.
llvm-svn: 138617
2011-08-26 00:49:52 +00:00
John McCall eb07554d9c Be sure to do unary conversions on the operand to an ARC
bridged cast.  Noticed by AST inspection by Ted Kremenek!

llvm-svn: 138616
2011-08-26 00:48:42 +00:00
John McCall 35e4f0cd0f The allocated exception slot does not alias anything; should fix self-host.
llvm-svn: 138615
2011-08-26 00:46:38 +00:00
Chad Rosier 3b561ebd44 80-column.
llvm-svn: 138614
2011-08-26 00:44:04 +00:00
Jeffrey Yasskin 0e9cdbbb06 Handle CXXTempObjectRegion in StackAddrEscapeChecker.
Also convert stack-addr-ps.cpp to use the analyzer instead of just Sema, now
that it doesn't crash, and extract the stack-block test into another file since
it errors, and that prevents the analyzer from running.

llvm-svn: 138613
2011-08-26 00:41:31 +00:00
Chad Rosier ba3df1d3ca [driver] Add -mglobal-merge/-mno-global-merge machine options to enable/disable merging of
globals during codegen.
Fixes <rdar://problem/10017909>.

llvm-svn: 138612
2011-08-26 00:26:29 +00:00
Francois Pichet 35bc5de3bd revert 138610, accidental commit.
llvm-svn: 138611
2011-08-26 00:22:34 +00:00
Francois Pichet 9a98454a7d (no commit message)
llvm-svn: 138610
2011-08-26 00:18:13 +00:00
Ivan Krasin 9b2cbdfcff PNaClTargetInfo: add __ELF__, _REENTRANT and _GNU_SOURCE defines and update the test
llvm-svn: 138607
2011-08-25 23:49:20 +00:00
Matt Beaumont-Gay 045bde420b Fix a crash-on-invalid.
Much to everyone's surprise, the default constructor for TypeResult produces
an instance with Invalid == false. This seems like a decision we may want to
revisit.

llvm-svn: 138601
2011-08-25 23:22:24 +00:00
John McCall a5efa7386a Track whether an AggValueSlot is potentially aliased, and do not
emit call results into potentially aliased slots.  This allows us
to properly mark indirect return slots as noalias, at the cost
of requiring an extra memcpy when assigning an aggregate call
result into a l-value.  It also brings us into compliance with
the x86-64 ABI.

llvm-svn: 138599
2011-08-25 23:04:34 +00:00
Fariborz Jahanian 5cc730cdef Don't warn on category implementing a method, if
declated method in the class belongs to a synthesized
property getter/setter. // rdar://10014946

llvm-svn: 138598
2011-08-25 22:58:42 +00:00
Douglas Gregor 2ed0ee1ace Eliminate the -chained-pch flag and all of the frontend and libclang options associated with it. Chained PCH is the only way to build a PCH file that includes another PCH file
llvm-svn: 138597
2011-08-25 22:54:01 +00:00
Douglas Gregor 36db4f9602 Remove the Chaining argument from the PCH/module generator. It's no longer used
llvm-svn: 138596
2011-08-25 22:35:51 +00:00
Douglas Gregor 69f74f80db Introduce a -cc1 option "-emit-module", that creates a binary module
from the given source. -emit-module behaves similarly to -emit-pch,
except that Sema is somewhat more strict about the contents of
-emit-module. In the future, there are likely to be more interesting
differences.

llvm-svn: 138595
2011-08-25 22:30:56 +00:00
Fariborz Jahanian 371376010f objc - fix a bug exposed by my recent decl context
changes. // rdar://10015110

llvm-svn: 138594
2011-08-25 22:26:53 +00:00
Douglas Gregor d09937fde0 Clean up the reloading of identifier information following the load of
a top-level module. This code is still horrible and should go away,
but we're not there yet.

llvm-svn: 138586
2011-08-25 21:19:59 +00:00
Douglas Gregor a918babff4 Preload source location entries as soon as we've loaded a particular
AST file, rather than waiting until we finish loading the top-level
AST file.

llvm-svn: 138585
2011-08-25 21:09:44 +00:00
Fariborz Jahanian d8114f7560 Reverse r138567 until a buildbot failure is investigated.
llvm-svn: 138584
2011-08-25 21:09:22 +00:00
Douglas Gregor 2fdb6b5391 Move file validation in the ASTReader from "top of chain" validation
to "when loading a particular module" validation, since it was only
validating local information anyway. This shouldn't change anything.

llvm-svn: 138583
2011-08-25 20:58:51 +00:00
Douglas Gregor d44252ec03 Factor the Module and ModuleManager classes out into separate headers
and .cpp files, since ASTReader.cpp was getting way too large. No
functionality change.

llvm-svn: 138582
2011-08-25 20:47:51 +00:00
John McCall 8d6fc9583d Use stronger typing for the flags on AggValueSlot and require
creators to tell us whether something needs GC barriers.
No functionality change.

llvm-svn: 138581
2011-08-25 20:40:09 +00:00
Argyrios Kyrtzidis 7aecbc7661 Make Lexer::ComputePreamble accept a LangOptions parameter, otherwise it may be
out-of-sync how a file is compiled. Patch by Matthias Kleine!

llvm-svn: 138580
2011-08-25 20:39:19 +00:00
Ted Kremenek 1b7f49c2d6 Teach -Wunreachable-code about dead code caused by macro expansions. This should suppress false positives resulting from 'assert' and friends.
llvm-svn: 138576
2011-08-25 19:28:55 +00:00
Douglas Gregor 69e9464340 Switch ASTReader::GetHeaderFileInfo() from a walk over the module
chain to a proper search.

llvm-svn: 138574
2011-08-25 18:14:34 +00:00
Douglas Gregor 14f771695a Switch the forward walk through the module chain over to a depth-first
search in ASTReader::ReadPreprocessedEntities().

llvm-svn: 138572
2011-08-25 18:03:05 +00:00
Fariborz Jahanian 35d0e66bee Fixes a typo in my last patch.
llvm-svn: 138571
2011-08-25 18:01:27 +00:00
Fariborz Jahanian 73d5f67f5a objc -arse: Use DeclGroup for forward class declarations;
as in @class foo, bar. More cleanup to follow.

llvm-svn: 138567
2011-08-25 17:47:31 +00:00
Chad Rosier 160276dc93 [driver] Do not add -kext to the link command line when compiling with
-fapple-kext.
Fixes <rdar://problem/10013310>. Reverts <rdar://problem/7809940>.

llvm-svn: 138564
2011-08-25 17:33:03 +00:00
Douglas Gregor aa7cbfd259 Remove a bogus assertion from the AST reader, which assumed that
redeclarations of a particular entity would occur in source
order. Friend declarations that occur within class templates (or
member classes thereof) do not follow this, nor would modules. Big
thanks to Erik Verbruggen for reducing this problem from the Very
Large Qt preamble testcase he found.

llvm-svn: 138557
2011-08-25 15:28:26 +00:00
Douglas Gregor c10edd6dd0 Use the module manager's search facility to look for methods with a
given selector, rather than walking the chain backwards. Teach its
visitor how to merge multiple result sets into a single result set,
combining the results of selector lookup in several different modules
into a single result set.

llvm-svn: 138556
2011-08-25 14:51:20 +00:00
Jordy Rose 15484daafe [analyzer] Move the leak bugs from CFRefCount to RetainReleaseChecker, with a level of indirection to handle GC vs. non-GC.
llvm-svn: 138538
2011-08-25 01:14:38 +00:00
Anna Zaks 5be8a4d104 [analyzer] MacOSKeychainAPIChecker: Cleanup AllocationState structure.
llvm-svn: 138535
2011-08-25 00:59:06 +00:00
Francois Pichet f2fb411d4a Add support for Microsoft __ptr32 keyword.
Patch by Chris Cudmore!

llvm-svn: 138533
2011-08-25 00:36:46 +00:00
Jordy Rose 4ba0ba42e2 [analyzer] Move the easy bug types from CFRefCount to RetainReleaseChecker.
(These bug types may have just been leaked before...!)

llvm-svn: 138532
2011-08-25 00:34:03 +00:00
Anna Zaks 85913db489 [analyzer] MacOSKeychainAPIChecker: Add the custom BugReport visitor(which highlights the allocation site) to all the relevant reports within the checker.
llvm-svn: 138531
2011-08-25 00:32:42 +00:00
Jordy Rose 8b289a2cbd [analyzer] Move the RetainSummaryManager from CFRefCount to RetainReleaseChecker.
Because Checkers live for an entire translation unit, this persists summary caches across multiple code bodies and avoids repeated initialization (but probably at the cost of memory). This removes the last references from RetainReleaseChecker to CFRefCount.

llvm-svn: 138529
2011-08-25 00:10:37 +00:00
Fariborz Jahanian 5c4b2ca699 blocks - capturing logic of byref block variable's expression
statement initializer makes safe assumption when a substatement 
is encounterred (with a fix me).

llvm-svn: 138528
2011-08-25 00:06:26 +00:00
Jordy Rose a4c41bb875 [analyzer] Better fix for the "missing return" error, from Ted.
llvm-svn: 138526
2011-08-24 23:41:46 +00:00
Jordy Rose 34a83e911f [analyzer] Silence another incorrect warning ("control reaches end of non-void function")
llvm-svn: 138510
2011-08-24 22:58:49 +00:00
Jordy Rose 763982b82d [analyzer] Remove experimental FIXME that never actually applied to the code in trunk.
llvm-svn: 138508
2011-08-24 22:45:12 +00:00
Jordy Rose 184bd1430b [analyzer] CFRefReport and friends no longer depend on CFRefCount.
llvm-svn: 138506
2011-08-24 22:39:09 +00:00
Douglas Gregor 754ff8b622 Remove long-dead FIXME
llvm-svn: 138498
2011-08-24 22:09:40 +00:00
Anna Zaks f880cff209 [analyzer] Do not use references in std::pair.
llvm-svn: 138497
2011-08-24 21:58:55 +00:00
Douglas Gregor a3e59b49e7 Don't force the complete deserialization of the visible-declarations
table when serializing an AST file. This was a holdover from the days
before chained PCH, and is a complete waste of time and storage
now. It's a good thing it's useless, because I have no idea how I
would have implemented MaterializeVisibleDecls efficiently in the
presence of modules.

llvm-svn: 138496
2011-08-24 21:56:08 +00:00
Anna Zaks 0d67579497 [analyzer] Unbreak the release buildbot.
llvm-svn: 138493
2011-08-24 21:40:10 +00:00
Douglas Gregor 1257f97003 Introduce a depth-first search of modules into the module manager,
which supports both pre-order and post-order traversal via a visitor
mechanism. Use this depth-first search with a post-order traversal to
give predictable ordering semantics when walking all of the lexical
declarations in the translation unit.

Eventually, module imports will occur in the source code rather than
at the beginning, and we'll have to revisit this walk.

llvm-svn: 138490
2011-08-24 21:27:34 +00:00
Ivan Krasin 7a09d12242 Follow up to r138470 (Add PNaCl TargetInfo). I've occasionally submitted wrong patch.
llvm-svn: 138489
2011-08-24 21:22:25 +00:00
Anna Zaks be460898bb [analyzer] MacOSKeychainAPIChecker: Provide reacher diagnostic trace by pointing to the allocation site when reporting a leak.
llvm-svn: 138479
2011-08-24 20:52:46 +00:00
Jordy Rose 9ff0299935 [analyzer] Silence an (incorrect) uninitialized variable warning, caught by Cameron.
llvm-svn: 138477
2011-08-24 20:38:42 +00:00
Jordy Rose 38eea65acd [analyzer] Copy GC mode setting from CFRefCount to RetainReleaseChecker in preparation for getting rid of CFRefCount.
This is a little hacky for now but will get better once we decide the best way to handle this.

llvm-svn: 138476
2011-08-24 20:33:55 +00:00
Argyrios Kyrtzidis b87ea9871d Silence 'may be used uninitialized' warnings.
llvm-svn: 138475
2011-08-24 20:33:05 +00:00
Anna Zaks 45aa208554 [analyzer] Allow checker writes to specify that no region should be accosiated with the report. (Useful when we report an error on endOfPath or deadSymbols, when the range of the last expression might have nothing to do with the error.)
llvm-svn: 138474
2011-08-24 20:31:06 +00:00
Ivan Krasin dd7403e612 Add PNaCl TargetInfo.
llvm-svn: 138470
2011-08-24 20:22:22 +00:00
Jordy Rose e8743a7499 [analyzer] Remove unused DoNothingByRef and the special case for CFDictionaryCreate.
This is a very small regression (actually introduced in r138309) because it won't catch leaks of objects passed by reference to CFDictionaryCreate (they're considered to have escaped and are ignored). If this is important we can put in a specific eval::Call to restore the functionality.

llvm-svn: 138464
2011-08-24 19:10:50 +00:00
Douglas Gregor 94619c81fc In the AST reader, switch name lookup within a DeclContect over to the
module DAG-based lookup scheme. This required some reshuffling, so
that each module stores its own mapping from DeclContexts to their
lexical and visible sets for those DeclContexts (rather than one big
"chain"). 

Overall, this allows simple qualified name lookup into the translation
unit to gather results from multiple modules, with the lookup results
in module B shadowing the lookup results in module A when B imports A.

Walking all of the lexical declarations in a module DAG is still a
mess; we'll end up walking the loaded module list backwards, which
works fine for chained PCH but doesn't make sense in a DAG. I'll
tackle this issue as a separate commit.

llvm-svn: 138463
2011-08-24 19:03:07 +00:00
Jordy Rose 5df640dc33 [analyzer] Slightly clean up the fix in 138432, so that it doesn't depend on the relative ordering of path-sensitive and path-insensitive checks. Still not ideal, but I think a real fix would require infrastructure that doesn't exist yet.
llvm-svn: 138462
2011-08-24 18:56:32 +00:00
Caitlin Sadowski 726003e79d Thread safety: Fix a few typos in last commit -- use LockID instead of Lock in comments and start a couple methods with a lowercase letter
llvm-svn: 138460
2011-08-24 18:46:20 +00:00
Evan Cheng 494eb062b5 Match LLVM change: TargetRegistry and TargetSelect have been moved to Support.
llvm-svn: 138451
2011-08-24 18:09:14 +00:00
Axel Naumann 744f121e5b Reset FirstID (first diagnostic's file ID) to allow for invocations of the VerifyDiagnosticsClient on several input files.
llvm-svn: 138434
2011-08-24 13:36:19 +00:00
Jordy Rose 95589f13ff [analyzer] Fix a Heisenbug concerning object lifetimes with a hack. Hopefully a better fix coming soon. See comment for more details.
llvm-svn: 138432
2011-08-24 09:27:24 +00:00
Jordy Rose 58428b914d [analyzer] Reapply 138390 "Clean up unused bits of CFRefCount", reverted in 138405. Ended up unrelated to any problems.
llvm-svn: 138431
2011-08-24 09:22:31 +00:00
Jordy Rose 14de7c5a88 [analyzer] Fix potential crasher with RAII. No functionality change. (No test because this particular circumstance requires an impossible series of events, but this is future-proofing.)
llvm-svn: 138430
2011-08-24 09:02:37 +00:00
Jordy Rose 7a53498f20 [analyzer] Reapply 138382 and 138388 (reverted in 138419 and 138420). The issue seems to have been with the uninitialized variable fixed in 138424; a fix for another Heisencrasher coming soon.
llvm-svn: 138426
2011-08-24 05:47:39 +00:00
Jordy Rose 03a8f9e578 [analyzer] Correctly initialize a variable and hopefully fix crashes.
llvm-svn: 138424
2011-08-24 04:48:19 +00:00
Eric Christopher aa8b6a5cf4 Revert "[analyzer] Cleanup: Move temporary declarations of CFRefCount variables closer to their uses. No functionality change."
This reverts commit d02b4af7bd6ca4a743c7074d64e205d718aa221d.

llvm-svn: 138420
2011-08-24 00:39:51 +00:00
Eric Christopher 1825e7a260 Revert "[analyzer] Make CFRefBug and CFRefReportVisitor not dependent on CFRefCount. Unfortunately, CFRefReport still is. No functionality change."
This reverts commit e3fb7e428b7ba0d5d902dfe3f165d70e09b03a15.

llvm-svn: 138419
2011-08-24 00:39:48 +00:00
Eric Christopher b58b3e879d Make constant aggregate constant initializers private linkage.
After talking with John making this the case for all of these is
the right way to go.

Fixes rdar://9804564 and PR10414

llvm-svn: 138418
2011-08-24 00:33:55 +00:00
Anna Zaks 0897a23517 [analyzer] MacOSKeychainAPIChecker: Add reasoning about functions which MIGHT deallocate the memory region allocated with SecKeychain APIs. Specifically, when the buffer is passed to CFStringCreateWithBytesNoCopy along with a custom deallocator, which might potentially correctly release the memory.
llvm-svn: 138417
2011-08-24 00:06:27 +00:00
Anna Zaks f9e9c4e9bc [analyzer] MacOSKeychainAPIChecker: Retrieve the memory region which we are tracking even when it's no longer a SymbolicRegion, for example, when it is cast to char*.
llvm-svn: 138415
2011-08-23 23:56:12 +00:00
Anna Zaks bb167011e3 Move creation of the deallocation mismatch report into a separate function for future reuse.
llvm-svn: 138414
2011-08-23 23:47:36 +00:00
Eric Christopher d28d107099 Whitespace and 80-col cleanup.
llvm-svn: 138413
2011-08-23 23:44:09 +00:00
Fariborz Jahanian 73952fc263 objc - fix up the builtin type for objc_assign_ivar.
// rdar://9362887.

llvm-svn: 138412
2011-08-23 23:33:09 +00:00
Bruno Cardoso Lopes 7a98a7e681 Fix _mm256_shuffle_ps mask! Example, for mask=203, Instead of:
<i32 3, i32 2, i32 8, i32 11, i32 3, i32 6, i32 12, i32 15>
generate:
  <i32 3, i32 2, i32 8, i32 11, i32 7, i32 6, i32 12, i32 15>

llvm-svn: 138411
2011-08-23 23:29:45 +00:00
Ted Kremenek bd91371381 Start reworking -Wunreachable-code. The original analysis had serious flaws with how it
handled SCC's of dead code, or simply having false negatives by overly suppressing warnings.

WIP.

llvm-svn: 138410
2011-08-23 23:05:11 +00:00
Ted Kremenek 6b9964d237 CFG: record set of C++ 'try' dispatch blocks, which could be of interest to various analyses (e.g., reachability).
llvm-svn: 138409
2011-08-23 23:05:07 +00:00
Ted Kremenek adfb445466 Constify the result of CFGStmt::getStmt().
llvm-svn: 138408
2011-08-23 23:05:04 +00:00
Eric Christopher fba570c9d8 Revert "[analyzer] Clean up unused bits of CFRefCount."
This reverts commit 6886a92640f5bffc972f67c0a1f302d6c6e7c322.

llvm-svn: 138405
2011-08-23 22:38:04 +00:00
Eric Christopher 31ab13047d Whitespace.
llvm-svn: 138404
2011-08-23 22:38:00 +00:00
Eli Friedman 3fa64df543 Refactor and fix checking for initialization of flexible array members. The old version had the checks scattered across the code, missed some checks, and had a couple nasty bugs in existing checks.
Fixes PR10648 and another similar accepts-invalid bug.

llvm-svn: 138398
2011-08-23 22:24:57 +00:00
Jordy Rose 5aa9b1dd3f [analyzer] Clean up unused bits of CFRefCount.
llvm-svn: 138390
2011-08-23 21:51:36 +00:00
Jordy Rose 908426aae4 [analyzer] Make CFRefBug and CFRefReportVisitor not dependent on CFRefCount. Unfortunately, CFRefReport still is. No functionality change.
llvm-svn: 138388
2011-08-23 21:47:17 +00:00
Jordy Rose fd13f6f56a [analyzer] Cleanup: Move temporary declarations of CFRefCount variables closer to their uses. No functionality change.
llvm-svn: 138382
2011-08-23 21:06:32 +00:00
Argyrios Kyrtzidis 18c88a96eb Remove one SourceManager::isInFileID overload and use isOffsetInFileID for the other.
llvm-svn: 138381
2011-08-23 21:02:45 +00:00
Argyrios Kyrtzidis 2797df6a24 Amend r138129 (reduction of SLocEntries) which introduced performance regression due
to increased calls to SourceManager::getFileID. (rdar://9992664)

Use a slightly different approach that is more efficient both in terms of speed
(no extra getFileID calls) and in SLocEntries reduction.

Comparing pre-r138129 and this patch we get:

For compiling SemaExpr.cpp reduction of SLocEntries by 26%.
For the boost enum library:
  -SLocEntries -34% (note that this was -5% for r138129)
  -Memory consumption -50%
  -PCH size -31%

Reduced SLocEntries also benefit the hot function SourceManager::getFileID,
evident by the reduced "FileID scans".

llvm-svn: 138380
2011-08-23 21:02:41 +00:00
Argyrios Kyrtzidis e7f7516148 Introduce SourceManager::isInSLocAddrSpace and use it in TokenLexer instead of isInFileID
since it is a bit more efficient.

llvm-svn: 138379
2011-08-23 21:02:38 +00:00
Argyrios Kyrtzidis 5451a3973b Rename SourceManager::isBeforeInSourceLocationOffset -> isBeforeInSLocAddrSpace.
llvm-svn: 138378
2011-08-23 21:02:35 +00:00
Argyrios Kyrtzidis 7a7ff681ee TokenLexer::getExpansionLocForMacroDefLoc doesn't need to return an invalid SourceLocation.
llvm-svn: 138377
2011-08-23 21:02:32 +00:00
Argyrios Kyrtzidis f6a3b0ca4b In Lexer::isAtEndOfMacroExpansion use SourceManager::isInFileID and avoid
the extra SourceManager::getFileID call.

llvm-svn: 138376
2011-08-23 21:02:30 +00:00
Argyrios Kyrtzidis 296374b501 Move a couple of SourceManager functions out-of-line; no functionality change.
llvm-svn: 138375
2011-08-23 21:02:28 +00:00
Jordy Rose 20d4e68195 [analyzer] Move function retain-count effect summary log from CFRefCount to RetainReleaseChecker, and then explicitly provide the summary log when creating CFRefReports. No functionality change.
llvm-svn: 138374
2011-08-23 20:55:48 +00:00
Ted Kremenek ee9848e20d Fix regression in -Wuninitialized involving VLAs. It turns out that we were modeling sizeof(VLAs)
incorrectly in the CFG, and also the static analyzer.  This patch regresses the analyzer a bit, but
that needs to be followed up with a better solution.

Fixes <rdar://problem/10008112>.

llvm-svn: 138372
2011-08-23 20:30:50 +00:00
Jordy Rose bf77e51fa1 [analyzer] Move helper method Update from CFRefCount to RetainReleaseChecker. No functionality change.
llvm-svn: 138370
2011-08-23 20:27:16 +00:00
Eli Friedman 750a5916af Cleanup to use helper.
llvm-svn: 138369
2011-08-23 20:22:34 +00:00
Eli Friedman c616c5ff1a Remove function parameter which always used the default value.
llvm-svn: 138368
2011-08-23 20:17:13 +00:00
Jordy Rose 6763e38736 [analyzer] Move helper method handleAutoreleaseCounts from CFRefCount to RetainReleaseChecker. No functionality change.
llvm-svn: 138365
2011-08-23 20:07:14 +00:00
Jordy Rose 298cc4d907 [analyzer] Move ReturnStmt retain-count analysis from CFRefCount to RetainReleaseChecker. Tweak CFRefReport to reflect that fact that ReturnStmt checks are pre-statement, not post-statement. No intended functionality change.
llvm-svn: 138358
2011-08-23 19:43:16 +00:00
Jordy Rose 7861276f47 [analyzer] Move symbol death leak analysis from CFRefCount to RetainReleaseChecker.
llvm-svn: 138353
2011-08-23 19:01:07 +00:00
Caitlin Sadowski afbbd8e5ad Thread-safety analysis: adding in a basic lockset tracking system. This
system flags an error when unlocking a lock which was not held, locking
the same lock twice, having a different lockset on each iteration of a
loop, or going out of scope while still holding a lock. In order to
successfully use the lockset, this patch also makes sure that attribute
arguments are attached correctly for later parsing.

This patch was also worked on by DeLesley Hutchins.

Note: This patch has been reviewed by Chandler Carruth and Jeffrey
Yasskin. Feel free to provide post-commit review comments for a
subsequent patch.

llvm-svn: 138350
2011-08-23 18:46:34 +00:00
Eric Christopher 551ef45e85 Add support for a verifier to the driver. Currently only verifies debug
output on darwin so is hard coded there.

As a note this will need a little bit of refactoring in the class
hierarchy to separate it out for different verifiers based on input type.

Fixes rdar://8256258.

llvm-svn: 138343
2011-08-23 17:56:55 +00:00
Fariborz Jahanian 797f1e23f6 checking for __block variable captured by given
stmt expression, recursively walk down all substatements 
of the stmt expression. // rdar://10001085

llvm-svn: 138334
2011-08-23 16:47:15 +00:00
Nico Weber dd47363b3a enable -fstack-protector on 10.5 for usermode binaries by default.
This matches gcc's behavior.

llvm-svn: 138324
2011-08-23 07:38:27 +00:00
Jordy Rose 212e459164 [analyzer] Only allocate retain summaries for interesting functions/messages. This is a minor saving of memory but doesn't seem to cost any performance.
llvm-svn: 138320
2011-08-23 04:27:15 +00:00
Matt Beaumont-Gay 56381b8502 Fix an incorrect note.
For the test case added to function-redecl.cpp, we were previously complaining
about a mismatch in the parameter types, since the definition used the
typedef'd type.

llvm-svn: 138318
2011-08-23 01:35:51 +00:00
Fariborz Jahanian b50801f049 block IRgen - Fixes a crash when determining if given block variable
is captured by a given statement expression. // rdar://10001085

llvm-svn: 138314
2011-08-23 00:27:49 +00:00
Jordy Rose f5b0234992 [analyzer] Rename CFRefCount's evalSummary method to evalCallOrMessage, since it no longer, uh, evaluates call summaries.
llvm-svn: 138313
2011-08-23 00:03:01 +00:00
Eli Friedman c55efe4fb2 Make sure we don't inline functions marked with __attribute__((naked)). <rdar://problem/9973228>
llvm-svn: 138310
2011-08-22 23:55:33 +00:00
Jordy Rose 5b31d7acf7 [analyzer] Migrate the handling of retain-count-related RetEffects and ArgEffects from CFRefCount to RetainReleaseChecker. No intended functionality change.
llvm-svn: 138309
2011-08-22 23:48:23 +00:00
Anna Zaks bd7972b49e [analyzer] MacOSKeychainAPIChecker: Users of KeyChain API often use free() to deallocate the password. Catch this error explicitly and generate the error message at the place where free() is called.
llvm-svn: 138296
2011-08-22 23:18:12 +00:00
Fariborz Jahanian b66de9f37b objc refactoring - minor clean up.
llvm-svn: 138276
2011-08-22 21:44:58 +00:00
Anna Zaks 76c3fb6a51 Static Analyzer Diagnostics: Allow checkers to add ExtraDescriptiveText, now renamed into ExtraText, to the diagnostic without subclassing BugReport.
llvm-svn: 138272
2011-08-22 20:31:28 +00:00
Fariborz Jahanian a646084550 objc - use existing API for temporary switch of
objc's decl context.

llvm-svn: 138267
2011-08-22 20:15:24 +00:00
Ted Kremenek 618e574253 Do not perform check for missing '[super dealloc]' under ARC as calling -dealloc is illegal in that mode.
llvm-svn: 138261
2011-08-22 19:07:43 +00:00
Anna Zaks 752de1443f Clean up the CFRefBugReport - remove the members, which got moved to the CFRefReportVisitors.
llvm-svn: 138259
2011-08-22 18:54:07 +00:00
Eli Friedman 4acfbcd918 Don't warn on varaidic macros in C++0x mode.
llvm-svn: 138257
2011-08-22 18:48:28 +00:00
Fariborz Jahanian f36734dd2a objc - minor comment fix up and cleanup.
llvm-svn: 138253
2011-08-22 18:34:22 +00:00
Fariborz Jahanian 4bf8262a43 objc - Simplify switing objc decl context by using
a context switching object.

llvm-svn: 138248
2011-08-22 17:59:19 +00:00
Nico Weber 715abaf213 Warn on missing [super dealloc] calls.
This matches gcc's logic. Half of PR10661.

llvm-svn: 138240
2011-08-22 17:25:57 +00:00
Chandler Carruth 41c6dcc734 Fix a crash-on-valid that has been here for a very long time:
const int &x = x;

This crashed by inifinetly recursing within the lvalue evaluation
routine. I've added a (somewhat) braindead way of preventing this
recursion. If folks have better suggestions for how to avoid it I'm all
ears.

That said, we have some work to do. This doesn't trigger a single
warning for uninitialized, self-initialized or otherwise completely
wrong code. In some senses, the crash was almost better.

llvm-svn: 138239
2011-08-22 17:24:56 +00:00
Argyrios Kyrtzidis c7e50c5cbd Fix a bug in objc @encoding of C++ classes.
llvm-svn: 138235
2011-08-22 16:03:14 +00:00
Fariborz Jahanian 8d382dc781 Restore patch I reversed in r138040. Known buildbot
failures are resolved.

llvm-svn: 138234
2011-08-22 15:54:49 +00:00
Argyrios Kyrtzidis 61ef3db222 Boost the efficiency of SourceManager::getMacroArgExpandedLocation.
Currently getMacroArgExpandedLocation is very inefficient and for the case
of a location pointing at the main file it will end up checking almost all of
the SLocEntries. Make it faster:

-Use a map of macro argument chunks to their expanded source location. The map
 is for a single source file, it's stored in the file's ContentCache and lazily
 computed, like the source lines cache.
-In SLocEntry's FileInfo add an 'unsigned NumCreatedFIDs' field that keeps track
 of the number of FileIDs (files and macros) that were created during preprocessing
 of that particular file SLocEntry. This is useful when computing the macro argument
 map in skipping included files while scanning for macro arg FileIDs that lexed from
 a specific source file. Due to padding, the new field does not increase the size
 of SLocEntry.

llvm-svn: 138225
2011-08-21 23:33:04 +00:00
Jordy Rose 898a148d28 [analyzer] Migrate the aliasing effects of CFRetain and CFMakeCollectable from CFRefCount to RetainReleaseChecker. No intended functionality change.
llvm-svn: 138223
2011-08-21 21:58:18 +00:00
Jordy Rose 6582dde545 [analyzer] Remove FIXME; Ted reminded me that -init is not guaranteed to return its receiver and pretending that it does won't actually buy us anything. (Comment change only.)
llvm-svn: 138221
2011-08-21 21:04:38 +00:00
Jordy Rose 3f7f7568f2 [analyzer] Migrate return value handling from CFRefCount to ExprEngine. This seems to result in a minor performance hit, but I think that will go away again once we eliminate TransferFuncs from function calls entirely.
llvm-svn: 138220
2011-08-21 19:41:36 +00:00
Jordy Rose 82c673de33 [analyzer] Replace calls to getNameAsString() with StringRef equivalents.
llvm-svn: 138215
2011-08-21 05:25:15 +00:00
Benjamin Kramer 3cca223a2a Fix compile on platforms that don't implicitly include stdarg.h here.
llvm-svn: 138214
2011-08-20 21:50:41 +00:00
Jordy Rose a8f99ba749 [analyzer] RetainReleaseChecker always wants region change updates. There's no need for a flag, at least not right now.
llvm-svn: 138212
2011-08-20 21:17:59 +00:00
Jordy Rose 5c252ef7b1 Fix indentation.
llvm-svn: 138211
2011-08-20 21:16:58 +00:00
Jordy Rose 5a3c9ff3a3 [analyzer] Move handling of hardcoded noreturn ("panic") methods from CFRefCount to NoReturnFunctionChecker. No functionality change intended.
llvm-svn: 138210
2011-08-20 20:55:40 +00:00
Chad Rosier aa9e24133f Typo spotted by Ivan Krasin.
llvm-svn: 138200
2011-08-20 06:56:17 +00:00
Ted Kremenek 60d2ec5765 [analyzer] Handle reads of ObjCPropertyRefExprs implicitly in Environment. No need to bind an explicit value and create a new node.
llvm-svn: 138196
2011-08-20 06:23:25 +00:00
Ted Kremenek 876e34b7b5 [analyzer] Simplify ExprEngine::VisitBinaryOperator() by removing recursive visit to subexpressions (which is no longer needed).
llvm-svn: 138195
2011-08-20 06:16:31 +00:00
Ted Kremenek a9ce612fa2 Start partitioning ExprEngine.cpp into separate .cpp files that handle different parts
of the analysis (e.g., analysis of C expressions, analysis of Objective-C expressions, and so on).

llvm-svn: 138194
2011-08-20 06:00:03 +00:00
Ted Kremenek 10e2503177 Rename CXXExprEngine.cpp to ExprEngineCXX.cpp.
llvm-svn: 138193
2011-08-20 05:59:58 +00:00
Douglas Gregor b36fc536d2 Make the loading of multiple records for the same identifier (from
different modules) more robust. It already handled (simple) merges of
the set of declarations attached to that identifier, so add a test
case that shows us getting two different declarations for the same
identifier (one struct, one function) from different modules, and are
able to use both of them.

llvm-svn: 138189
2011-08-20 05:09:43 +00:00
Douglas Gregor 18221d8eae Clean out some minor cruft in the AST reader; no functionality change.
llvm-svn: 138188
2011-08-20 04:58:43 +00:00
Douglas Gregor ab443b9da5 Introduce a module visitation function that starts at the top-level
modules (those that no other module depends on) and performs a search
over all of the modules, visiting a new module only when all of the
modules that depend on it have already been visited. The visitor can
abort the search for all modules that a module depends on, which
allows us to minimize the number of lookups necessary when performing
a search.

Switch identifier lookup from a linear walk over the set of modules to
this module visitation operation. The behavior is the same for simple
PCH and chained PCH, but provides the proper search order for
modules. Verified with printf debugging, since we don't have enough in
place to actually test this.

llvm-svn: 138187
2011-08-20 04:39:52 +00:00
Anna Zaks 88255cc533 Static Analyzer Diagnostics: Move the responsibility for generating the endOfPath diagnostic piece from BugReport to BugReporterVisitor. Switch CFRefCount to use visitors in order to generate the endOfPath piece.
llvm-svn: 138184
2011-08-20 01:27:22 +00:00
Ted Kremenek 417d566775 Remove dead code.
llvm-svn: 138183
2011-08-20 01:15:28 +00:00
Anna Zaks 071a89c39f Static Analyzer Diagnostics: Switch CFRefCount to using the new visitor API. BugReport no longer needs to inherit from BugReporterVisitor.
llvm-svn: 138142
2011-08-19 23:21:56 +00:00
Argyrios Kyrtzidis eeca36fe9a For assigning SourceLocations to macro arg tokens, reserve a single SLocEntry
for tokens that are lexed consecutively from the same FileID, instead of creating
a SLocEntry for each token. e.g for

   assert(foo == bar);

there will be a single SLocEntry for the "foo == bar" chunk and locations
for the 'foo', '==', 'bar' tokens will point inside that chunk.

For parsing SemaExpr.cpp, this reduced the number of SLocEntries by 25%.

llvm-svn: 138129
2011-08-19 22:34:17 +00:00
Argyrios Kyrtzidis 60617128e6 Rename TokenLexer::getMacroExpansionLocation -> getExpansionLocForMacroDefLoc, no functionality change.
llvm-svn: 138128
2011-08-19 22:34:14 +00:00
Argyrios Kyrtzidis 34d729d46d Refactor common functionality into SourceManager::getFileIDSize, no functionality change.
llvm-svn: 138127
2011-08-19 22:34:01 +00:00
Anna Zaks f86615ca5c Static Analyzer Diagnostics: Kill the addVisitorCreator(callbackTy, void*) API in favor of addVisitor(BugReporterVisitor*).
1) Create a header file to expose the predefined visitors. And move the parent(BugReporterVisitor) there as well.

2) Remove the registerXXXVisitor functions - the Visitor constructors/getters can be used now to create the object. One exception is registerVarDeclsLastStore(), which registers more then one visitor, so make it static member of FindLastStoreBRVisitor.

3) Modify all the checkers to use the new API.

llvm-svn: 138126
2011-08-19 22:33:38 +00:00
Douglas Gregor 4ad83e69a0 Remove unused function ModuleManager::exportLookup()
llvm-svn: 138079
2011-08-19 21:12:29 +00:00
Matt Beaumont-Gay 335e653fe6 Improve the correctness and accuracy of the message for -Wdynamic-class-memaccess
llvm-svn: 138074
2011-08-19 20:40:18 +00:00
Fariborz Jahanian 7e47de3156 objc-arc: @property definitions should default to (strong) when not
specified. // rdar://9971982

llvm-svn: 138062
2011-08-19 19:28:44 +00:00
Fariborz Jahanian 9a3b269ea1 Revers r138040. Need to look at a few buildbot failures.
llvm-svn: 138049
2011-08-19 18:02:47 +00:00
Fariborz Jahanian d6d866d6fa objective-c: Bring objective-c handling of decl context
to modernity. Instead of passing down individual
context objects from parser to sema, establish decl
context in parser and have sema access current context
as needed. I still need to take of Doug's comment for
minor cleanups.

llvm-svn: 138040
2011-08-19 16:06:57 +00:00
Benjamin Kramer 56b675f8a1 Reflow code. No functionality change.
llvm-svn: 138032
2011-08-19 04:18:11 +00:00
Craig Topper 6eb2058a6a Warn about and truncate UCNs that are too big for their character literal type.
llvm-svn: 138031
2011-08-19 03:20:12 +00:00
Douglas Gregor 4dd3e948ef Teach ModuleManager::addModule() to check whether a particular module
has already been loaded before allocating a new Module structure. If
the module has already been loaded (uniquing based on file name), then
just return the existing module rather than trying to load it again.

This allows us to load a DAG of modules. Introduce a simple test case
that forms a diamond-shaped module graph, and illustrates that a
source file importing the bottom of the diamond can see declarations
in all four of the modules that make up the diamond.

Note that this version moves the file-opening logic into the module
manager, rather than splitting it between the module manager and the
AST reader. More importantly, it properly handles the
weird-but-possibly-useful case of loading an AST file from "-".

llvm-svn: 138030
2011-08-19 02:29:29 +00:00
Anna Zaks be28d6c66d Fix a memory leak in the analyzer - BugReports didn't get freed. Plus, remove invalid assert from the destructor which wasn't called previously due to the leak.
llvm-svn: 138027
2011-08-19 01:57:09 +00:00
Chandler Carruth e92e42f3fd Fix the rest of the indent goofiness here.
llvm-svn: 138024
2011-08-19 01:40:11 +00:00
Chandler Carruth f8b554f0f2 Fix an egregious formatting goof.
llvm-svn: 138023
2011-08-19 01:38:33 +00:00
Eric Christopher 84fbdb4a8f Add a completely hacky workaround for pch kext files with different extensions
when falling back to cc1plus for our compile.

rdar://9963920

llvm-svn: 138017
2011-08-19 00:30:14 +00:00
Ted Kremenek 18db5d4e9d Enhance -Wstrl-incorrect-size to not report a FIXIT for destinations that are flexible arrays or have size 1.
llvm-svn: 138004
2011-08-18 22:48:41 +00:00
Anna Zaks f4dd4ae7cc Static Analyzer Diagnostics: Move custom diagnostic visitors from BugReporterContext to BugReport.
One API change: I added BugReporter as an additional parameter to the BugReporterVisitor::VisitNode() method to allow visitors register other visitors with the report on the fly (while processing a node). This functionality is used by NilReceiverVisitor, which registers TrackNullOrUndefValue when the receiver is null.

llvm-svn: 138001
2011-08-18 22:37:56 +00:00
Kaelyn Uhrain 40aa7c91b6 Don't accept a typo correction if the corrected identifier is the same as the
uncorrected identifier. Fixes a problem pointed out by Eli.

llvm-svn: 137987
2011-08-18 21:57:36 +00:00
Ted Kremenek 6865f77fdd Reapply r137903, but fix the definition of size_t in the test case to use __SIZE_TYPE__ (and hence be portable).
Also, change the warning to -Wstrl-incorrect-size.

llvm-svn: 137980
2011-08-18 20:55:45 +00:00
Argyrios Kyrtzidis 75f6cd2b79 [libclang] Support code-completion inside macro arguments.
llvm-svn: 137973
2011-08-18 19:41:28 +00:00
Chad Rosier 222e187e33 Temporarily revert r137925 to appease buildbots. Original commit message:
Teach ModuleManager::addModule() to check whether a particular module
has already been loaded before allocating a new Module structure. If
the module has already been loaded (uniquing based on file name), then
just return the existing module rather than trying to load it again.

This allows us to load a DAG of modules. Introduce a simple test case
that forms a diamond-shaped module graph, and illustrates that a
source file importing the bottom of the diamond can see declarations
in all four of the modules that make up the diamond.

llvm-svn: 137971
2011-08-18 19:06:24 +00:00
Kaelyn Uhrain fd81a350e2 Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when
diagnosing invalid function redeclarations.

llvm-svn: 137966
2011-08-18 18:19:12 +00:00
Chad Rosier 2f8187933f Use StringRef, rather than C string APIs.
llvm-svn: 137958
2011-08-18 17:56:32 +00:00
Francois Pichet 17ed020569 Add support for MSVC __unaligned attribute. Necessary to parse MSVC headers in 64-bit mode (ie: when _M_IA64 or _M_AMD64 is defined)
more info: http://msdn.microsoft.com/en-us/library/ms177389.aspx

llvm-svn: 137935
2011-08-18 09:59:55 +00:00
Chandler Carruth 48b2831d8a Always mark friend function declarations in class templates as
implicitly instantiable, even if we don't see a body on the friend
function declaration. The body may simply have not yet been attached.
This fixes PR10666.

There may be an alternate, preferred implementation strategy, see my
FIXME. Review would definitely be appreciated Doug. =D

llvm-svn: 137934
2011-08-18 09:09:59 +00:00
Douglas Gregor 914eb7c18a Teach ModuleManager::addModule() to check whether a particular module
has already been loaded before allocating a new Module structure. If
the module has already been loaded (uniquing based on file name), then
just return the existing module rather than trying to load it again.

This allows us to load a DAG of modules. Introduce a simple test case
that forms a diamond-shaped module graph, and illustrates that a
source file importing the bottom of the diamond can see declarations
in all four of the modules that make up the diamond.

llvm-svn: 137925
2011-08-18 04:41:58 +00:00