Commit Graph

36417 Commits

Author SHA1 Message Date
Argyrios Kyrtzidis e1bc99e1ff Change the text of a FIXME.
llvm-svn: 151387
2012-02-24 19:45:46 +00:00
Argyrios Kyrtzidis f0fc594be5 [libclang] Add a triple to the test.
llvm-svn: 151386
2012-02-24 19:45:42 +00:00
Richard Smith 18743deb21 cxx_status: Consistently refer to C++11 as "C++11", not as "C++'11" nor as
"C++0x". Use "C++98" to refer to C++98, not "C++". Add heading for C++98
support section.

llvm-svn: 151381
2012-02-24 18:42:08 +00:00
Richard Smith 4e8376279d cxx_status: extended sizeof has been essentially complete for some time. As
agreed on IRC, any remaining issues are best dealt with as bugs.

We have no __has_feature check for this; please shout if you'd like one. This
feature seems too small to be worth its own release notes bullet (again, please
shout if you disagree).

llvm-svn: 151380
2012-02-24 18:37:14 +00:00
Fariborz Jahanian 7e75de84bd test for writing modern ivar of struct type.
llvm-svn: 151378
2012-02-24 18:17:50 +00:00
Richard Smith fd3da9358f __decltype is a GNU extension, not a C++11 extension.
llvm-svn: 151377
2012-02-24 18:10:23 +00:00
Fariborz Jahanian 5e6842bfea more objective-c modern translator ivar tests.
llvm-svn: 151376
2012-02-24 18:03:42 +00:00
Douglas Gregor 3a08c1cd3b Two minor, related fixes for template instantiation with blocks:
- Make sure that the block expression is instantiation-dependent if the
    block is in a dependent context
  - Make sure that the C++ 'this' expression gets captured even if we
  don't rebuild the AST node during template instantiation. This would
  also have manifested as a bug for lambdas.

Fixes <rdar://problem/10832617>.

llvm-svn: 151372
2012-02-24 17:41:38 +00:00
Fariborz Jahanian dd5a59baed objc modern translator. Fixes writing of block pointer ivar access.
llvm-svn: 151371
2012-02-24 17:35:35 +00:00
Anna Zaks 18de54b1a6 [analyzer] Run remove dead bindings before each call.
This ensures that we report the bugs associated with symbols going
out of scope in the correct function context.

llvm-svn: 151369
2012-02-24 16:49:46 +00:00
Anna Zaks cdf24a9a5e [analyzer] We were silently stopping exploring the path after
visiting 'return;' statement!

This most likely caused us to skip a bunch of code when analyzing with
inlining.

llvm-svn: 151368
2012-02-24 16:49:41 +00:00
Rafael Espindola 1a16f49858 Use -no-integrated-as only on ARM. The X86 and X86-64 integrated as have been
the default for clang for some time now and can handle compiler-rt.

llvm-svn: 151367
2012-02-24 16:22:39 +00:00
Nick Lewycky 4ed840421d Revert r151357. That unreachable is reachable...
llvm-svn: 151359
2012-02-24 09:07:53 +00:00
Nick Lewycky e51b944fd7 Silence gcc warnings pointing out that CharByteWidth could be used
uninitialized. While there, restyle this function! No functionality change.

llvm-svn: 151357
2012-02-24 08:58:14 +00:00
Matt Beaumont-Gay 47ff1221b1 Sink variable into assert
llvm-svn: 151356
2012-02-24 08:37:56 +00:00
Douglas Gregor 093d4be550 Remove some trivial uses of hasTrivialCopyConstructor() and
hasTrivialMoveConstructor().

llvm-svn: 151354
2012-02-24 07:55:51 +00:00
Douglas Gregor f704aded6b Kill a spurious use of hasTrivialDefaultConstructor()
llvm-svn: 151353
2012-02-24 07:48:37 +00:00
Douglas Gregor 29c42f2a25 Implement a new type trait __is_trivially_constructible(T, Args...)
that provides the behavior of the C++11 library trait
std::is_trivially_constructible<T, Args...>, which can't be
implemented purely as a library.

Since __is_trivially_constructible can have zero or more arguments, I
needed to add Yet Another Type Trait Expression Class, this one
handling arbitrary arguments. The next step will be to migrate
UnaryTypeTrait and BinaryTypeTrait over to this new, more general
TypeTrait class.

Fixes the Clang side of <rdar://problem/10895483> / PR12038.

llvm-svn: 151352
2012-02-24 07:38:34 +00:00
Ted Kremenek 1bf3b04726 Make PathDiagnosticBuilder sensitive to varying LocationContexts, thus fixing a bug in the inlining diagnostics where the wrong location could be used.
llvm-svn: 151349
2012-02-24 07:12:52 +00:00
Ted Kremenek 29cebb377d Remove stray path in test file.
llvm-svn: 151347
2012-02-24 06:01:01 +00:00
Ted Kremenek 60a7820ffe Reapply r151317, but when computing the PathDiagnostic profile and size keep into account the nested structure. Also fix a problem with how
inlining impacted Plist diagnostics, and adjust some ranges in the Plist output due to richer information.

llvm-svn: 151346
2012-02-24 06:00:00 +00:00
David Blaikie b260a2ea2a Fix test for non-block-default platforms.
llvm-svn: 151343
2012-02-24 04:20:32 +00:00
Chad Rosier c0ea158a2b Revert r151317 - Rework PathDiagnostics creation.. - to appease buildbots.
llvm-svn: 151338
2012-02-24 02:06:33 +00:00
Argyrios Kyrtzidis ffe055a86f [PCH] When keeping track of top-level decls for "targeted deserialization"
make sure we don't mistake ParmVarDecls for top-level decls.

Fixes rdar://10920009.

llvm-svn: 151330
2012-02-24 01:12:38 +00:00
Ted Kremenek f2131e7d95 Rework PathDiagnostic creation so that call stacks are captured by a nested PathDiagnosticCallPiece.
llvm-svn: 151317
2012-02-24 00:38:56 +00:00
Fariborz Jahanian eee9bca03d Add an ivar test for modern objc abi translator.
llvm-svn: 151316
2012-02-24 00:34:58 +00:00
Fariborz Jahanian 77a9255329 Make test works with FileCheck.
llvm-svn: 151314
2012-02-24 00:29:20 +00:00
Chad Rosier f62290a19b Reapply r151172 - Unwind path cleanup for array new list initializers - with a
test case that only runs on debug builds.

llvm-svn: 151311
2012-02-24 00:13:55 +00:00
Eli Friedman ec52f92db3 Handle "#pragma GCC visibility" in a few more places. Switch over "#pragma pack" to use the same handling that gcc does. Fixes <rdar://problem/10871094> and <rdar://problem/10893316>.
(Hopefully, common usage of these pragmas isn't irregular enough to break our current handling.  Doug has ideas for a more crazy approach if necessary.)

llvm-svn: 151307
2012-02-23 23:47:16 +00:00
Eli Friedman 8195ad7b87 Modernize some code which processes CastExprs to use CastKinds. No intended functional change.
llvm-svn: 151298
2012-02-23 23:04:32 +00:00
Anna Zaks 4b062cb904 [analyzer] KeyChainAPI: unique the leaks by allocation site.
(Very similar to the previous change in malloc.)

llvm-svn: 151297
2012-02-23 22:53:29 +00:00
Fariborz Jahanian 86f8266b9f objective-c++: Type of an objc string literal is NSString, not 'id'.
// rdar://10907410

llvm-svn: 151296
2012-02-23 22:51:36 +00:00
Aaron Ballman 0c84ebb539 Turned on support for __declspecs: noreturn, noinline, nothrow and naked in MS compatibility mode.
llvm-svn: 151295
2012-02-23 22:46:33 +00:00
Douglas Gregor 2d5aea0f25 Pull the OpaqueValueExpr's source expression into its constructor, so
that we can correctly compute value-dependence of the OVE.

llvm-svn: 151291
2012-02-23 22:17:26 +00:00
Jim Grosbach ce398aa03b Update test for r151288
llvm-svn: 151290
2012-02-23 22:12:53 +00:00
Jim Grosbach 1d43ca99e2 ARM: enable the integrated assembler by default for Darwin.
llvm-svn: 151288
2012-02-23 21:55:04 +00:00
Anna Zaks df901a4419 [analyzer] Malloc: unique leak reports by allocation site.
When we find two leak reports with the same allocation site, report only
one of them.

Provide a helper method to BugReporter to facilitate this.

llvm-svn: 151287
2012-02-23 21:38:21 +00:00
Anna Zaks fa31b8ef10 [analyzer] Add CString checks to the release notes.
llvm-svn: 151286
2012-02-23 21:38:14 +00:00
Argyrios Kyrtzidis 2e85c5f297 [libclang] Make sure that all top-level decls in a @implementation are
marked as such.

Previously we missed tag declarations; fixes rdar://10902015

llvm-svn: 151283
2012-02-23 21:11:20 +00:00
Fariborz Jahanian e5d9b0b8c8 Test is fixed.
llvm-svn: 151280
2012-02-23 20:43:56 +00:00
Fariborz Jahanian 1e2303379d XFAIL test until I figure out how to make test pass on different platforms.
llvm-svn: 151277
2012-02-23 20:22:21 +00:00
Howard Hinnant ebab2b0660 * tgmath_logb.patch implements the missing logb function (see C99 standard 7.22, paragraph 5). * tgmath_fabs_complex.patch corrects the return types for the complex fabs functions. These must be non-complex float/double/long double (see C99 standard 7.22, paragraph 4 and 7.3.8.1). Patch contributed by Kristof Beyls.
llvm-svn: 151276
2012-02-23 20:22:10 +00:00
Fariborz Jahanian 7cef65a3b6 Change test again so it passes in build-bot until I can figure out what is
going on.

llvm-svn: 151275
2012-02-23 20:07:38 +00:00
Fariborz Jahanian b96a293a59 fix test for patch in r151268.
llvm-svn: 151272
2012-02-23 18:57:03 +00:00
Benjamin Kramer c232b77556 Actually remove the duplicated elements from the vector.
llvm-svn: 151270
2012-02-23 18:35:56 +00:00
Fariborz Jahanian 2f0de8bdb9 objective-c default synthesis. classes which adopt protocol properties
must still auto synthesize those propeties which have been redeclared 
in the class. // rdar://10907410

llvm-svn: 151268
2012-02-23 18:21:25 +00:00
Douglas Gregor e5809a0aaf Fix indentation
llvm-svn: 151264
2012-02-23 17:54:00 +00:00
Douglas Gregor 1fe7e90758 Note that lambda expressions are available in the release notes for 3.1
llvm-svn: 151263
2012-02-23 17:51:51 +00:00
Douglas Gregor d153103c5a Replace a use of hasTrivialDefaultConstructor() with the appropriate
isTrivial() call.

llvm-svn: 151259
2012-02-23 17:07:43 +00:00
Benjamin Kramer 3adbe1ca43 Replace some DenseSets with SmallPtrSets. Apart from the "small" optimization, the current implementation is also a denser.
llvm-svn: 151257
2012-02-23 16:06:01 +00:00
Benjamin Kramer 91c6b6a933 Unique CXXBasePath decls with the SmallVector/pod_sort/std::unique idiom instead of employing a wasteful std::set.
llvm-svn: 151255
2012-02-23 15:18:31 +00:00
Benjamin Kramer 6b441d62e9 Replace the std::map in the init list checker with a DenseMap to reduce malloc thrashing.
llvm-svn: 151254
2012-02-23 14:48:40 +00:00
Richard Smith c899892485 PR12067: When emitting an evaluated constant structure in C++11 mode, don't
forget the vptrs.

llvm-svn: 151245
2012-02-23 08:33:23 +00:00
Douglas Gregor 6427a5ef01 Seriously, are injected-class-names that hard?
llvm-svn: 151241
2012-02-23 07:44:18 +00:00
Douglas Gregor 1be329d838 Provide the __is_trivially_assignable type trait, which provides
compiler support for the std::is_trivially_assignable library type
trait.

llvm-svn: 151240
2012-02-23 07:33:15 +00:00
Douglas Gregor 64bfb2e88e Clang supports lambdas.
llvm-svn: 151239
2012-02-23 05:44:09 +00:00
Rafael Espindola 8093fdfab1 Two fixes to how we compute visibility:
* Handle some situations where we should never make a decl more visible,
  even when merging in an explicit visibility.

* Handle attributes in members of classes that are explicitly specialized.

Thanks Nico for the report and testing, Eric for the initial review, and dgregor
for the awesome test27 :-)

llvm-svn: 151236
2012-02-23 04:17:32 +00:00
Douglas Gregor a2bd11f2de Tweak C++ status table:
- Apparently, SVN is yellow
  - Note that initializer lists are "in progress"

llvm-svn: 151232
2012-02-23 03:10:24 +00:00
Douglas Gregor 34b2e8bb17 Clang now supports lambda expressions.
llvm-svn: 151231
2012-02-23 03:02:32 +00:00
Eli Friedman 91f5ae5022 Try to handle qualifiers more consistently for array InitListExprs. Fixes <rdar://problem/10907510>, and makes the ASTs a bit more self-consistent.
(I've chosen to keep the qualifiers, but it isn't a strong preference; if anyone prefers removing them, please yell.)

llvm-svn: 151229
2012-02-23 02:25:10 +00:00
Richard Smith 1e3b0f0614 Update parser's disambiguation to cope with braced function-style casts in
C++11, and with braced-init-list initializers in conditions. This exposed an
ambiguity with enum underlying types versus bitfields, which we resolve by
treating 'enum E : T {' as always defining an enumeration (even if it would
only successfully parse as a bitfield). This appears to be g++ compatible.

llvm-svn: 151227
2012-02-23 01:36:12 +00:00
Aaron Ballman 96e7c09cad Turned on support for __declspec(deprecated) in MS compatibility mode.
llvm-svn: 151225
2012-02-23 01:19:31 +00:00
Anna Zaks 07de9c12f3 [analyzer] Invalidate the region passed to pthread_setspecific() call.
Make this call an exception in ExprEngine::invalidateArguments:
'int pthread_setspecific(ptheread_key k, const void *)' stores
a value into thread local storage. The value can later be retrieved
with 'void *ptheread_getspecific(pthread_key)'. So even thought the
parameter is 'const void *', the region escapes through the
call.

(Here we just blacklist the call in the ExprEngine's default
logic. Another option would be to add a checker which evaluates
the call and triggers the call to invalidate regions.)

Teach the Malloc Checker, which treats all system calls as safe about
the API.

llvm-svn: 151220
2012-02-23 01:05:27 +00:00
Ted Kremenek 8634d73e17 Tweak release note comments for checker build.
llvm-svn: 151219
2012-02-23 00:48:17 +00:00
Ted Kremenek 5467b05f5a Update checker build to checker-261.
llvm-svn: 151218
2012-02-23 00:47:09 +00:00
Eric Christopher 55b2bfa7c1 Add a quick TODO.
llvm-svn: 151217
2012-02-23 00:43:12 +00:00
Eric Christopher 27bc9fee2b Fold debug scope emission into the cleanup scope.
llvm-svn: 151216
2012-02-23 00:43:07 +00:00
Fariborz Jahanian 77171d343b another test for modern ivar access rewrite.
llvm-svn: 151208
2012-02-22 22:32:05 +00:00
Chad Rosier 1a3c3d4537 Revert r151172: Unwind path cleanup for array new list initializers.
llvm-svn: 151203
2012-02-22 21:36:06 +00:00
Fariborz Jahanian 31ebebfb58 more tests for modern objc translator.
llvm-svn: 151201
2012-02-22 21:13:49 +00:00
Chad Rosier c41c5a8c39 Improve placement of clang crash diagnostics section.
llvm-svn: 151192
2012-02-22 20:26:10 +00:00
Anna Zaks 40a7eb3837 [analyzer] Malloc cleanup:
- We should not evaluate strdup in the Malloc Checker, it's the job of
CString checker, so just update the RefState to reflect allocated
memory.

- Refactor to reduce LOC: remove some wrapper auxiliary functions, make
all functions return the state and add the transition in one place
(instead of in each auxiliary function).

llvm-svn: 151188
2012-02-22 19:24:52 +00:00
Joerg Sonnenberger 17d7551e73 Revert part of r148839 and keep DefaultTargetTriple in the form adjusted
by -target and similar options. As discussed in PR 12026, the change
broke support for target-prefixed tools, i.e. calling x86_64--linux-ld
when compiling for x86_64--linux. Improve the test cases added
originally in r149083 to not require execution, just executable files.
Document the hack with appropiate FIXME comments.

llvm-svn: 151185
2012-02-22 19:15:16 +00:00
Chad Rosier 35d14d91c2 Add clang crash diagnostic info and associated flags to Clang user manual.
llvm-svn: 151184
2012-02-22 19:14:46 +00:00
Ted Kremenek d87cdd1d11 Update set-xcode-analyzer to work with Xcode repackaging in Xcode 4.3
llvm-svn: 151179
2012-02-22 18:44:35 +00:00
Chad Rosier 14f9cd8739 Add new driver warning from r151174 to a warning group. Please let me know if this isn't the appropriate grouping.
llvm-svn: 151177
2012-02-22 18:18:48 +00:00
Fariborz Jahanian 5e49eb95b5 modern objc translator. more writing of modern ivar access
abi.

llvm-svn: 151176
2012-02-22 18:13:25 +00:00
Chad Rosier ce975d9997 [driver] Add a warning for when -mcpu= is specified without an argument. There
are likely many other OPT_xxxx_EQ options that could/should be added here.
rdar://10704648

llvm-svn: 151174
2012-02-22 17:55:22 +00:00
Sebastian Redl 74b173e5c8 Doug's review comments.
llvm-svn: 151173
2012-02-22 17:38:04 +00:00
Sebastian Redl 674c77e555 Unwind path cleanup for array new list initializers.
llvm-svn: 151172
2012-02-22 17:37:59 +00:00
Sebastian Redl f862eb6a9f CodeGen for array new list initializers. Doesn't correctly clean up in the face of exceptions yet.
llvm-svn: 151171
2012-02-22 17:37:52 +00:00
Douglas Gregor 2837aa2932 Teach overload resolution to prefer user-defined conversion via a
lambda closure type's function pointer conversion over user-defined
conversion via a lambda closure type's block pointer conversion,
always. This is a preference for more-standard code (since blocks
are an extension)  and a nod to efficiency, since function pointers
don't require any memory management. Fixes PR12063.

llvm-svn: 151170
2012-02-22 17:32:19 +00:00
Sebastian Redl eef474ce1b Fix parsing and processing initializer lists in return statements and as direct member initializers.
llvm-svn: 151155
2012-02-22 10:50:08 +00:00
Hans Wennborg c9dd946852 Warn about non-standard format strings (pr12017)
This adds the -Wformat-non-standard flag (off by default,
enabled by -pedantic), which warns about non-standard
things in format strings (such as the 'q' length modifier,
the 'S' conversion specifier, etc.)

llvm-svn: 151154
2012-02-22 10:17:01 +00:00
Bill Wendling 8eb771d4ca More ArrayRef-ification of methods.
llvm-svn: 151152
2012-02-22 09:51:33 +00:00
Bill Wendling 8ac06afa9b ArrayRef-icize the function arguments.
llvm-svn: 151151
2012-02-22 09:38:11 +00:00
Bill Wendling f1a3fcac0d Use an ArrayRef when we can instead of passing in a SmallVectorImpl reference.
llvm-svn: 151150
2012-02-22 09:30:11 +00:00
Sebastian Redl e7c31a9a22 Throw away stray CXXDefaultArgExprs. Fixes PR12061.
I think there's a deeper problem here in the way TransformCXXConstructExpr works, but I won't tackle it now.

llvm-svn: 151146
2012-02-22 09:07:21 +00:00
Francois Pichet e6664762ec In -fdelayed-template-parsing mode, reenter every scope when late parsing a templated function; (Not just the template parameter scope as previously). Also enter the scope stack in the correct order.
Otherwise this breaks some invariant during name lookup especially when dealing with shadowed declaration

Fix PR11931.

llvm-svn: 151140
2012-02-22 08:25:53 +00:00
Richard Smith 2a15b74605 Accept braced-init-lists in conditions, and, in passing, dramatically improve
the diagnostic for using a parenthesized direct-initializer in a condition.

llvm-svn: 151137
2012-02-22 06:49:09 +00:00
Eli Friedman 91d5bb1ee5 Make sure null initialization in arrays works correctly with ARC types. <rdar://problem/10907547>.
llvm-svn: 151133
2012-02-22 05:38:59 +00:00
Douglas Gregor ed90df3800 Generate an AST for the conversion from a lambda closure type to a
block pointer that returns a block literal which captures (by copy)
the lambda closure itself. Some aspects of the block literal are left
unspecified, namely the capture variable (which doesn't actually
exist) and the body (which will be filled in by IRgen because it can't
be written as an AST).

Because we're switching to this model, this patch also eliminates
tracking the copy-initialization expression for the block capture of
the conversion function, since that information is now embedded in the
synthesized block literal. -1 side tables FTW.

llvm-svn: 151131
2012-02-22 05:02:47 +00:00
Eli Friedman 7cd4a9ba48 Improve diagnostics a bit for bad member initializers, and fix an obscure bug involving packs. Fixes PR12049.
llvm-svn: 151130
2012-02-22 04:49:04 +00:00
NAKAMURA Takumi 0716b50db6 test/CodeGenCXX/thiscall-struct-return.cpp: Relax expressions for -Asserts.
llvm-svn: 151126
2012-02-22 03:36:54 +00:00
Anna Zaks 199e8e585b [analyzer] Malloc checker: mark 'strdup' and 'strndup' as allocators.
llvm-svn: 151124
2012-02-22 03:14:20 +00:00
Aaron Ballman 3c42441b2c Adding support for Microsoft's thiscall calling convention. Clang side of the patch.
llvm-svn: 151122
2012-02-22 03:04:13 +00:00
Anna Zaks 4ca45b1d00 [analyzer] Malloc: fix another false positive.
, when we return a symbol reachable to the malloced one via pointer
arithmetic.

llvm-svn: 151121
2012-02-22 02:36:01 +00:00
Anna Zaks 3705a1ee10 [analyzer] Change naming in bug reports "tainted" -> "untrusted"
llvm-svn: 151120
2012-02-22 02:35:58 +00:00
Argyrios Kyrtzidis a1bed4cd96 [libclang] Index the field references of a designated initializer, rdar://10906206
llvm-svn: 151118
2012-02-22 02:10:41 +00:00
Richard Smith fd555f6b1f Implement C++11 [expr.call]p11: If the operand to a decltype-specifier is a
function call (or a comma expression with a function call on its right-hand
side), possibly parenthesized, then the return type is not required to be
complete and a temporary is not bound. Other subexpressions inside a decltype
expression do not get this treatment.

This is implemented by deferring the relevant checks for all calls immediately
within a decltype expression, then, when the expression is fully-parsed,
checking the relevant constraints and stripping off any top-level temporary
binding.

Deferring the completion of the return type exposed a bug in overload
resolution where completion of the argument types was not attempted, which
is also fixed by this change.

llvm-svn: 151117
2012-02-22 02:04:18 +00:00
Kaelyn Uhrain 0178200062 Fix typo correction of template arguments to once again allow type names.
llvm-svn: 151112
2012-02-22 01:03:07 +00:00
Chad Rosier 877c0a27f8 Provide a way to disable auto-generation of preprocessed files during clang
crash.  This can speedup the process of generating a delta reduced test case.
rdar://10905465

llvm-svn: 151109
2012-02-22 00:30:39 +00:00
Fariborz Jahanian 8e1118cbd5 modern objc translator: fixes a bug where a class declaration with not
any implementation in tu was not being translated.

llvm-svn: 151106
2012-02-21 23:58:41 +00:00
Fariborz Jahanian c481c0c0f5 objective-c modern translator. accessing ivars using modern abi - wip.
llvm-svn: 151103
2012-02-21 23:46:48 +00:00
Argyrios Kyrtzidis cd90e3d37b Make sure Stmt::dump() is included in libclang.
llvm-svn: 151102
2012-02-21 23:41:58 +00:00
Douglas Gregor b8389976b2 In the conflict between C++11 [expr.prim.general]p4, which declares
that 'this' can be used in the brace-or-equal-initializer of a
non-static data member, and C++11 [expr.prim.lambda]p9, which says
that lambda expressions not in block scope can have no captures, side
fully with C++11 [expr.prim.general]p4 by allowing 'this' to be
captured within these initializers. This seems to be the intent of
non-static data member initializers.

llvm-svn: 151101
2012-02-21 22:51:27 +00:00
Eli Friedman ebea9aff0d Fix a crash in the diangostic code in EvalConstant. PR12043.
llvm-svn: 151100
2012-02-21 22:41:33 +00:00
Eric Christopher 8846b4db30 No need to go to object file, -emit-llvm is sufficient to see if clang
itself crashes.

llvm-svn: 151095
2012-02-21 22:25:20 +00:00
Chandler Carruth 85061b51d2 Skip testing the crtbegin.o, and resume using a single variable for the
prefixes. It seems only crtbegin.o uses the strange formatting.

llvm-svn: 151094
2012-02-21 22:21:50 +00:00
Chandler Carruth 286e0e0818 Clean up, add some documentation, and make this test return to checking
the linker toolchainness a bit more thoroughly. It used to work this
way, but hit buildbot issues. Hopefully subsequent fixes have addressed
those problems, but I'll be watching the bots.

llvm-svn: 151090
2012-02-21 21:51:40 +00:00
John McCall 24992371a5 Don't crash on attempts to synthesize an invalid property.
rdar://problem/10904479

llvm-svn: 151089
2012-02-21 21:48:05 +00:00
Richard Trieu bd61856d91 Redirect the output to /dev/null. This prevents the output from cluttering
up the build enviroment.

llvm-svn: 151087
2012-02-21 21:40:05 +00:00
Douglas Gregor 5dbc14f47e Only pop the expression evaluation context corresponding to a lambda
expression after we've finished the function body of the corresponding
function call operator. Otherwise, ActOnFinishFunctionBody() will see
the (unfinished) evaluation context of the lambda expression
itself. Fixes PR12031.

llvm-svn: 151082
2012-02-21 20:05:31 +00:00
Richard Smith 9a2b7e820c Don't assume that a valid expression for the first part of a for-statement
is non-null when diagnosing a broken attempt to write a for-range-statement.

llvm-svn: 151081
2012-02-21 20:01:35 +00:00
Jean-Daniel Dupas 58dab6829a When calling a non variadic format function(vprintf, vscanf, NSLogv, …), warn if the format string argument is a parameter that is not itself declared as a format string with compatible format.
llvm-svn: 151080
2012-02-21 20:00:53 +00:00
Douglas Gregor 680e9e018d Improve our handling of lambda expressions that occur within default
arguments. There are two aspects to this:

  - Make sure that when marking the declarations referenced in a
  default argument, we don't try to mark local variables, both because
  it's a waste of time and because the semantics are wrong: we're not
  in a place where we could capture these variables again even if it
  did make sense.
  - When a lambda expression occurs in a default argument of a
  function template, make sure that the corresponding closure type is
  considered dependent, so that it will get properly instantiated. The
  second bit is a bit of a hack; to fix it properly, we may have to
  rearchitect our handling of default arguments, parsing them only
  after creating the function definition. However, I'd like to
  separate that work from the lambdas work.

llvm-svn: 151076
2012-02-21 19:11:17 +00:00
Jeffrey Yasskin a09e62a042 Allow linux builds to take advantage of libunwind to get unwind.h if
that's installed.

llvm-svn: 151058
2012-02-21 16:20:12 +00:00
Argyrios Kyrtzidis 90c2e86b63 Also mark Type's dump() as 'used' to make it available in libclang.
llvm-svn: 151037
2012-02-21 06:12:38 +00:00
Craig Topper 90634c4d25 Remove comma from end of enum to silence build warning.
llvm-svn: 151036
2012-02-21 05:39:57 +00:00
Argyrios Kyrtzidis 8f931c56f9 Mark a few 'dump' methods as 'used' to make sure they are included in libclang
and useable while debugging.

llvm-svn: 151033
2012-02-21 05:04:44 +00:00
Douglas Gregor 6f88e5e0d7 Implement non-internal linkage for lambda closure types that need a
stable mangling, since these lambdas can end up in multiple
translation units. Sema is responsible for deciding when this is the
case, because it's already responsible for choosing the mangling
number.

llvm-svn: 151029
2012-02-21 04:17:39 +00:00
Nico Weber a69a3137ca Add a test case for r150976.
llvm-svn: 151027
2012-02-21 03:52:05 +00:00
Douglas Gregor 926410d2db Implement name mangling for lambda expressions that occur within the
initializers of data members (both static and non-static).

llvm-svn: 151017
2012-02-21 02:22:07 +00:00
Aaron Ballman 4284c36ef5 Adding a test case for the working-directory fix
llvm-svn: 151014
2012-02-21 00:56:50 +00:00
Ted Kremenek b14b42d477 Have ScanReachableSymbols reported reachable regions. Fixes a false positive with nested array literals. <rdar://problem/10686586>
llvm-svn: 151012
2012-02-21 00:46:29 +00:00
Douglas Gregor 7fcbd902b4 Implement name mangling for lambda expressions that occur within the
default arguments of function parameters. This simple-sounding task is
complicated greatly by two issues:

  (1) Default arguments aren't actually a real context, so we need to
  maintain extra state within lambda expressions to track when a
  lambda was actually in a default argument.
  (2) At the time that we parse a default argument, the FunctionDecl
  doesn't exist yet, so lambda closure types end up in the enclosing
  context. It's not clear that we ever want to change that, so instead
  we introduce the notion of the "effective" context of a declaration
  for the purposes of name mangling.

llvm-svn: 151011
2012-02-21 00:37:24 +00:00
Nick Lewycky 4506204640 Emit the exact size for the invariant intrinsics.
llvm-svn: 151010
2012-02-21 00:26:58 +00:00
Anna Zaks 3508a00543 [analyzer] + a couple more malloc tests.
llvm-svn: 151008
2012-02-21 00:00:48 +00:00
Anna Zaks 19a66678d5 [analyzer] Make KeyChainAPI checker inlining-aware.
llvm-svn: 151007
2012-02-21 00:00:44 +00:00
Eli Friedman 932b0b1a13 Make RequireLiteralType work correctly with incomplete array types. PR12037.
llvm-svn: 151005
2012-02-20 23:58:14 +00:00
Argyrios Kyrtzidis 969fdfddd2 [PCH] Recover gracefully if the ASTReader detects that a file is different
from the one stored in the PCH/AST, while trying to load a SLocEntry.

We verify that all files of the PCH did not change before loading it but this is not enough because:

- The AST may have been 1) kept around, 2) to do queries on it.
- We may have 1) verified the PCH and 2) started parsing.

Between 1) and 2) files may change and we are going to have crashes because the rest of clang
cannot deal with the ASTReader failing to read a SLocEntry.

Handle this by recovering gracefully in such a case, by initializing the SLocEntry
with the info from the PCH/AST as well as reporting failure by the ASTReader.

rdar://10888929

llvm-svn: 151004
2012-02-20 23:58:07 +00:00
Richard Smith 5b8b3db5c9 Fix a constexpr FIXME: When implicitly instantiating the primary template for an
explicit specialization of a function template, mark the instantiation as
constexpr if the specialization is, rather than requiring them to match.

llvm-svn: 151001
2012-02-20 23:28:05 +00:00
Eric Christopher 8678a4a987 Formatting.
llvm-svn: 150996
2012-02-20 23:02:36 +00:00
Argyrios Kyrtzidis 5e5927eb0b Make PreprocessorOptions::DetailedRecordIncludesNestedMacroExpansions false by default.
Recording nested macro expansions is not useful, plus it fixes rdar://10893630

llvm-svn: 150995
2012-02-20 22:54:39 +00:00
Fariborz Jahanian caabf1bb64 objc IRGen: force CSE of load of ivar offsets by setting
the 'invariant.load' metadata tag onto those loads.
// rdar://10840980

llvm-svn: 150994
2012-02-20 22:42:22 +00:00
Anna Zaks 1526881ee0 [analyzer] Make Malloc aware of inter-procedural execution + basic
tests.

llvm-svn: 150993
2012-02-20 22:25:23 +00:00
Anna Zaks 6ecb6a6b7f [analyzer] Testing: These checkers are not experimental anymore.
llvm-svn: 150989
2012-02-20 21:10:40 +00:00
Anna Zaks 0cdce4df76 [analyzer] Turn on by default the Malloc Checker and a couple of CString
checks:

- unix.Malloc - Checks for memory leaks, double free, use-after-free.
- unix.cstring.NullArg - Checks for null pointers passed as arguments to
CString functions + evaluates CString functions.
- unix.cstring.BadSizeArg - Checks for common anti-patterns in
strncat size argument.

llvm-svn: 150988
2012-02-20 21:10:37 +00:00
Douglas Gregor 43c3f28c23 Make sure that we set up the right declaration contexts when creating
and introducing the lambda closure type and its function call
operator. Previously, we assumed that the lambda closure type would
land directly in the current context, and not some parent context (as
occurs with linkage specifications). Thanks to Richard for the test case.

llvm-svn: 150987
2012-02-20 20:47:06 +00:00
Fariborz Jahanian a7765fea90 modern objc translator. Finish off first cut of the
modern meta-data translation by commenting out private ivar
declarations in user source. Also, added several tests.

llvm-svn: 150985
2012-02-20 20:09:20 +00:00
Douglas Gregor d5c4844e02 When we resolve the type of an 'auto' variable, clear out the linkage
of that variable; it will need to be recomputed with the resolved
type.

llvm-svn: 150984
2012-02-20 20:05:29 +00:00
Chad Rosier 112e71ee7c Make test case less sensitive to metadata numbering.
llvm-svn: 150983
2012-02-20 19:51:44 +00:00
Douglas Gregor 6379854457 Basic support for name mangling of C++11 lambda expressions. Because
name mangling in the Itanium C++ ABI for lambda expressions is so
dependent on context, we encode the number used to encode each lambda
as part of the lambda closure type, and maintain this value within
Sema.

Note that there are a several pieces still missing:
  - We still get the linkage of lambda expressions wrong
  - We aren't properly numbering or mangling lambda expressions that
  occur in default function arguments or in data member initializers.
  - We aren't (de-)serializing the lambda numbering tables

llvm-svn: 150982
2012-02-20 19:44:39 +00:00
Eric Christopher 66562a4a54 Remove the type retaining from the clang frontend. This is now
handled by the caching and rauw. Also fix one cache that wasn't
being added to highlighted by this patch. Update all testcases
accordingly.

This should fix the deall failure.

llvm-svn: 150977
2012-02-20 18:05:24 +00:00
Eric Christopher e908a7a92c Make forward declarations for objective-c types use the new
temporary forward declaration nodes. Fixes a problem building
Chrome.

llvm-svn: 150976
2012-02-20 18:05:04 +00:00
Gregory Szorc 19bf2398ba [clang.py] Format and add documention for Type
llvm-svn: 150972
2012-02-20 17:58:40 +00:00
Gregory Szorc a5a89b9564 [clang.py] Add tests for Type.is_volatile_qualified and Type.is_restrict_qualified
llvm-svn: 150971
2012-02-20 17:58:02 +00:00
Gregory Szorc 495c7dae5d [clang.py] Implement Type.argument_types()
llvm-svn: 150970
2012-02-20 17:45:30 +00:00
Gregory Szorc 8a840febac [clang.py] Implement Type.__eq__ and Type.__ne__
llvm-svn: 150969
2012-02-20 17:44:49 +00:00
Douglas Gregor caf4826e2e Deserialize the direct-initialization range of a "new" expression
properly. Previously, we deserialized it but failed to set the
corresponding member in CXXNewExpr. Fixes <rdar://problem/10893600>.

llvm-svn: 150963
2012-02-20 16:12:14 +00:00
Aaron Ballman 232c4f50ba Fixing the working-directory option so that it stores the proper directory.
llvm-svn: 150960
2012-02-20 14:13:25 +00:00
Dylan Noblesmith c95d81924d Basic: import IntrusiveRefCntPtr<> into clang namespace
The class name is long enough without the llvm:: added.
Also bring in RefCountedBase and RefCountedBaseVPTR.

llvm-svn: 150958
2012-02-20 14:00:23 +00:00
Chandler Carruth a2a5410e6d Add 3dNOW intrinsic header to x86intrin.h, conditioned on __3dNOW__ to
match the behavior of GCC. Also add a test for these intrinsics, which
apparently have *zero* tests. =[ Not surprisingly, Clang crashed when
compiling these.

Fix the bug in CodeGen where we failed to bitcast the argument type to
x86mmx prior to calling the LLVM intrinsic. This fixes an assert on the
new 3dnow-builtins.c test.

This is one issue impacting the efforts to get Clang to emulate the
Microsoft intrinsics headers -- 3dnow intrinsics are implictitly made
available there.

llvm-svn: 150948
2012-02-20 07:35:45 +00:00
Benjamin Kramer 2325b24c73 ObjCMessageExpr: Don't leave SelLocsKind uninitialized when the send is implicit.
Fixes PR11929. Found by valgrind.

llvm-svn: 150943
2012-02-20 00:20:48 +00:00
Benjamin Kramer 807c2dba60 Set the location of the template keyword when allocating a new TemplateIdAnnotation.
Found by valgrind.

llvm-svn: 150940
2012-02-19 23:37:39 +00:00
Chandler Carruth 4fc5fcd121 Make the regular expressions in this test more narrow to ensure we're
actually matching the write substrings, and stop looking for a leading
'/' to try and finish fixing darwin and other hosts.

llvm-svn: 150938
2012-02-19 23:09:50 +00:00
Fariborz Jahanian 2b383d21dc objective-c modern translator: comment out private ivars
declared in class extension and implementation.

llvm-svn: 150937
2012-02-19 19:00:05 +00:00
Gregory Szorc 8428c242b8 [clang.py] Implement Type.is_function_variadic
llvm-svn: 150936
2012-02-19 18:28:33 +00:00
Sebastian Redl 73cfbebed4 Emit a warning when list-initializing a std::initializer_list member.
llvm-svn: 150933
2012-02-19 16:31:05 +00:00
Benjamin Kramer 8558da1930 Harden test against for operator new(unsigned int).
llvm-svn: 150932
2012-02-19 16:20:58 +00:00
Sebastian Redl d026dc499c Make heap-allocation of std::initializer_list 'work'.
llvm-svn: 150931
2012-02-19 16:03:09 +00:00
Sebastian Redl 4e04dd1979 Make std::initializer_list member initializers 'work'.
llvm-svn: 150930
2012-02-19 15:41:54 +00:00
Sebastian Redl e6c32e6293 Refuse to compile global std::initializer_lists instead of doing completely the wrong thing.
llvm-svn: 150928
2012-02-19 14:53:49 +00:00
Sebastian Redl 8eb351d72e Get recursive initializer lists to work and add a test. Codegen of std::initializer_list is now complete. Onward to array new.
llvm-svn: 150926
2012-02-19 12:28:02 +00:00
Sebastian Redl 99f6616470 Add a testcase for using objects with list-constructors, and fix a Sema crash by repeating an old hack.
llvm-svn: 150925
2012-02-19 12:27:56 +00:00
Sebastian Redl 1d197174a2 Add a testcase to show that temporaries from the initializer list are destroyed correctly.
llvm-svn: 150924
2012-02-19 12:27:51 +00:00
Sebastian Redl ca89d6841a Add a testcase for start+end implementations of std::initializer_list.
llvm-svn: 150923
2012-02-19 12:27:47 +00:00
Sebastian Redl 4f28b58b7b Fix a crash for nested initializer list initialization. Still does the wrong thing in CodeGen, in that it never destructs anything.
llvm-svn: 150922
2012-02-19 12:27:43 +00:00
Ahmed Charles 289896d2f3 Remove dead code.
llvm-svn: 150919
2012-02-19 11:57:29 +00:00
Rafael Espindola 322d2f4032 Don't check for /lib and /usr/lib.
llvm-svn: 150907
2012-02-19 02:43:03 +00:00
Rafael Espindola 1c4bd44052 Our handling of variables in FileCheck looks really broken on windws. Just
give up on matching the path prefix for the libraries.

llvm-svn: 150906
2012-02-19 02:33:09 +00:00
Rafael Espindola 8c53669a2d Add an extra CHECK line to make sure TOOLCHAIN2 matches just the path
prefix.

llvm-svn: 150905
2012-02-19 02:23:50 +00:00
Rafael Espindola 7c3e065573 Looks like we use forward slashes for header search but back slashes for
libraries on windows. Use two variables to make this test pass.

llvm-svn: 150903
2012-02-19 02:03:47 +00:00
Rafael Espindola c499573145 Try to match the linker being named ld.exe. Second try at fixing the windows bots.
llvm-svn: 150901
2012-02-19 01:52:23 +00:00
Rafael Espindola 70f2ad1afb Don't assume a path starts with a /. Should fix the windows bot.
llvm-svn: 150900
2012-02-19 01:47:01 +00:00
Rafael Espindola 1af7c219c7 Implement a -gcc-toolchain command line option that does the same as
configure's --with-gcc-toolchain. The configure option is now just a default
value for the command line one.

llvm-svn: 150898
2012-02-19 01:38:32 +00:00
Ted Kremenek 1c95ef4e94 Teach analyzer that blocks with no captures are globals. Fixes <rdar://problem/10348049>.
llvm-svn: 150896
2012-02-18 22:41:01 +00:00
Richard Smith 66c9699ac3 Implement constant expression support for __real__ and __imag__ on lvalue
complex numbers. Treat complex numbers as arrays of the corresponding component
type, in order to make std::complex behave properly if implemented in terms of
_Complex T.

Apparently libstdc++'s std::complex is implemented this way, and we were
rejecting a member like this:

  constexpr double real() { return __real__ val; }

because it was marked constexpr but unable to produce a constant expression.

llvm-svn: 150895
2012-02-18 22:04:06 +00:00
Ted Kremenek b0d37508d0 Fix crash in analyzer diagnostic generation involving subexpressions of OpaqueValueExpr not appearing in the ParentMap. Fixes <rdar://problem/10797980>.
llvm-svn: 150894
2012-02-18 22:02:57 +00:00
Ted Kremenek e8a5ba89ec Teach analyzer about NSAutoreleasePool -allocWithZone:. Fixes <rdar://problem/10640253>.
llvm-svn: 150892
2012-02-18 21:37:48 +00:00
Ted Kremenek 3d64453f9d Add analyzer test for using of C++ references with ObjC object pointers, reported in <rdar://problem/10569024>.
llvm-svn: 150891
2012-02-18 21:27:25 +00:00
Richard Smith 0b6b8e490c Fix wrong-code bug: __imag on a scalar lvalue should produce a zero rvalue,
rather than an lvalue referring to the scalar.

llvm-svn: 150889
2012-02-18 20:53:32 +00:00
Ted Kremenek e98d63a823 Adopt ExprEngine and checkers to ObjC property refactoring. Everything was working, but now diagnostics are aware of message expressions implied by uses of properties. Fixes <rdar://problem/9241180>.
llvm-svn: 150888
2012-02-18 20:53:30 +00:00
David Chisnall c616e95162 Default to not using __cxa_atexit on Solaris.
llvm-svn: 150883
2012-02-18 17:00:56 +00:00
David Chisnall cb5e468106 Remove a debugging line accidentally left in the last commit.
llvm-svn: 150882
2012-02-18 16:20:35 +00:00
David Chisnall 0867d9cfbc Implement #pragma redefine_extname.
This fixes PR5172 and allows clang to compile C++ programs on Solaris using the system headers.

llvm-svn: 150881
2012-02-18 16:12:34 +00:00
Dmitri Gribenko e72fa2c113 Add -Wstrncat-size and -Wempty-body to release notes.
llvm-svn: 150879
2012-02-18 14:13:26 +00:00
Benjamin Kramer 26538e8cc5 Remove unused but set variable.
llvm-svn: 150877
2012-02-18 11:35:28 +00:00
Douglas Gregor fdf598eaf3 Rewrite variable capture within lambda expressions and blocks,
eliminating a bunch of redundant code and properly modeling how the
captures of outside blocks/lambdas affect the types seen by inner
captures.

This new scheme makes two passes over the capturing scope stack. The
first pass goes up the stack (from innermost to outermost), assessing
whether the capture looks feasible and stopping when it either hits
the scope where the variable is declared or when it finds an existing
capture. The second pass then walks down the stack (from outermost to
innermost), capturing the variable at each step and updating the
captured type and the type that an expression referring to that
captured variable would see. It also checks type-specific
restrictions, such as the inability to capture an array within a
block. Note that only the first odr-use of each
variable needs to do the full walk; subsequent uses will find the
capture immediately, so multiple walks need not occur.

The same routine that builds the captures can also compute the type of
the captures without signaling errors and without actually performing
the capture. This functionality is used to determine the type of
declaration references as well as implementing the weird decltype((x))
rule within lambda expressions.

The capture code now explicitly takes sides in the debate over C++
core issue 1249, which concerns the type of captures within nested
lambdas. We opt to use the more permissive, more useful definition
implemented by GCC rather than the one implemented by EDG.

llvm-svn: 150875
2012-02-18 09:37:24 +00:00
Douglas Gregor 812d8f6387 Unify our computation of the type of a captured reference to a
variable; it was previously duplicated, and one of the copies failed
to account for outer non-mutable lambda captures.

llvm-svn: 150872
2012-02-18 05:51:20 +00:00
Richard Smith 0dea49e324 Fix a problem in the GCC testsuite, exposed by r150557. Compound literals
are represented as prvalues in C++; don't be fooled into thinking they're
global lvalues.

llvm-svn: 150870
2012-02-18 04:58:18 +00:00
Eli Friedman ff4b407009 Add a bunch of missing calls to DiagnoseSentinelCalls. <rdar://problem/10885993>.
This should probably be refactored... but it isn't completely obvious what refactoring is best.

llvm-svn: 150869
2012-02-18 04:48:30 +00:00
Ted Kremenek 084e1b48a1 Change wording of warning about using __bridge casts in non-ARC.
llvm-svn: 150868
2012-02-18 04:42:38 +00:00
Richard Smith eec915d686 Diagnose uses of deleted destructors and inaccessible defaulted destructors.
We had two separate issues here: firstly, varions functions were assuming that
they did not need to perform semantic checks on trivial destructors (this is
not true in C++11, where a trivial destructor can nonetheless be private or
deleted), and a bunch of DiagnoseUseOfDecl calls were missing for uses of
destructors.

llvm-svn: 150866
2012-02-18 04:13:32 +00:00
Richard Smith d951a1d9c8 Initial refactoring of 'ShouldDeleteSpecialMember', in preparation for providing
decent diagnostics. Finish the work of combining all the 'ShouldDelete'
functions into one. In unifying the code, fix a minor bug where an anonymous
union with a deleted default constructor as a member of a union wasn't being
considered as making the outer union's default constructor deleted.

llvm-svn: 150862
2012-02-18 02:02:13 +00:00
Chad Rosier 1d9cdb6c42 Fix comment.
llvm-svn: 150859
2012-02-18 01:20:35 +00:00
Eric Christopher 1c3785aae9 Add in a caching mechanism so that forward declarations are replaced
with full types if they exist.

rdar://10809898 and rdar://10209967 and rdar://10400981

llvm-svn: 150858
2012-02-18 00:50:17 +00:00
Eric Christopher 1a0c882a22 Formatting.
llvm-svn: 150857
2012-02-18 00:50:14 +00:00
Eric Christopher 71006f2378 Remove UpdateCompletedType from the debug info emission. We now
emit less than complete types on purpose on occasion and so
our caches aren't useful for this kind of lazy emitting.

llvm-svn: 150856
2012-02-18 00:50:08 +00:00
Chad Rosier f0cccf5bdb Remove redundant check.
llvm-svn: 150855
2012-02-18 00:37:07 +00:00
Ted Kremenek d519cae8aa Have conjured symbols depend on LocationContext, to add context sensitivity for functions called more than once.
llvm-svn: 150849
2012-02-17 23:13:45 +00:00
Anna Zaks 1fdedc99f2 [analyzer] Malloc Checker more tests.
llvm-svn: 150847
2012-02-17 22:35:34 +00:00
Anna Zaks e56167e8f8 [analyzer] Fix another false positive in the Malloc Checker, by making
it aware of CString APIs that return the input parameter.

Malloc Checker needs to know how the 'strcpy' function is
evaluated. Introduce the dependency on CStringChecker for that.
CStringChecker knows all about these APIs.

Addresses radar://10864450

llvm-svn: 150846
2012-02-17 22:35:31 +00:00
Anna Zaks 6348a810fe [analyzer] Generalize function name checking in CString checker.
(Ex: It was not treating __inline_strcpy as strcpy. Will add tests that
rely on this later on.)

llvm-svn: 150845
2012-02-17 22:35:26 +00:00
Fariborz Jahanian d268b0caba modern objc translator: postpone writing of class definitions
until the end when all their ivars are known then.

llvm-svn: 150844
2012-02-17 22:20:12 +00:00
Fariborz Jahanian 320c88afce modern objc writer: more work for category metadata rewrite
and some cleanup.

llvm-svn: 150839
2012-02-17 20:33:00 +00:00
Richard Smith 132bea96ad Don't emit optimization-specific intrinsic at -O0.
llvm-svn: 150838
2012-02-17 20:12:52 +00:00
Fariborz Jahanian f20550543f modern objc translator: category metadata related
patch.

llvm-svn: 150825
2012-02-17 18:40:41 +00:00
David Chisnall 0c1941cb05 On Solaris, define some standard macros that the Solaris headers require in
order to not be broken (by Solaris standards).

llvm-svn: 150822
2012-02-17 18:35:11 +00:00
Douglas Gregor 23b05417c9 De-nest tentative parsing to disambiguate lambdas from designators; no
functionality change.

llvm-svn: 150817
2012-02-17 16:41:16 +00:00
Sebastian Redl eb54f08aee Don't allow non-empty ParenListExprs as array-new initializers.
Don't know what I was thinking there. Fixes PR12023.

llvm-svn: 150804
2012-02-17 08:42:32 +00:00
Sebastian Redl c83ed8248e Basic code generation support for std::initializer_list.
We now generate temporary arrays to back std::initializer_list objects
initialized with braces. The initializer_list is then made to point at
the array. We support both ptr+size and start+end forms, although
the latter is untested.

Array lifetime is correct for temporary std::initializer_lists (e.g.
call arguments) and local variables. It is untested for new expressions
and member initializers.

Things left to do:
Massively increase the amount of testing. I need to write tests for
start+end init lists, temporary objects created as a side effect of
initializing init list objects, new expressions, member initialization,
creation of temporary objects (e.g. std::vector) for initializer lists,
and probably more.
Get lifetime "right" for member initializers and new expressions. Not
that either are very useful.
Implement list-initialization of array new expressions.

llvm-svn: 150803
2012-02-17 08:42:25 +00:00
Gregory Szorc dd19169988 [clang.py] Implement Type.element_count
llvm-svn: 150800
2012-02-17 07:47:38 +00:00
Gregory Szorc e1e9ec1082 [clang.py] Implement Type.element_type
llvm-svn: 150799
2012-02-17 07:44:46 +00:00
Richard Smith 08a5144621 The clang half of r150794: after the construction of a global or static const
variable ends, if the variable has a trivial destructor and no mutable
subobjects then emit an llvm.invariant.start call for it. globalopt knows to
make the variable const when evaluating this.

llvm-svn: 150798
2012-02-17 07:31:37 +00:00
Eric Christopher 2939e6e136 Index "12" holds the vtable, not "9".
Fixes lots of gdb testsuite failures.

llvm-svn: 150797
2012-02-17 07:09:48 +00:00
Richard Smith e070fd2ac8 Bug fix: do not emit static const local variables with mutable members
as constants.

Refactor and simplify all the separate checks for whether a type can be
emitted as a constant.

llvm-svn: 150793
2012-02-17 06:48:11 +00:00
Richard Smith ae819500a1 When performing IRGen on a global, emit it as a constant if:
1) It has a const-qualified type, and
 2) It has no mutable members, and
 3) It has no dynamic initialization, and
 4) It has trivial destruction.
Remove the unnecessary requirement that the type be POD. This allows us to
mark all constexpr objects with no mutable members as 'constant'.

llvm-svn: 150792
2012-02-17 04:54:50 +00:00
Douglas Gregor 7ae3c75d97 Only add 'const' to the type of variables captured in a lambda when
we're capturing it by value in a non-mutable lambda.

llvm-svn: 150791
2012-02-17 04:02:59 +00:00
Douglas Gregor a80cae11f6 Disambiguate between C++11 lambda expressions and C99 array
designators in the parser. In the worst case, this disambiguation
requires tentative parsing just past the closing ']', but for most
cases we'll be able to tell by looking ahead just one token (without
going into the heavyweight tentative parsing machinery).

llvm-svn: 150790
2012-02-17 03:49:44 +00:00
Richard Smith 14a941380a Make sure all remaining parts of the constant evaluator are aware that an array
can be represented by an LValue, and use that to simplify the code a little.

llvm-svn: 150789
2012-02-17 03:35:37 +00:00
John McCall a729c62b81 Whether an argument is required (in contrast with being an
optional argument passed through the variadic ellipsis)
potentially affects how we need to lower it.  Propagate
this information down to the various getFunctionInfo(...)
overloads on CodeGenTypes.  Furthermore, rename those
overloads to clarify their distinct purposes, and make
sure we're calling the right one in the right place.
This has a nice side-effect of making it easier to construct
a function type, since the 'variadic' bit is no longer
separable.

This shouldn't really change anything for our existing
platforms, with one minor exception --- we should now call
variadic ObjC methods with the ... in the "right place"
(see the test case), which I guess matters for anyone
running GNUStep on MIPS.  Mostly it's just a substantial
clean-up.

llvm-svn: 150788
2012-02-17 03:33:10 +00:00
John McCall c833deaa09 Block expressions always have a prototyped function type; expose this
in the AST accessor and micro-optimize it very slightly.

llvm-svn: 150787
2012-02-17 03:32:35 +00:00
John McCall 1e25a97ae2 Add a castAs<U> accessor to CanQual<T>.
llvm-svn: 150786
2012-02-17 03:32:17 +00:00
Douglas Gregor 355efbb2e0 Rework the Sema/AST/IRgen dance for the lambda closure type's
conversion to function pointer. Rather than having IRgen synthesize
the body of this function, we instead introduce a static member
function "__invoke" with the same signature as the lambda's
operator() in the AST. Sema then generates a body for the conversion
to function pointer which simply returns the address of __invoke. This
approach makes it easier to evaluate a call to the conversion function
as a constant, makes the linkage of the __invoke function follow the
normal rules for member functions, and may make life easier down the
road if we ever want to constexpr'ify some of lambdas.

Note that IR generation is responsible for filling in the body of
__invoke (Sema just adds a dummy body), because the body can't
generally be expressed in C++.

Eli, please review!

llvm-svn: 150783
2012-02-17 03:02:34 +00:00
Richard Smith 50965d9331 Tests for the fixits which Doug added in r150727.
llvm-svn: 150777
2012-02-17 01:39:04 +00:00
Richard Smith 1002d10aaa Reject continue/break statements within members of local functions nested within
loop and switch statements, by teaching Scope that a function scope never has
a continue/break parent for the purposes of control flow. Remove the hack in
block and lambda expressions which worked around this by pretending that such
expressions were continue/break scopes.

Remove Scope::ControlParent, since it's unused.

In passing, teach default statements to recover properly from a missing ';', and
add a fixit for same to both default and case labels (the latter already
recovered correctly).

llvm-svn: 150776
2012-02-17 01:35:32 +00:00
Richard Smith 5d108606cc PR12012: Fix a regression in r150419 where we would try (and fail) to
zero-initialize class types with virtual bases when constant-evaluating an
initializer.

llvm-svn: 150770
2012-02-17 00:44:16 +00:00
Fariborz Jahanian e7a0c93cd9 objective-c translator. More stuff for modern meta-data.
llvm-svn: 150767
2012-02-17 00:06:14 +00:00
Eric Christopher 4c006e557d Reapply r150631:
"Add a completed/incomplete type difference. This allows us to have
    partial types for contexts and forward decls while allowing us to
    complete types later on for debug purposes.

    This piggy-backs on the metadata replacement and rauw changes
    for temporary nodes and takes advantage of the incremental
    support I added in earlier. This allows us to, if we decide,
    to limit adding methods and variables to structures in order
    to limit the amount of debug information output into a .o file.

    The caching is a bit complicated though so any thoughts on
    untangling that are welcome."

with a fix:

 - Remove all RAUW during type construction by adding stub versions
   of types that we later complete.

and some TODOs:

 - Add an RAUW cache for forward declared types so that we can replace
   them at the end of compilation.
 - Remove the code that updates on completed types because we no
   longer need to have that happen. We emit incomplete types on
   purpose and only want to know when we want to complete them.

llvm-svn: 150752
2012-02-16 22:54:45 +00:00
Eli Friedman b971d49765 Elide copy construction in new expressions. PR11757.
llvm-svn: 150738
2012-02-16 22:45:48 +00:00
Kaelyn Uhrain 7c019177b0 Avoid infinite mutual recursion in DiagnoseInvalidRedeclaration.
Don't try to typo-correct a method redeclaration to declarations not in
the current record as it could lead to infinite recursion if CorrectTypo
finds more than one correction candidate in a parent record.

llvm-svn: 150735
2012-02-16 22:40:59 +00:00
Anna Zaks 33c364b12b [analyzer] MallocChecker: more tests.
llvm-svn: 150734
2012-02-16 22:26:15 +00:00
Anna Zaks 546c49c3b2 [analyzer] Malloc Checker: Clean up bug naming:
- Rename the category "Logic Error" -> "Memory Error".
 - Shorten all the messages.

llvm-svn: 150733
2012-02-16 22:26:12 +00:00
Anna Zaks 9eb7bc82ae [analyzer] Malloc Checker: Make the diagnostic visitor handle the case
of failing realloc. + Minor cleanups.

llvm-svn: 150732
2012-02-16 22:26:07 +00:00
Matt Beaumont-Gay 2150d38a19 Pacify gcc's -Wreturn-type
llvm-svn: 150731
2012-02-16 22:15:50 +00:00
Fariborz Jahanian c41d828053 fix the property list metadata name.
llvm-svn: 150728
2012-02-16 21:57:59 +00:00
Douglas Gregor 6746c5d487 Improve recovery for lambda expressions that have 'mutable' or a
trailing return type but not a '()'. Recover by inserting the
parentheses. Thanks to Xeo on IRC for the example.

llvm-svn: 150727
2012-02-16 21:53:36 +00:00
Fariborz Jahanian 638252fb5a modern objective-c translator: write the root class meta-data.
llvm-svn: 150726
2012-02-16 21:37:05 +00:00
Douglas Gregor a86bc00d3e Lambda closure types are always considered to be like "local" classes,
even if they are not within a function scope. Teach template
instantiation to treat them as such, and make sure that we have a
local instantiation scope when instantiating default arguments and
static data members.

llvm-svn: 150725
2012-02-16 21:36:18 +00:00
Richard Smith 4fa6aec9fe Make sure we still reject static data members in anonymous unions in C++11.
llvm-svn: 150724
2012-02-16 21:23:54 +00:00
Ted Kremenek 2eef6b9e4b Add checker visitation hooks in ExprEngine::Visit() for common no-op expressions. To be used later.
llvm-svn: 150723
2012-02-16 20:56:01 +00:00
Ted Kremenek 35e55fe49f Revert "Move ExplodedNode reclaimation out of ExprEngine and into CoreEngine. Also have it based on adding predecessors/successors, not node allocation. No measurable performance change."
llvm-svn: 150722
2012-02-16 20:48:04 +00:00
Richard Smith 4297375561 C++11 allows unions to have static data members. Remove the corresponding
restriction and add some tests.

llvm-svn: 150721
2012-02-16 20:41:22 +00:00
Ted Kremenek ea8dbdeefd Move ExplodedNode reclaimation out of ExprEngine and into CoreEngine. Also have it based on adding predecessors/successors, not node allocation. No measurable performance change.
llvm-svn: 150720
2012-02-16 20:19:30 +00:00
Ted Kremenek a2aa929e74 Minor cleanup to node data structures in ExplodedGraph. No functionality change.
llvm-svn: 150719
2012-02-16 20:19:25 +00:00
Hans Wennborg 63cf65f85d Tweak the comment on the 'q' length modifier again.
llvm-svn: 150716
2012-02-16 18:58:32 +00:00
Fariborz Jahanian 0a25688b74 modern objc translator: meta-data generation for first
part of class meta-data.

llvm-svn: 150714
2012-02-16 18:54:09 +00:00
Dan Gohman 7537838499 Fix this test to work with and without Asserts mode.
llvm-svn: 150713
2012-02-16 18:51:05 +00:00
Hans Wennborg b328fe3710 Update comment as per Joerg's comment on r150697.
llvm-svn: 150711
2012-02-16 18:19:51 +00:00