Commit Graph

18269 Commits

Author SHA1 Message Date
Matt Beaumont-Gay 06de2553f3 Clean up the error recovery at the bottom of Sema::LookupMemberExpr. This
mostly just shuffles various possibilities for recovery into a more
straightforward order, but also unifies a couple of diagnostics.

llvm-svn: 126266
2011-02-22 23:52:53 +00:00
Douglas Gregor 385d3fd97d When checking for abstract types, don't crash when we have a
FunctionProtoTypeLoc with NULL function parameter types, which can
occur in invalid code. Fixes PR9247 / <rdar://problem/9037911>.

llvm-svn: 126262
2011-02-22 23:21:06 +00:00
Fariborz Jahanian bb6db56028 Provide Fixit warning when 'auto' is intended as storage
specifier in legacy code. Patch is reviewed offline by Doug.
// rdar://9036633.

llvm-svn: 126261
2011-02-22 23:17:49 +00:00
John McCall 147d021b75 Emit the structure layout of the block literal parameter to a block
invocation function into the debug info.  Rather than faking up a class,
which is tricky because of the custom layout we do, we just emit a struct
directly from the layout information we've already got.

Also, don't emit an unnecessarily parameter alloca for this "variable".

llvm-svn: 126255
2011-02-22 22:38:33 +00:00
John McCall 550d13aebb Give ImplicitParamDecl a public constructor so that it can be allocated on
the stack.

llvm-svn: 126254
2011-02-22 22:25:56 +00:00
John McCall b67608fe83 Provide a Decl::getNonClosureContext to look through any "closure" (i.e.
block and, eventually, C++ lambda) contexts.

llvm-svn: 126252
2011-02-22 22:25:23 +00:00
Devang Patel b6ed369e77 A constructor call should force class's debug info even if -flimit-debug-info is enabled.
llvm-svn: 126246
2011-02-22 20:55:26 +00:00
Chris Lattner ba9006df9e improve support for SUSE Linux Enterprise Server 11 SP1 (x86_64).
Patch by Csaba Raduly!

llvm-svn: 126245
2011-02-22 20:47:07 +00:00
Douglas Gregor a1aec29a2d Enable enumeration types with a fixed underlying type, e.g.,
enum X : long { Value = 0x100000000 };

when in Microsoft-extension mode (-fms-extensions). This (now C++0x)
feature has been supported since Microsoft Visual Studio .NET 2003.

llvm-svn: 126243
2011-02-22 20:32:04 +00:00
Matt Beaumont-Gay 7a24210ebd Use an unused-except-in-Debug variable.
llvm-svn: 126240
2011-02-22 20:00:16 +00:00
Devang Patel d7185b755d Use LLVM coding standard.
llvm-svn: 126232
2011-02-22 18:56:36 +00:00
Douglas Gregor e2f943b5cb Implement the GNU C extension which permits the initialization of an
array from a constant array compound literal. Fixes PR9261.

llvm-svn: 126230
2011-02-22 18:29:51 +00:00
Argyrios Kyrtzidis ed35cf271d [analyzer] Start moving the path-sensitive checkers to CheckerV2.
-Migrate ObjCSelfInitChecker to CheckerV2. In the process remove the 'preCallSelfFlags' field
 from the checker class and use GRState for storing that info.
-Get ExprEngine to start delegating checker running to CheckerManager.

llvm-svn: 126229
2011-02-22 17:30:38 +00:00
Joerg Sonnenberger fe74286a48 Remove the storage for -cxx-system-include. Make libcxx toolchain
use -nostdinc++ and -cxx-isystem.

llvm-svn: 126223
2011-02-22 15:19:35 +00:00
Peter Collingbourne f29ce975ba Reimplement __pragma support using a TokenLexer
llvm-svn: 126221
2011-02-22 13:49:06 +00:00
Peter Collingbourne 2c9f966600 Make TokenLexer capable of storing preprocessor directive tokens
llvm-svn: 126220
2011-02-22 13:49:00 +00:00
John McCall 9e2e22f5c6 Establish the iteration variable of an ObjC for-in loop before
emitting the collection expression.  Fixes some really, really broken
code.

llvm-svn: 126193
2011-02-22 07:16:58 +00:00
John McCall c533cb7008 Reorganize the emission of local variables.
llvm-svn: 126189
2011-02-22 06:44:22 +00:00
Ted Kremenek fb1a79af7a Add CStringChecker support for strncpy. Patch by Lenny Maiorani!
llvm-svn: 126188
2011-02-22 04:58:34 +00:00
Ted Kremenek 280a01fa1b Add CStringChecker support for strnlen. Patch by Lenny Maiorani!
llvm-svn: 126187
2011-02-22 04:55:05 +00:00
NAKAMURA Takumi f8a6e802f9 lib/CodeGen/TargetInfo.cpp: On Win64, arg i128 should be emitted as INDIRECT.
mingw-w64's i128 tweak should be done with x86_64-mingw32.

llvm-svn: 126186
2011-02-22 03:56:57 +00:00
Douglas Gregor 6cd5ae4dfa Fix a little bug in the handling of enumeration types with a fixed
underlying type: we weren't parsing unnamed enumeration types with a
fixed underlying type.

llvm-svn: 126184
2011-02-22 02:55:24 +00:00
Douglas Gregor a78f193e7e Warn about implicit conversions between values of different, named
enumeration types. Fixes <rdar://problem/8559831>.

llvm-svn: 126183
2011-02-22 02:45:07 +00:00
Anders Carlsson 3320e1575f Make clang -cc1 disable Objective-C exceptions by default, and add a -fobjc-exceptions flag to turn them on.
Update all tests accordingly.

llvm-svn: 126177
2011-02-22 01:52:06 +00:00
Richard Smith 23eb9f707b In Objective-C, there are no trailing return types, so don't produce diagnostics suggesting they are missing.
llvm-svn: 126174
2011-02-22 01:22:29 +00:00
Joerg Sonnenberger cc9c8eb837 Bug#8945: Add -cxx-isystem option to specify C++ system directories.
It works like -isystem and the search path keeps -isystem and
-cxx-isystem in order relative to each other. -cxx-isystem is only used
for C++ sources though. Drop the existing -cxx-system-include option for
cc1 as it is now redundant.

llvm-svn: 126167
2011-02-22 00:40:56 +00:00
Richard Smith 59006e4338 Fix a few auto-related issues:
* 'auto' was being rejected on abstract-declarators with trailing return
types and on typedefs with trailing return types. 'auto' is always
allowed in these cases. This was found while testing the fix for PR 9278.

 * A very poor diagnostic was being issued for auto (f() -> int): "return
type must be 'auto', not 'auto'". This is closely related to PR 9060.

 * Trailing return type handling was happening slightly too late,
resulting in the checks for functions returning arrays and functions
returning functions being missed.

llvm-svn: 126166
2011-02-22 00:36:53 +00:00
Fariborz Jahanian d7b0cb5388 Warn when type modifiers on objc method declarations in
protocols do not match with method implementation.
// rdar://7076235

llvm-svn: 126162
2011-02-21 23:49:15 +00:00
David Chisnall 055f064756 The instance size of a metaclass should be the size of a class. This is not, in fact, 0, even for very small classes. (GNU runtime)
llvm-svn: 126161
2011-02-21 23:47:40 +00:00
Richard Smith 27e39b11b1 C++0x's deduced auto is illegal in typedefs.
This actually rules out too much, since it also catches typedefs for pointers to functions with trailing return types:

  typedef auto (*F)() -> int;

Fix for that (and the same issue in all abstract-declarators) to follow shortly.

llvm-svn: 126153
2011-02-21 23:18:00 +00:00
Daniel Dunbar 13adc7fefd Targets/Darwin: mcount name on Darwin needs to be unmangled.
llvm-svn: 126152
2011-02-21 23:12:51 +00:00
Ted Kremenek 828f631af1 Fix a CFGBuilder bug exposed on convoluted control-flow in the Linux kernel.
llvm-svn: 126149
2011-02-21 22:11:26 +00:00
Chris Lattner 93ede02045 add one more case of mismatched input/output constraints.
When the mismatch is due to a larger input operand that is
a constant, truncate it down to the size of the output.  This
allows us to accept some cases in the linux kernel and elsewhere.
Pedantically speaking, we generate different code than GCC, though
I can't imagine how it would matter:

Clang:
	movb	$-1, %al
	frob %al

GCC:

	movl	$255, %eax
	frob %al

llvm-svn: 126148
2011-02-21 22:09:29 +00:00
Chris Lattner e3694b166a more code restructuring, no functionality change.
llvm-svn: 126146
2011-02-21 21:50:25 +00:00
Chris Lattner 70a4e9b5e2 split the iteration loop out to a helper function, no functionality change.
llvm-svn: 126145
2011-02-21 21:40:33 +00:00
Chris Lattner 169766f306 fix a comment.
llvm-svn: 126143
2011-02-21 21:15:10 +00:00
Richard Smith 5503805555 Mangling of undeduced 'auto' types, as specified by Itanium C++ ABI.
llvm-svn: 126140
2011-02-21 20:10:02 +00:00
Richard Smith b2bc2e6752 Tweaks to C++0x deduced auto type support:
* Flag indicating 'we're parsing this auto typed variable's initializer' moved from VarDecl to Sema
 * Temporary template parameter list for auto deduction is now allocated on the stack.
 * Deduced 'auto' types are now uniqued.

llvm-svn: 126139
2011-02-21 20:05:19 +00:00
John McCall 15dd404c46 Don't warn about static const integral data members with in-line constant
initializers just because they don't have a proper out-of-line definition.
Such code is technically ill-formed but is too common and too unlikely to be
a problem to be seriously worth worrying about.

llvm-svn: 126137
2011-02-21 19:25:48 +00:00
Fariborz Jahanian 786e04cda5 Turn on 'auto' in plain objc mode.
llvm-svn: 126134
2011-02-21 18:37:13 +00:00
Chris Lattner d0257f79bc Pass the right linker flag in openbsd::Link::ConstructJob,
patch by Matthew Dempsky!

llvm-svn: 126133
2011-02-21 18:36:51 +00:00
Fariborz Jahanian f5bfc46c95 Remove warning on future change in ivar lookup rule
when doing the property default synthesis.
// rdar://9027673.

llvm-svn: 126128
2011-02-21 17:31:28 +00:00
John McCall 5decec97e5 Reorganize subelement initialization checking, no functionality change.
llvm-svn: 126116
2011-02-21 07:57:55 +00:00
John McCall 66884dd93c Small optimization: avoid redundant checks of whether a type is an array
when checking an initialization.

llvm-svn: 126115
2011-02-21 07:22:22 +00:00
John McCall 701417a0ac Pseudo-revirtualize CallExpr::getSourceRange by making it follow the
logic from CXXMemberCallExpr and by making it check for
CXXOperatorCallExpr in order to defer.  This is not really an awesome solution,
but I don't have a better idea.

llvm-svn: 126114
2011-02-21 06:23:05 +00:00
John McCall e9dab636df Bind references to opaque r-values correctly. Add a few test cases
for ?: on record types.

llvm-svn: 126113
2011-02-21 05:25:38 +00:00
Chandler Carruth d05b352b0e Clean up the tests for warning about unused function results given the
appropriate attribute. Add a bit more testing that finds a pretty bad
regression (since ~forever) in this warning. Fix it with a nice 2 line
change. =]

llvm-svn: 126098
2011-02-21 00:56:56 +00:00
Oscar Fuentes 15fe190027 Put targets on folders, if the IDE supports the feature.
Requires CMake 2.8.3 or newer.

llvm-svn: 126094
2011-02-20 22:06:44 +00:00
Oscar Fuentes 6f72540e46 New function for tablegenning: clang_tablegen.
llvm-svn: 126093
2011-02-20 22:06:32 +00:00
Oscar Fuentes e9c7994669 Correct name of dependent target.
CMake complained about this while generating VS project files but was
okay with it while generating makefiles on Linux.

llvm-svn: 126090
2011-02-20 19:41:34 +00:00
Benjamin Kramer ae1e5c250c Remove unused function.
llvm-svn: 126084
2011-02-20 16:04:14 +00:00
Richard Smith 7ee0d5664e Turn on __has_feature(cxx_auto_type). The feature is now fully implemented.
llvm-svn: 126078
2011-02-20 12:13:05 +00:00
Daniel Dunbar 67e556249c Remove a dead variable.
llvm-svn: 126073
2011-02-20 06:15:13 +00:00
Richard Smith 30482bc786 Implement the C++0x deduced 'auto' feature.
This fixes PR 8738, 9060 and 9132.

llvm-svn: 126069
2011-02-20 03:19:35 +00:00
Ken Dyck 6d90e8937c Expand use of CharUnits in LayoutField(). No change in functionality
intended.

llvm-svn: 126066
2011-02-20 02:06:09 +00:00
Ken Dyck d24099de04 Add const qualifier to getTypeInfoInChars().
llvm-svn: 126064
2011-02-20 01:55:18 +00:00
Richard Smith 1daeacbda8 Test commit.
llvm-svn: 126063
2011-02-20 00:59:54 +00:00
Anders Carlsson 08ce5ed1b1 Add a LangOptions::areExceptionsEnabled and start using it.
llvm-svn: 126062
2011-02-20 00:20:27 +00:00
Anders Carlsson ce8dd3a5d4 Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exceptions are enabled or not (they are by default).
llvm-svn: 126061
2011-02-19 23:53:54 +00:00
Peter Collingbourne 8f5cf74c77 Re-instate r125819 and r125820 with no functionality change
llvm-svn: 126060
2011-02-19 23:03:58 +00:00
Chris Lattner 29eb47bd68 Fix PR9253, allowing attribute(aligned) to reduce the alignment of
a typedef.

llvm-svn: 126059
2011-02-19 22:55:41 +00:00
Douglas Gregor 5b05454f24 Don't produce "comparison is always (true|false)" warnings when the
comparison itself is a constant expression. Fixes PR7536.

llvm-svn: 126057
2011-02-19 22:34:59 +00:00
Chris Lattner b0ed51da10 implement a tiny amount of codegen support for gnu array range
designators: allowing codegen when the element initializer is a
constant or something else without a side effect.  This unblocks
enough to let process.c in the linux kernel build, PR9257.

llvm-svn: 126056
2011-02-19 22:28:58 +00:00
Douglas Gregor d66828daf6 In addition to in-class member functions marked with the "used"
attribute, we also care about those with the "constructor"
attribute. Fixes PR6521.

llvm-svn: 126055
2011-02-19 21:54:50 +00:00
Anders Carlsson b94ad3ec22 There's no need to return early if we encounter a try/throw and exceptions are disabled.
llvm-svn: 126053
2011-02-19 21:53:09 +00:00
Rafael Espindola a6d2bff0c5 Revert 125820 and 125819 to fix PR9266.
llvm-svn: 126050
2011-02-19 21:39:31 +00:00
Oscar Fuentes f7fa56f25f Fix some add_dependencies.
The syntax is (add_dependencies target-name depend-target1 ...).

llvm-svn: 126049
2011-02-19 21:38:48 +00:00
Douglas Gregor b491ed36b4 Handle the resolution of a reference to a function template (which
includes explicitly-specified template arguments) to a function
template specialization in cases where no deduction is performed or
deduction fails. Patch by Faisal Vali, fixes PR7505!

llvm-svn: 126048
2011-02-19 21:32:49 +00:00
Anders Carlsson 68b36aff46 Disallow try/catch/throw when exceptions are disabled.
llvm-svn: 126039
2011-02-19 19:26:44 +00:00
Douglas Gregor bf2b26d805 The member classes of a current instantiation aren't necessarily a
current instantiation, even though we have a RecordDecl describing
them. Fixes PR9255.

Amusingly, I've had this patch sitting around for a month or two
because it was "obviously" wrong, but hadn't gotten around to writing
a test case to submit the fix :)

llvm-svn: 126038
2011-02-19 19:24:40 +00:00
Douglas Gregor 0cf82f6ad0 Teach the virtual-functions-without-virtual-destructor warning to only
warn about polymorphic classes (which have virtual functions) rather
than dynamic classes (which are polymorphic or have virtual bases).

llvm-svn: 126036
2011-02-19 19:14:36 +00:00
Douglas Gregor f05c0958e2 Remove the Fix-It for "main must return 'int'", which is not always
correct and is not worth fixing. Fixes PR8396.

llvm-svn: 126035
2011-02-19 19:04:23 +00:00
Ken Dyck 85ef0431a7 Expand use of CharUnits for alignments further. No change in functionality
intended.

llvm-svn: 126034
2011-02-19 18:58:07 +00:00
Douglas Gregor b11aad8cba Revert all of my commits that devirtualized the Decl hierarchy, which
lead to a serious slowdown (4%) on parsing of Cocoa.h. This memory
optimization should be revisited later, when we have time to look at
the generated code.

llvm-svn: 126033
2011-02-19 18:51:44 +00:00
Argyrios Kyrtzidis 3b1b3fe039 [analyzer] '-analyzer-check-objc-mem' can go through the llvm/clang codebase without crashing; enable it for C++.
llvm-svn: 126026
2011-02-19 08:03:21 +00:00
Argyrios Kyrtzidis eb8357c1d8 [analyzer] Fix crash when analyzing C++ code.
llvm-svn: 126025
2011-02-19 08:03:18 +00:00
Daniel Dunbar 1094bb101b Driver/Darwin: Support -Wl, with -Xarch_. This doesn't work naturally because of
the special way we model "linker input" arguments.

llvm-svn: 126023
2011-02-19 05:33:51 +00:00
Argyrios Kyrtzidis 12f146a3ef Use PointerUnion::getAddrOf instead of messing with PointerUnion & reinterpret_cast.
llvm-svn: 126021
2011-02-19 04:02:34 +00:00
Ted Kremenek ff6fd0f4b0 Change 'StoreRef' back to 'Store' in GRState, shrinking the size of GRState back by one pointer.
llvm-svn: 126020
2011-02-19 03:56:19 +00:00
John McCall 68cc3350a8 Fix a -Wuninitialized warning; it's actually a false positive,
but it's not reasonable for the diagnostic to figure that out.
Pointed out by Benjamin Kramer.

Also clarify the logic here.

llvm-svn: 126017
2011-02-19 03:13:26 +00:00
John McCall 8377967543 Warn about code that uses variables and functions with internal linkage
without defining them.  This should be an error, but I'm paranoid about
"uses" that end up not actually requiring a definition.  I'll revisit later.

Also, teach IR generation to not set internal linkage on variable
declarations, just for safety's sake.  Doing so produces an invalid module
if the variable is not ultimately defined.

Also, fix several places in the test suite where we were using internal
functions without definitions.

llvm-svn: 126016
2011-02-19 02:53:41 +00:00
Argyrios Kyrtzidis 21f347e729 [analyzer] Fix crash when analyzing C++ code.
llvm-svn: 126013
2011-02-19 01:59:41 +00:00
Ted Kremenek fda3687515 Add 'StoreRef' smart pointer to allow more fine-grain memory lifetime control of Store objects.
This yields a minor memory reduction (for larger functions) on Sqlite at the cost of slightly
higher memory usage on some functions because of the increased size of GRState (which can be optimized).

I expect the real memory savings from this enhancement will come when we aggressively
canabilize more of the ExplodedGraph.

llvm-svn: 126012
2011-02-19 01:59:33 +00:00
Argyrios Kyrtzidis e34245b30b [analyzer] Fix crash when analyzing C++ code.
llvm-svn: 126007
2011-02-19 01:08:41 +00:00
Chandler Carruth 4c4f8de421 Improve bool and char integral template argument printing in
diagnostics, resolving PR9227.

Patch originally by Mihai Rusu and Stephen Hines with some minimal style
tweaks from me.

llvm-svn: 125999
2011-02-19 00:21:00 +00:00
Chandler Carruth 9c9127eace Fix a missed case in the NULL operand to conditional operator
diagnostics.

Patch by Stephen Hines.

llvm-svn: 125998
2011-02-19 00:13:59 +00:00
Chandler Carruth 98e3c568bf Fix PR8767, improve diagnostic wording when allocating an object of an
abstract class type.

Patch by Stephen Hines, with a wording tweak from Doug applied by me.

llvm-svn: 125996
2011-02-18 23:59:51 +00:00
Chandler Carruth a8bea4b90e Initial steps to improve diagnostics when there is a NULL and
a non-pointer on the two sides of a conditional expression.

Patch by Stephen Hines and Mihai Rusu.

llvm-svn: 125995
2011-02-18 23:54:50 +00:00
Douglas Gregor 3a69eafa88 When code-completing a case statement for a switch on a value of
enumeration type, prioritize the enumeration constants and don't
provide completions for any other expressions. Fixes <rdar://problem/7283668>.

llvm-svn: 125991
2011-02-18 23:30:37 +00:00
Devang Patel 2d6390d47b Start using enums from DIBuilder.
llvm-svn: 125990
2011-02-18 23:29:22 +00:00
Chris Lattner fa222dfbed If -fno-builtin is passed, tell TargetLibraryInfo to
turn off all builtin optimizations.

llvm-svn: 125979
2011-02-18 22:34:47 +00:00
Douglas Gregor af2a6ae429 Selector::getIdentifierInfoForSlot() can return NULL values, a fact
that was ignored in a few places (most notably, code
completion). Introduce Selector::getNameForSlot() for the common case
where we only care about the name. Audit all uses of
getIdentifierInfoForSlot(), switching many over to getNameForSlot(),
fixing a few crashers.

Fixed <rdar://problem/8939352>, a code-completion crasher.

llvm-svn: 125977
2011-02-18 22:29:55 +00:00
Chris Lattner d98cec5ca2 install a TargetLibraryInfo configured with the appropriate
target triple.  This would be a decent place to add -fno-builtin
info for example.

llvm-svn: 125971
2011-02-18 22:20:38 +00:00
Argyrios Kyrtzidis ec016464ca [analyzer] Fix crash when analyzing C++ code.
llvm-svn: 125963
2011-02-18 21:24:56 +00:00
Chris Lattner 9ba479bd2c fix rdar://9024687, a crash on invalid that we used to silently ignore.
llvm-svn: 125962
2011-02-18 21:16:39 +00:00
Argyrios Kyrtzidis 1bdd68871e Introduce ASTContext::getLogicalOperationType() to return bool or int, depending on language.
No functionality change.

llvm-svn: 125957
2011-02-18 20:55:15 +00:00
Fariborz Jahanian 302a3d4e4d Objective-c armv7 API for atomic properties of
scalar types. // rdar://7761305

llvm-svn: 125946
2011-02-18 19:15:13 +00:00
Chris Lattner 0ddd0ae50e accept and ignore a few things for better OpenBSD compatibility,
patch by Amit Kulkarni!

llvm-svn: 125944
2011-02-18 17:05:55 +00:00
NAKAMURA Takumi dba4ed3502 [Heikki Kultala] This patch contains the ABI changes for the TCE target.
TCE target has some too strict alignment rules (that the HW really does not require, but which caused problems elsewhere) for data types and an ABI change was decided.

llvm-svn: 125833
2011-02-18 08:44:38 +00:00
Douglas Gregor b327eac117 Implement C++0x [expr.static.cast]p9, which permits explicitly casting
a scoped enumeration type to an integral or floating type,
properly. There was an over-eager assertion, and it was missing the
floating-point case.

Fixes PR9107/<rdar://problem/8937402>. 

llvm-svn: 125825
2011-02-18 03:01:41 +00:00
John McCall a9a2e8a58d The flags we're supposed to write into a byref struct are *not* the
_Block_object_* flags;  it's just BLOCK_HAS_COPY_DISPOSE or not.

Also, we don't need to chase forwarding pointers prior to calling
_Block_object_dispose;  _Block_object_dispose in fact already does
this.

rdar://problem/9006315

llvm-svn: 125823
2011-02-18 02:58:31 +00:00
Douglas Gregor e10f36db2f When building a qualified reference to a member of an anonymous struct
or union, place the qualifier on the outermost member reference
expression, which actually contains the entity name.

Fixes PR9188/<rdar://problem/8990184>.

llvm-svn: 125822
2011-02-18 02:44:58 +00:00
Ted Kremenek a7ced2cb4c Fix assertion failure on -Warray-bounds for 32-bit builds of Clang.
llvm-svn: 125821
2011-02-18 02:27:00 +00:00
Peter Collingbourne 14a552b2d7 Move CompilerInstance::LLVMContext and LLVMContext ownership to CodeGenAction
This removes the final dependency edge from any lib outside of CodeGen
to core.  As a result we can, and do, trim the dependency on core
from libclang, PrintFunctionNames, the unit tests and c-index-test.
While at it, review and trim other unneeded dependencies.

llvm-svn: 125820
2011-02-18 02:25:12 +00:00
Peter Collingbourne 3ae6caaf1b Move TargetInfo::adjustInlineAsmType to TargetCodeGenInfo
llvm-svn: 125819
2011-02-18 02:24:56 +00:00
Douglas Gregor 9543c40df1 When we're creating an expression for an integral template argument of
enumeration type, we were generating an integer literal implicitly
casted to the appropriate enumeration type. However, later checks on
that expression would strip the implicit cast.

This commit tweaks the lame hack, by creating an explicit cast instead
of an implicit cast. The right answer is to introduce a 
SubstNonTypeTemplateParmExpr expression that acts like the substituted
result. I'll investigate that soon.

llvm-svn: 125818
2011-02-18 02:12:44 +00:00
Chris Lattner 43e7f31f11 implement basic support for __label__. I wouldn't be shocked if there are
bugs from other clients that don't expect to see a LabelDecl in a DeclStmt,
but if so they should be easy to fix.

This implements most of PR3429 and rdar://8287027

llvm-svn: 125817
2011-02-18 02:08:43 +00:00
Chris Lattner ebb5c6c717 Switch labels over to using normal name lookup, instead of their
own weird little DenseMap.  Hey look, we now emit unused label
warnings deterministically, amazing.

llvm-svn: 125813
2011-02-18 01:27:55 +00:00
Chris Lattner d12b480e29 handle labeldecls.
llvm-svn: 125806
2011-02-18 00:52:55 +00:00
Chris Lattner 60f844916c make block bodies handle undefined labels just like functions.
llvm-svn: 125799
2011-02-17 23:58:47 +00:00
Chris Lattner fb59c7c7d8 improve support for big endian targets, fixing PR8171, patch
by Heikki Kultala!

llvm-svn: 125784
2011-02-17 22:09:58 +00:00
Oscar Fuentes 79b52bfc46 CMake: updated source file list.
llvm-svn: 125783
2011-02-17 22:07:39 +00:00
Argyrios Kyrtzidis 57d736fd46 [analyzer] Use the new registration mechanism for the debugging info "checks".
The relative checker package is 'debug':

'-dump-live-variables' is replaced by '-analyzer-checker=debug.DumpLiveVars'
'-cfg-view' is replaced by '-analyzer-checker=debug.ViewCFG'
'-cfg-dump' is replaced by '-analyzer-checker=debug.DumpCFG'

llvm-svn: 125780
2011-02-17 21:39:39 +00:00
Argyrios Kyrtzidis af45aca670 [analyzer] Use the new registration mechanism on the non-path-sensitive-checkers:
DeadStoresChecker
  ObjCMethSigsChecker
  ObjCUnusedIvarsChecker
  SizeofPointerChecker
  ObjCDeallocChecker
  SecuritySyntaxChecker

llvm-svn: 125779
2011-02-17 21:39:33 +00:00
Argyrios Kyrtzidis 24ffc08f39 [analyzer]
-Introduce CheckerV2, a set of templates for convenient declaration & registration of checkers.
 Currently useful just for checkers working on the AST not the path-sensitive ones.
-Enhance CheckerManager to actually collect the checkers and turn it into the entry point for
 running the checkers.
-Use the new mechanism for the LLVMConventionsChecker.

llvm-svn: 125778
2011-02-17 21:39:24 +00:00
Argyrios Kyrtzidis 507ff53e39 [analyzer] Pass CheckerManager to the registration functions.
llvm-svn: 125777
2011-02-17 21:39:17 +00:00
Chandler Carruth 1af88f12a3 Enhance the array bounds checking to work for several other constructs,
especially C++ code, and generally expand the test coverage.

Logic adapted from a patch by Kaelyn Uhrain <rikka@google.com> and
another Googler.

llvm-svn: 125775
2011-02-17 21:10:52 +00:00
Chandler Carruth 2a666fc2c7 Clean up the style of this function to match the conventions in the rest
of Clang, and reflows the code a bit to make it easier to read.

llvm-svn: 125773
2011-02-17 20:55:08 +00:00
Chris Lattner d28cc8113b add a fixme
llvm-svn: 125772
2011-02-17 20:54:00 +00:00
Chris Lattner cab02a60d2 Step #2/N of __label__ support: keep pushing LabelDecl forward,
making them be template instantiated in a more normal way and 
make them handle attributes like other decls.

This fixes the used/unused label handling stuff, making it use
the same infrastructure as other decls.

llvm-svn: 125771
2011-02-17 20:34:02 +00:00
Chris Lattner 50c3c1316a Inline LocalInstantiationScope::getInstantiationOf into its one
client, making room for future hacking.

llvm-svn: 125770
2011-02-17 19:47:42 +00:00
Chris Lattner 15a776fff7 remove some defensive code: LocalInstantiationScope::getInstantiationOf
and findInstantiationOf can never return null, even on invalid code.

llvm-svn: 125769
2011-02-17 19:38:27 +00:00
Douglas Gregor d6f8124c9c Eliminate the internal command-line option for viewing inheritance in C++ classes, since it's only really worked for the trivial cases anyway due to lame pseudo-parsing of the class name. The viewInheritance() function is still available for use in the debugger, where this is far more useful
llvm-svn: 125762
2011-02-17 19:04:40 +00:00
John McCall e6be5e1c0d Remove the "conditional save" hashtables from IR generation.
llvm-svn: 125761
2011-02-17 19:02:56 +00:00
Douglas Gregor 428d75ffd9 The internal -fdump-record-layouts flag already dumps the layout when it was computed; no need to do so again at the end of the translation unit
llvm-svn: 125760
2011-02-17 18:59:06 +00:00
Argyrios Kyrtzidis 9d5235d527 When building StaticAnalyzer/Frontend add -I "<Checkers build dir>" to allow Checkers.inc to be
included without '..', thus being compatible with build systems of *BSDs.

Patch by Joerg Sonnenberger!

llvm-svn: 125758
2011-02-17 18:40:33 +00:00
Douglas Gregor e5de7013c7 Remove the last virtual member function from the Decl hierarchy,
reducing the size of all declarations by one pointer. For a 64-bit
Clang parsing Cocoa.h, this saves ~630k of memory (about 3.5% of
ASTContext's memory usage for this header).

llvm-svn: 125756
2011-02-17 18:14:32 +00:00
Douglas Gregor b494173c93 Devirtualize TagDecl::completeDefinition().
llvm-svn: 125755
2011-02-17 18:06:05 +00:00
Douglas Gregor fe590dfa84 Devirtualize DeclaratorDecl::getInnerLocStart() and TagDecl::getInnerLocStart().
llvm-svn: 125754
2011-02-17 17:39:40 +00:00
Fariborz Jahanian 5fc74804a6 Improve diagnostics on missing property decl.
llvm-svn: 125752
2011-02-17 17:30:05 +00:00
Douglas Gregor a991f3a4e9 Devirtualize NamedDecl::getNameForDiagnostic().
llvm-svn: 125751
2011-02-17 17:23:19 +00:00
Douglas Gregor 0215459c37 Devirtualize RedeclarableTemplateDecl::newCommon().
llvm-svn: 125750
2011-02-17 17:10:20 +00:00
Chandler Carruth 22c7a79a1d Implement a sub-group of -Wconversion: -Wliteral-conversion. This
specifically targets literals which are implicitly converted, a those
are more often unintended and trivial to fix. This can be especially
helpful for diagnosing what makes 'const int x = 1e6' not an ICE.

Original patch authored by Jim Meehan with contributions from other
Googlers and a few cleanups from myself.

llvm-svn: 125745
2011-02-17 11:05:49 +00:00
John McCall c07a0c7e48 Change the representation of GNU ?: expressions to use a different expression
class and to bind the shared value using OpaqueValueExpr.  This fixes an
unnoticed problem with deserialization of these expressions where the
deserialized form would lose the vital pointer-equality trait;  or rather,
it fixes it because this patch also does the right thing for deserializing
OVEs.

Change OVEs to not be a "temporary object" in the sense that copy elision is
permitted.

This new representation is not totally unawkward to work with, but I think
that's really part and parcel with the semantics we're modelling here.  In
particular, it's much easier to fix things like the copy elision bug and to
make the CFG look right.

I've tried to update the analyzer to deal with this in at least some          
obvious cases, and I think we get a much better CFG out, but the printing
of OpaqueValueExprs probably needs some work.

llvm-svn: 125744
2011-02-17 10:25:35 +00:00
NAKAMURA Takumi 49ddc3646f lib/Frontend/InitHeaderSearch.cpp: Add mingw-w64's include paths.
llvm-svn: 125743
2011-02-17 08:51:47 +00:00
NAKAMURA Takumi 31ea2f14bc Triple::MinGW64 is deprecated and removed. We can use Triple::MinGW32 instead.
No one uses *-mingw64. mingw-w64 is represented as {i686|x86_64}-w64-mingw32.

llvm-svn: 125742
2011-02-17 08:51:38 +00:00
NAKAMURA Takumi 029d74b264 Fix whitespace.
llvm-svn: 125741
2011-02-17 08:50:50 +00:00
Douglas Gregor 133edddd82 Devirtualize Decl::getNextRedeclaration().
llvm-svn: 125740
2011-02-17 08:47:29 +00:00
Chandler Carruth 712563bba4 Implement -Wenum-compare, which warns when comparing two enums of
different types. We omit the warning when the enum types are anonymous.
Unlike GCC, this warning does not distinguish between C++ and C/ObjC for
controling whether it is on by default, it is always on by default.

Original patch contributed by Richard Trieu (@ Google), I fixed some
style issues, and cleaned it up for submission.

llvm-svn: 125739
2011-02-17 08:37:06 +00:00
Douglas Gregor 5ee06f02f9 Simple little optimization to Decl::getCanonicalDecl(), eliminating some heavyweight machinery and indirection that we don't need
llvm-svn: 125737
2011-02-17 08:14:56 +00:00
Douglas Gregor 00716e8bd3 Devirtualize Decl::getSourceRange()
llvm-svn: 125736
2011-02-17 08:12:32 +00:00
Douglas Gregor 7edc20ac24 Devirtualize Decl::getCanonicalDecl().
llvm-svn: 125735
2011-02-17 07:58:36 +00:00
Chris Lattner c8e630e4db Step #1/N of implementing support for __label__: split labels into
LabelDecl and LabelStmt.  There is a 1-1 correspondence between the
two, but this simplifies a bunch of code by itself.  This is because
labels are the only place where we previously had references to random
other statements, causing grief for AST serialization and other stuff.

This does cause one regression (attr(unused) doesn't silence unused
label warnings) which I'll address next.

This does fix some minor bugs:
1. "The only valid attribute " diagnostic was capitalized.
2. Various diagnostics printed as ''labelname'' instead of 'labelname'
3. This reduces duplication of label checking between functions and blocks.

Review appreciated, particularly for the cindex and template bits.

llvm-svn: 125733
2011-02-17 07:39:24 +00:00
Douglas Gregor f7b2c93b2f Devirtualize Decl::getBody() and Decl::hasBody().
llvm-svn: 125731
2011-02-17 07:13:24 +00:00
Douglas Gregor a43942a48e De-virtualize Decl::isOutOfLine().
llvm-svn: 125730
2011-02-17 07:02:32 +00:00
Douglas Gregor b0f2ea9e9e When printing a qualified type, look through a substituted template
parameter type to see what's behind it, so that we don't end up
printing silly things like "float const *" when "const float *" would
make more sense. Also, replace the pile of "isa" tests with a simple
switch enumerating all of the cases, making a few more obvious cases
use prefix qualifiers.

llvm-svn: 125729
2011-02-17 06:52:25 +00:00
Chris Lattner 5a9b1ec94c simplify a bit.
llvm-svn: 125724
2011-02-17 05:38:27 +00:00
Douglas Gregor 230a7e60b1 Improve parser recovery in "for" statements, from Richard Smith!
llvm-svn: 125722
2011-02-17 03:38:46 +00:00
Douglas Gregor 0e5d72f164 I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.
I will not hold on to temporary StringRefs.

llvm-svn: 125718
2011-02-17 03:19:26 +00:00
Douglas Gregor 9c1f1bfedc When Parser::ParseExpressionList isn't given a completer, fall back to
normal "expression" completion. Fixes the most annoying
code-completion bug I've found.

llvm-svn: 125715
2011-02-17 03:09:23 +00:00