Commit Graph

5438 Commits

Author SHA1 Message Date
Douglas Gregor 2ecab75739 Don't perform name lookup into a given declaration context more than once during code completion
llvm-svn: 82234
2009-09-18 18:07:23 +00:00
Douglas Gregor 945e8d9762 For code completion in C++ member access expressions and tag names,
look into the current scope for anything that could start a
nested-names-specifier. These results are ranked worse than any of the
results actually found in the lexical scope.

Perform a little more pruning of the result set, eliminating
constructors, __va_list_tag, and any duplication of declarations in
the result set. For the latter, implemented
NamespaceDecl::getCanonicalDecl.

llvm-svn: 82231
2009-09-18 17:42:29 +00:00
Douglas Gregor 2da11086f3 When gathering results for code completion, only include hidden
results when there is some way to refer to them in the language, such
as with a qualified name in C++.

llvm-svn: 82223
2009-09-18 15:51:54 +00:00
Douglas Gregor f45b0cf389 Implement code completion for tags, e.g., code completion after "enum"
will provide the names of various enumerations currently
visible. Introduced filtering of code-completion results when we build
the result set, so that we can identify just the kinds of declarations
we want.

This implementation is incomplete for C++, since we don't consider
that the token after the tag keyword could start a
nested-name-specifier. 

llvm-svn: 82222
2009-09-18 15:37:17 +00:00
Ted Kremenek e3d209ff77 Revert most of r82198, which was causing a large number of crashes
when running the analyzer on real projects.  We'll keep the change to
AnalysisManager.cpp in r82198 so that -fobjc-gc analyzes code
correctly in both GC and non-GC modes, although this may emit two
diagnostics for each bug in some cases (a better solution will come
later).

llvm-svn: 82201
2009-09-18 07:31:15 +00:00
Ted Kremenek 82f7f9c080 Introduce caching of diagnostics in BugReporter. This provides extra
pruning of diagnostics that may be emitted multiple times.  This is
accomplished by adding FoldingSet profiling support to PathDiagnostic,
and then having BugReporter record what diagnostics have been issued.

This was motived to a serious bug introduced by moving the
'divide-by-zero' checking outside of GRExprEngine into a separate
'Checker' class.  When analyzing code using the '-fobjc-gc' option, a
given function would be analyzed twice, but the second time various
"internal checks" would be disabled to avoid emitting multiple
diagnostics (e.g., "null dereference") for the same issue.  The
problem is that such checks also effect path pruning and don't just
emit diagnostics.  This resulted in an assertion failure involving a
real divide-by-zero in some analyzed code where we would get an
assertion failure in APInt because the 'DivZero' check was disabled
and didn't prune the logic that resulted in the divide-by-zero in the
analyzer.

The implemented solution is somewhat of a hack, and may not perform
extremely well.  This will need to be cleaned up over time.

As a regression test, 'misc-ps.m' has been modified so that its tests
are run using -fobjc-gc to test this diagnostic pruning behavior.

llvm-svn: 82198
2009-09-18 05:37:41 +00:00
Mike Stump 6b574afc3a Fix typo.
llvm-svn: 82170
2009-09-17 21:46:24 +00:00
Douglas Gregor 2436e7116b Initial implementation of a code-completion interface in Clang. In
essence, code completion is triggered by a magic "code completion"
token produced by the lexer [*], which the parser recognizes at
certain points in the grammar. The parser then calls into the Action
object with the appropriate CodeCompletionXXX action.

Sema implements the CodeCompletionXXX callbacks by performing minimal
translation, then forwarding them to a CodeCompletionConsumer
subclass, which uses the results of semantic analysis to provide
code-completion results. At present, only a single, "printing" code
completion consumer is available, for regression testing and
debugging. However, the design is meant to permit other
code-completion consumers.

This initial commit contains two code-completion actions: one for
member access, e.g., "x." or "p->", and one for
nested-name-specifiers, e.g., "std::". More code-completion actions
will follow, along with improved gathering of code-completion results
for the various contexts.

[*] In the current -code-completion-dump testing/debugging mode, the
file is truncated at the completion point and EOF is translated into
"code completion".

llvm-svn: 82166
2009-09-17 21:32:03 +00:00
Daniel Dunbar 33f811e920 Add a bunch of math builtins, #include <cmath> passes now.
llvm-svn: 82126
2009-09-17 05:45:52 +00:00
Daniel Dunbar 07806ca7ab Improve driver error message when only running the preprocessor and an input is
already preprocessed.

--
ddunbar@giles:tmp$ touch t.i
ddunbar@giles:tmp$ gcc -E t.i
ddunbar@giles:tmp$ clang -E t.i
clang: warning: t.i: previously preprocessed input unused when '-E' is present
ddunbar@giles:tmp$ 
--

<rdar://problem/6813375> [driver] driver prints confusing message when running -E on preprocessed file

llvm-svn: 82120
2009-09-17 04:13:26 +00:00
Daniel Dunbar e9fee8a361 Initial support for code generation from .ast files.
- Doesn't actually work yet because only module level asm's get correctly marked as externally visible in the PCH.

 - Other things like 'clang-cc foo.ast -ast-dump' now work, as well.

llvm-svn: 82107
2009-09-17 00:48:13 +00:00
John McCall 11083da4d0 Improved representation and support for friend class templates. Angst about same.
llvm-svn: 82088
2009-09-16 22:47:08 +00:00
Fariborz Jahanian a7fa6beb2e Starting patch to generate more specific API for objc's
GC. Currently, new API will be generated under
clang-cc's -fobjc-newgc-api flag which will eventually
become the default. WIP.

llvm-svn: 82082
2009-09-16 21:37:16 +00:00
Chris Lattner dd890b2b2e fit in 80 cols
llvm-svn: 82073
2009-09-16 20:18:54 +00:00
Anders Carlsson 570af5d426 Improve handling of vector casts in C++.
llvm-svn: 82072
2009-09-16 19:19:43 +00:00
Ted Kremenek 6879beda08 Remove ImplicitBadDivides/ExplicitBadDivides node sets. This checking is now down by a 'Checker' and not build into GRExprEngine.
llvm-svn: 82017
2009-09-16 06:03:39 +00:00
Mike Stump eb963680b5 Chris doesn't want the FIXME.
llvm-svn: 81988
2009-09-16 01:35:21 +00:00
Mike Stump 1855a56f92 Add a FIXME, so the next person don't trip as hard on the landmines.
llvm-svn: 81986
2009-09-16 01:31:09 +00:00
Mike Stump 1d0da3932e Some people don't want to fix their broken code just yet, so turn off
hard error for falling off a noreturn function.

llvm-svn: 81971
2009-09-16 00:39:34 +00:00
Mike Stump e18856dad1 Back to 1.1 we go.
llvm-svn: 81944
2009-09-15 23:04:22 +00:00
Mike Stump 37d0b678b6 Back out for now, as apparently there is some really broken code somewhere.
llvm-svn: 81941
2009-09-15 22:49:27 +00:00
Mike Stump 1f4ec5c4c6 Bump.
llvm-svn: 81929
2009-09-15 22:08:24 +00:00
Steve Naroff 54f22fb1de - clang_getCursor(): Replace asserts with error codes (CXCursor_InvalidFile, CXCursor_NoDeclFound).
- Add predicate clang_isInvalid().
- Implement clang_getCursorFromDecl().

llvm-svn: 81908
2009-09-15 20:25:34 +00:00
Douglas Gregor 4fb9cde8ef When printing an overload candidate that is a function template specialization,
point at the template and print out its template arguments, e.g.,

ambiguous-ovl-print.cpp:5:8: note: candidate function template specialization
      [with T = int]
  void f(T*, long);

llvm-svn: 81907
2009-09-15 20:11:42 +00:00
Fariborz Jahanian 3e6b57e593 Issue good diagnostics when initialization failes due to
ambiguity in type conversion function selection.

llvm-svn: 81898
2009-09-15 19:12:21 +00:00
Fariborz Jahanian c34c179f4b Perform overload resolution when selecting a pointer conversion
function for delete of a class expression and issue
good diagnostic when result is ambiguous.

llvm-svn: 81870
2009-09-15 17:21:47 +00:00
Douglas Gregor be999390eb Implement partial ordering of class template partial specializations
(C++ [temp.class.order]).

llvm-svn: 81866
2009-09-15 16:23:51 +00:00
Anders Carlsson d3bc31f04f Get rid of the CastInfo struct.
llvm-svn: 81839
2009-09-15 05:13:45 +00:00
Anders Carlsson 7cd39e0721 Handle reinterpret_cast between integral types and pointer types.
llvm-svn: 81837
2009-09-15 04:48:33 +00:00
Fariborz Jahanian 19c7328881 Issue a good diagnostics when attempt to select
a type convesion function results in ambiguity.

llvm-svn: 81812
2009-09-15 00:10:11 +00:00
Ted Kremenek 4112969df1 Fix: <rdar://problem/5905851> do not report a leak when post-dominated by a call
to a noreturn or panic function

llvm-svn: 81803
2009-09-14 22:01:32 +00:00
John McCall 27b5c253d8 Skeletal support for friend class templates.
llvm-svn: 81801
2009-09-14 21:59:20 +00:00
Anders Carlsson 0e795ffbb0 For consistency, use "bit-field" instead of "bitfield" in our diagnostics.
llvm-svn: 81797
2009-09-14 21:48:24 +00:00
Douglas Gregor 0ff7d92048 Implement partial ordering of function template specializations
(C++ [temp.func.order]). 

llvm-svn: 81777
2009-09-14 18:39:43 +00:00
Sam Weinig 5be00aae4f Remove duplicate definition of char-subscripts DiagGroup.
llvm-svn: 81775
2009-09-14 17:50:09 +00:00
Sam Weinig 914244e7b0 Add support for -Wchar-subscripts. Fixes PR4801.
llvm-svn: 81747
2009-09-14 01:58:58 +00:00
Daniel Dunbar b4091a9c6a Add TargetInfo::getABI(), and base ARM APCS vs AAPCS choice on that.
llvm-svn: 81735
2009-09-14 00:35:03 +00:00
Daniel Dunbar 4ed7898294 Support -mabi= for clang/ARM.
llvm-svn: 81734
2009-09-14 00:34:46 +00:00
Daniel Dunbar 4e97bc3ee7 Add -target-abi clang-cc option, currently unused.
llvm-svn: 81731
2009-09-14 00:02:12 +00:00
Anders Carlsson 40a90c8754 Fix a bug in getFriendObjectKind where we would clear out all mask bits except IDNS_TagFriend and IDNS_OrdinaryFriend but then check for IDNS_Tag and IDNS_Ordinary.
llvm-svn: 81730
2009-09-13 23:59:13 +00:00
Anders Carlsson 002f2b3eec CXXMethodDecl::isVirtual needs to check the canonical declaration. Fixes PR4878.
llvm-svn: 81715
2009-09-13 21:01:57 +00:00
Eli Friedman 7d45c4884a Add utility to evaluate lvalues which are an offset relative to a stack
location.  Patch by Enea Zaffanella.

llvm-svn: 81672
2009-09-13 10:17:44 +00:00
Douglas Gregor 299d76e901 Rework the way we determine whether an externally visible symbol is
generated for an inline function definition, taking into account C99
and GNU inline/extern inline semantics. This solution is simpler,
cleaner, and fixes PR4536.

llvm-svn: 81670
2009-09-13 07:46:26 +00:00
Fariborz Jahanian edca0bcf48 Removed Context argument from couple of methods which don't
need them.

llvm-svn: 81621
2009-09-12 19:02:34 +00:00
Fariborz Jahanian b394f50ac9 More work toward having an access method for visible
conversion functions.

llvm-svn: 81618
2009-09-12 18:26:03 +00:00
Benjamin Kramer c1330af0b9 SmallVectorize preprocessor's token cache. Testing shows there is almost never
more than one token in the cache.

llvm-svn: 81612
2009-09-12 09:45:28 +00:00
Douglas Gregor 15fc956ca0 Remove unnecessary ASTContext parameter from FunctionDecl::isBuiltinID
llvm-svn: 81590
2009-09-12 00:22:50 +00:00
Douglas Gregor 16618f2157 Remove unnecessary ASTContext parameters from isMain and isExternC
llvm-svn: 81589
2009-09-12 00:17:51 +00:00
Douglas Gregor e2350a3b97 Eliminate FunctionDecl::getBodyIfAvailable
llvm-svn: 81588
2009-09-12 00:08:48 +00:00
Ted Kremenek 7020eae076 Introduce "DefinedOrUnknownSVal" into the SVal class hierarchy, providing a way
to statically type various methods in SValuator/GRState as required either a
defined value or a defined-but-possibly-unknown value. This leads to various
logic cleanups in GRExprEngine, and lets the compiler enforce via type checking
our assumptions about what symbolic values are possibly undefined and what are
not.

Along the way, clean up some of the static analyzer diagnostics regarding the uses of uninitialized values.

llvm-svn: 81579
2009-09-11 22:07:28 +00:00
Fariborz Jahanian b54ccb2782 Patch to build visible conversion function list lazily and make its
first use in calling the conversion function on delete statements.

llvm-svn: 81576
2009-09-11 21:44:33 +00:00
John McCall 2f212b3a72 Alter Action's friend interface to prepare for templated friend declarations and
to stop making promises we can't currently keep.

llvm-svn: 81571
2009-09-11 21:02:39 +00:00
Douglas Gregor 6411b92ee6 Tweak the semantics of FunctionDecl::isOutOfLine to consider an
instantiation of a member function template or member function of a
class template to be out-of-line if the definition of that function
template or member function was defined out-of-line. This ensures that
we get the correct linkage for explicit instantiations of out-of-line
definitions. 

llvm-svn: 81562
2009-09-11 20:15:17 +00:00
Douglas Gregor c732aba9a9 Cleanup and test C++ default arguments. Improvements include:
- Diagnose attempts to add default arguments to templates (or member
    functions of templates) after the initial declaration (DR217).
  - Improve diagnostics when a default argument is redefined. Now, the
    note will always point at the place where the default argument was
    previously defined, rather than pointing to the most recent
    declaration of the function.

llvm-svn: 81548
2009-09-11 18:44:32 +00:00
John McCall 1806c2795b Track a class template specialization's point of instantiation separately
from its location.  Initialize appropriately.

When implicitly creating a declaration of a class template specialization
after encountering the first reference to it, use the pattern class's
location instead of the location of the first reference.

llvm-svn: 81515
2009-09-11 07:25:08 +00:00
John McCall e1f2ec28d8 When stringizing a NamedDecl for a diagnostic, treat the template
specialization types differently.

llvm-svn: 81512
2009-09-11 06:45:03 +00:00
John McCall 7f41d98928 Support elaborated dependent types and diagnose tag mismatches.
llvm-svn: 81504
2009-09-11 04:59:25 +00:00
Zhongxing Xu dc299bc481 Start to add a new transfer function that inlines callee. To be continued.
llvm-svn: 81501
2009-09-11 04:13:42 +00:00
Anders Carlsson 0b209a8632 Instantiate PredefinedExprs correctly. Patch by Sam Weinig!
llvm-svn: 81498
2009-09-11 01:22:35 +00:00
Daniel Dunbar 33a004e9eb Swizzle the target triple based on -mthumb, and update clang-cc to recognize
thumb-foo-bar as an ARM target.

llvm-svn: 81497
2009-09-11 01:14:50 +00:00
Douglas Gregor 73341c4e63 Diagnose VLAs as an error in C++.
Also, treat the GNU __null as an integral constant expression to match
GCC's behavior.

llvm-svn: 81490
2009-09-11 00:18:58 +00:00
Daniel Dunbar 7848592ec6 Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.
llvm-svn: 81471
2009-09-10 23:00:09 +00:00
Fariborz Jahanian 2cde203392 Non fragile ABI for GNU runtime. Patch bu David Chisnall.
llvm-svn: 81462
2009-09-10 21:48:21 +00:00
Douglas Gregor 7f737c0015 When performing unqualified name lookup into a DeclContext, also look into
all of the parent DeclContexts that aren't represented within the
Scope chain. This fixes some name-lookup problems in out-of-line
definitions of members of nested classes.

llvm-svn: 81451
2009-09-10 16:57:35 +00:00
Zhongxing Xu 7e3431b5cf Make AnalysisManager stateless. Now other analyzer components only depends on
local node information.

llvm-svn: 81433
2009-09-10 05:44:00 +00:00
Daniel Dunbar 2ffe029a61 Implement Darwin/ARM behavior for defaulting to -fno-builtin-str{cat,cpy}.
llvm-svn: 81425
2009-09-10 03:37:02 +00:00
Daniel Dunbar 9000c3ff6d Recognize and ignore -Woverloaded-virtual.
llvm-svn: 81419
2009-09-10 01:20:58 +00:00
Daniel Dunbar cb5f2cf694 Fix dependencies for DiagnosticGroups.td.
llvm-svn: 81418
2009-09-10 01:20:50 +00:00
Douglas Gregor 5d3507d39c Improve handling of initialization by constructor, by ensuring that
such initializations properly convert constructor arguments and fill
in default arguments where necessary. This also makes the ownership
model more clear.

llvm-svn: 81394
2009-09-09 23:08:42 +00:00
Daniel Dunbar 1ce81538f1 Change Get{File,Program}Path to return an std::string (instead of a sys::Path).
llvm-svn: 81389
2009-09-09 22:33:00 +00:00
Daniel Dunbar 5f620c1fac StringRefize ArgList construction of ArgStrings.
llvm-svn: 81385
2009-09-09 22:32:26 +00:00
Anders Carlsson e9766d559b If a cast expression needs either a conversion function or a constructor to be called, generate implicit child expressions that call them.
llvm-svn: 81383
2009-09-09 21:33:21 +00:00
Daniel Dunbar e7af341454 Push bound architecture name into TranslateArgs.
llvm-svn: 81366
2009-09-09 18:36:12 +00:00
Daniel Dunbar b5d86bbd76 Push bound architecture name into Compilation::getArgsForToolChain.
llvm-svn: 81365
2009-09-09 18:36:01 +00:00
Mike Stump 11289f4280 Remove tabs, and whitespace cleanups.
llvm-svn: 81346
2009-09-09 15:08:12 +00:00
Mike Stump 030867b97e Remove tab characters.
llvm-svn: 81340
2009-09-09 13:12:01 +00:00
Douglas Gregor 308047d3a5 Initial stab at implement dependent member references to member
templates, e.g.,
  
  x.template get<T>

We can now parse these, represent them within an UnresolvedMemberExpr
expression, then instantiate that expression node in simple cases.

This allows us to stumble through parsing LLVM's Casting.h.

llvm-svn: 81300
2009-09-09 00:23:06 +00:00
Daniel Dunbar 9c3f7c4a4b Validate arguments to -arch.
llvm-svn: 81281
2009-09-08 23:37:30 +00:00
Daniel Dunbar 1ef3f2aa3a Rename HostInfo::getToolChain to HostInfo::CreateToolChain, and don't recreate
the default tool chain when binding the default architecture.

llvm-svn: 81279
2009-09-08 23:37:19 +00:00
Daniel Dunbar 953b8d1f15 Fix ShouldUseClangCompiler to use llvm::Triple.
- -1 FIXME, and fixes 'clang -arch armv4t ...', for example.

llvm-svn: 81276
2009-09-08 23:36:55 +00:00
Douglas Gregor 5b5559b272 Make sure to access APValue's data via a char array (rather than
through an array of void*), so that we don't run afoul of the
strict-aliasing rules in C++ 3.10p15. Unfortunately, GCC 4.4 still
complains about this code.

llvm-svn: 81251
2009-09-08 19:57:33 +00:00
Fariborz Jahanian b17a190186 Fixes a regression in generating objc's GC API
in assiging to c pointer types with a GC'able
attribute.

llvm-svn: 81244
2009-09-08 19:45:47 +00:00
Anders Carlsson 2fb0824197 Vastly improve PredefinedExpr output, both in Sema and CodeGen. Patch by Sam Weinig!
llvm-svn: 81237
2009-09-08 18:24:21 +00:00
John McCall d8fe9af3a2 Support templateids in friend declarations. Fixes bug 4859.
llvm-svn: 81233
2009-09-08 17:47:29 +00:00
Anders Carlsson 6816affaa4 Handle variadic constructors better. Share code between BuildCXXConstructExpr and BuildCXXTemporaryObjectExpr.
llvm-svn: 81181
2009-09-08 01:48:42 +00:00
Anders Carlsson 6d5de59d09 Clean up the CXXConstructExpr constructor, add Arg getters.
llvm-svn: 81178
2009-09-08 01:23:37 +00:00
Anders Carlsson 85ec4ffaf5 Check that the destination type of a static_cast expression is a complete type.
llvm-svn: 81151
2009-09-07 18:25:47 +00:00
Benjamin Kramer 26db6481c5 Replace some instances of std::string with StringRefs.
llvm-svn: 81079
2009-09-05 09:49:39 +00:00
John McCall b2e195a585 Start emitting ElaboratedTypes in C++ mode. Support the effort in various
ways:  remove elab types during desugaring, enhance pretty-printing to allow
tags to be suppressed without suppressing scopes, look through elab types
when associating a typedef name with an anonymous record type.

llvm-svn: 81065
2009-09-05 06:31:47 +00:00
Anders Carlsson 657bad441e Use a separate diagnostic for default function argument expressions.
llvm-svn: 81062
2009-09-05 05:14:19 +00:00
Zhongxing Xu 88f07cd49c Refactor builtin function evaluation code into its own function.
llvm-svn: 81061
2009-09-05 05:00:57 +00:00
Daniel Dunbar dc7f7b7ac3 Add missing include.
llvm-svn: 81059
2009-09-05 00:48:32 +00:00
John McCall fcc33b074b Basic support for representing elaborated type specifiers
directly in the AST.  The current thinking is to create these
only in C++ mode for efficiency.  But for now, they're not being
created at all; patch to follow.

This will let us do things like verify that tags match during
template instantation, as well as signal that an elaborated type
specifier was used for clients that actually care.

Optimally, the TypeLoc hierarchy should be adjusted to carry tag
location information as well.

llvm-svn: 81057
2009-09-05 00:15:47 +00:00
Douglas Gregor 34ec2ef159 Improve the AST representation and semantic analysis for extern
templates. We now distinguish between an explicit instantiation
declaration and an explicit instantiation definition, and know not to
instantiate explicit instantiation declarations. Unfortunately, there
is some remaining confusion w.r.t. instantiation of out-of-line member
function definitions that causes trouble here.
 

llvm-svn: 81053
2009-09-04 22:48:11 +00:00
Mike Stump 35337557af Cleanup.
llvm-svn: 81024
2009-09-04 18:54:10 +00:00
Daniel Dunbar 2b5f6817e0 Tweak darwin::Link::AddLinkArgs.
llvm-svn: 81021
2009-09-04 18:35:41 +00:00
Daniel Dunbar 91dbfd6666 Implement darwin::Link::AddDarwinArch for ARM.
llvm-svn: 81020
2009-09-04 18:35:31 +00:00
Douglas Gregor bddb73fa1d If a destructor is referenced or a pseudo-destructor expression is
formed without a trailing '(', diagnose the error (these expressions
must be immediately called), emit a fix-it hint, and fix the code.

llvm-svn: 81015
2009-09-04 18:29:40 +00:00
Douglas Gregor ad8a336b40 Implement AST, semantics, and CodeGen for C++ pseudo-destructor
expressions, e.g.,

  p->~T()

when p is a pointer to a scalar type. 

We don't currently diagnose errors when pseudo-destructor expressions
are used in any way other than by forming a call.

llvm-svn: 81009
2009-09-04 17:36:40 +00:00
Steve Naroff ef9618b75f Implement accessors clang_getCursorKind(), clang_getCursorDecl().
Implement clang_getCursor() - wired up to Argiris's work.
Implement callbacks for CXCursor_ObjCProtocolRef.

llvm-svn: 81004
2009-09-04 15:44:05 +00:00