Commit Graph

22522 Commits

Author SHA1 Message Date
Daniel Dunbar 5d6c07e0e9 IRgen: Fix case where we might generate an access component with width == 0, if
we have to narrow the access side immediately (can happen with packed,
-fno-bitfield-type-align).

llvm-svn: 102067
2010-04-22 14:56:10 +00:00
Douglas Gregor fceea36501 When checking whether to diagnose an initialized "extern" variable,
look for the const on the base type rather than on the top-level
type. Fixes PR6495 properly.

llvm-svn: 102066
2010-04-22 14:36:26 +00:00
Douglas Gregor 73519609d4 Record nested-name-specifiers of when we create
elaborated-type-specifiers. Patch by Enea Zaffanella!

llvm-svn: 102065
2010-04-22 14:24:35 +00:00
Anders Carlsson 05bf00938b Re-land the patch that merges two diagnostics into one now that it passes self-host :)
llvm-svn: 102050
2010-04-22 05:40:53 +00:00
John McCall 69349f458b Neuter this testcase a little. The way LLVM writes labels for anonymous blocks
makes it impossible to check labels.

llvm-svn: 102048
2010-04-22 03:27:09 +00:00
Daniel Dunbar b219780b72 Suppress compiler warning.
llvm-svn: 102047
2010-04-22 03:17:06 +00:00
Daniel Dunbar fc66e0ed87 IRgen: Set alignment correctly on bit-field accesses.
llvm-svn: 102046
2010-04-22 03:17:04 +00:00
Daniel Dunbar 488f55c271 IRgen: Rewrite bit-field access policy to not access data beyond the bounds of the structure, which we also now verify as part of the post-layout consistency checks.
- This fixes some pedantic bugs with packed structures, as well as major problems with -fno-bitfield-type-align.

 - Fixes PR5591, PR5567, and all known -fno-bitfield-type-align issues.

 - Review appreciated.

llvm-svn: 102045
2010-04-22 02:35:46 +00:00
Daniel Dunbar b6f4b05914 IRgen: Fix CGRecordLayout::print to print the bit-field infos in a consistent order.
llvm-svn: 102044
2010-04-22 02:35:36 +00:00
Daniel Dunbar e448942b76 Revert "Unify two diagnostics into one.", it breaks with an assertion failure on bootstrap.
llvm-svn: 102043
2010-04-22 02:35:33 +00:00
Anders Carlsson 046bb5cc3f Unify two diagnostics into one.
llvm-svn: 102040
2010-04-22 01:17:32 +00:00
John McCall 2e6567ae60 Call PerformCopyInitialization to properly initialize the exception temporary
in a throw expression.  Use EmitAnyExprToMem to emit the throw expression,
which magically elides the final copy-constructor call (which raises a new
strict-compliance bug, but baby steps).  Give __cxa_throw a destructor pointer
if the exception type has a non-trivial destructor.

llvm-svn: 102039
2010-04-22 01:10:34 +00:00
Douglas Gregor 4f4946aaaa Whenever we complain about a failed initialization of a function or
method parameter, provide a note pointing at the parameter itself so
the user does not have to manually look for the function/method being
called and match up parameters to arguments. For example, we now get:

t.c:4:5: warning: incompatible pointer types passing 'long *' to
parameter of
      type 'int *' [-pedantic]
  f(long_ptr);
    ^~~~~~~~
t.c:1:13: note: passing argument to parameter 'x' here
void f(int *x);
            ^

llvm-svn: 102038
2010-04-22 00:20:18 +00:00
Anders Carlsson 3eeb741e6c Remove an unused declaration.
llvm-svn: 102037
2010-04-21 23:55:31 +00:00
Dan Gohman ef78c8ebd7 When computing the alignof value for a vector type, ensure that
the alignment is a power of 2, even in the esoteric case of a
vector element which does not have a power-of-2 sizeof value.

llvm-svn: 102036
2010-04-21 23:32:43 +00:00
Douglas Gregor 6b7f12c039 Switch the initialization of Objective-C message parameters (as occurs
during message sends) over to the new initialization code and away
from the C-only CheckSingleAssignmentConstraints. The enables the use
of C++ types in method parameters and message arguments, as well as
unifying more initialiation code overall.

llvm-svn: 102035
2010-04-21 23:24:10 +00:00
Devang Patel b9ab309650 Encode field accessibility.
llvm-svn: 102033
2010-04-21 23:12:37 +00:00
Douglas Gregor 8d4de67e1d Implement parsing for message sends in Objective-C++. Message sends in
Objective-C++ have a more complex grammar than in Objective-C
(surprise!), because

  (1) The receiver of an instance message can be a qualified name such
  as ::I or identity<I>::type.
  (2) Expressions in C++ can start with a type.

The receiver grammar isn't actually ambiguous; it just takes a bit of
work to parse past the type before deciding whether we have a type or
expression. We do this in two places within the grammar: once for
message sends and once when we're determining whether a []'d clause in
an initializer list is a message send or a C99 designated initializer.

This implementation of Objective-C++ message sends contains one known
extension beyond GCC's implementation, which is to permit a
typename-specifier as the receiver type for a class message, e.g.,

  [typename compute_receiver_type<T>::type method];

Note that the same effect can be achieved in GCC by way of a typedef,
e.g.,

  typedef typename computed_receiver_type<T>::type Computed;
  [Computed method];

so this is merely a convenience.

Note also that message sends still cannot involve dependent types or
values.

llvm-svn: 102031
2010-04-21 22:36:40 +00:00
Douglas Gregor e5798dcb41 Migrate the responsibility for turning the receiver name in an
Objective-C class message expression into a type from the parser
(which was doing so in two places) to Action::getObjCMessageKind()
which, in the case of Sema, reduces the number of name lookups we need
to perform.

llvm-svn: 102026
2010-04-21 20:38:13 +00:00
Anders Carlsson 4bb6e92902 Diagnose access to fields with private constructors.
llvm-svn: 102025
2010-04-21 20:28:29 +00:00
Douglas Gregor 4fdba13072 Eliminate unused code in Sema::ActOnSuperMessage and use early exits
to reduce nesting. No functionality change. 

llvm-svn: 102022
2010-04-21 20:01:04 +00:00
Douglas Gregor 0c78ad9665 Rework the Parser-Sema interaction for Objective-C message
sends. Major changes include:

  - Expanded the interface from two actions (ActOnInstanceMessage,
    ActOnClassMessage), where ActOnClassMessage also handled sends to
    "super" by checking whether the identifier was "super", to three
    actions (ActOnInstanceMessage, ActOnClassMessage,
    ActOnSuperMessage). Code completion has the same changes.
  - The parser now resolves the type to which we are sending a class
    message, so ActOnClassMessage now accepts a TypeTy* (rather than
    an IdentifierInfo *). This opens the door to more interesting
    types (for Objective-C++ support).
  - Split ActOnInstanceMessage and ActOnClassMessage into parser
    action functions (with their original names) and semantic
    functions (BuildInstanceMessage and BuildClassMessage,
    respectively). At present, this split is onyl used by
    ActOnSuperMessage, which decides which kind of super message it
    has and forwards to the appropriate Build*Message. In the future,
    Build*Message will be used by template instantiation.
  - Use getObjCMessageKind() within the disambiguation of Objective-C
    message sends vs. array designators.

Two notes about substandard bits in this patch:
  - There is some redundancy in the code in ParseObjCMessageExpr and
  ParseInitializerWithPotentialDesignator; this will be addressed
  shortly by centralizing the mapping from identifiers to type names
  for the message receiver.
  - There is some #if 0'd code that won't likely ever be used---it
  handles the use of 'super' in methods whose class does not have a
  superclass---but could be used to model GCC's behavior more
  closely. This code will die in my next check-in, but I want it in
  Subversion.

llvm-svn: 102021
2010-04-21 19:57:20 +00:00
Anders Carlsson 43c64af5f0 Keep tack of whether a base in an InitializedEntity is an inherited virtual base or not. Use this in CheckConstructorAccess.
llvm-svn: 102020
2010-04-21 19:52:01 +00:00
Daniel Dunbar 53fac692fa ABI/x86-32 & x86-64: Alignment on 'byval' must be set when when the alignment
exceeds the minimum ABI alignment.

llvm-svn: 102019
2010-04-21 19:49:55 +00:00
Daniel Dunbar f5dbc072a6 Convert test to FileCheck.
llvm-svn: 102018
2010-04-21 19:34:17 +00:00
Daniel Dunbar 14ec60024c Convert test to FileCheck.
llvm-svn: 102016
2010-04-21 19:10:54 +00:00
Daniel Dunbar 557893d2a8 IRgen/x86-32: Factor out getIndirectResult(), to match x86-64 factoring.
llvm-svn: 102015
2010-04-21 19:10:51 +00:00
Daniel Dunbar 2ba67440b6 IRgen: Add checking that the LLVM and AST record layout offsets agree (for
non-bit-fields).

llvm-svn: 102014
2010-04-21 19:10:49 +00:00
Fariborz Jahanian 422cb21862 Improve on source location of diagnostic when default
property synthesis is using a super class ivar.

llvm-svn: 102011
2010-04-21 18:57:20 +00:00
Anders Carlsson a01874bf44 Pass the InitializedEntity to Sema::CheckConstructorAccess and use it to report different diagnostics depending on which entity is being initialized.
llvm-svn: 102010
2010-04-21 18:47:17 +00:00
Anders Carlsson 34f54d55e2 Comment out an assert for now.
llvm-svn: 102007
2010-04-21 18:03:05 +00:00
Fariborz Jahanian 6db6ce4fe4 Fix typo.
llvm-svn: 102005
2010-04-21 17:09:27 +00:00
Benjamin Kramer 3aac9c5edb Add more const to ConstExprIterator.
llvm-svn: 101999
2010-04-21 12:21:20 +00:00
John McCall bf814c79b6 I failed to notice that my last patch wasn't doing as much as it could
because EmitBranch actually clears the insert point.  This version
actually accomplishes what I initially wanted.

llvm-svn: 101998
2010-04-21 11:18:06 +00:00
John McCall e683359fc9 Teach EmitBlock to put the target block immediately after the current block
(if there's a current block).  The chief advantage of doing this is that it
lets us pick blocks (e.g. EH blocks) to push to the end of the function so
that fallthrough happens consistently --- i.e. it gives us the flexibility
of ordering blocks as we please without having to change the order in which
we generate code.  There are standard (?) optimization passes which can do some
of that for us, but better to generate reasonable code to begin with.

llvm-svn: 101997
2010-04-21 10:29:06 +00:00
John McCall 2188696d98 Miscellaneous codegen cleanups. Mostly, don't create new basic blocks
just to save the current insertion state!  This change significantly
simplifies the IR CFG in exceptions code.

llvm-svn: 101996
2010-04-21 10:05:39 +00:00
Zhongxing Xu 105dfb5a72 CXXNamedCastExpr is actually an abstract expression.
llvm-svn: 101994
2010-04-21 06:32:25 +00:00
Douglas Gregor 3ecc665505 Sink the _GNU_SOURCE definition down into the target configuration,
and only define it where we know we need it---Linux and Cygwin. Thanks
to Chris for the prodding.

llvm-svn: 101989
2010-04-21 05:52:38 +00:00
Douglas Gregor 58c65652a8 Reword the note we emit when suppressing template instantiation contexts, per John's advice
llvm-svn: 101988
2010-04-21 05:40:43 +00:00
Zhongxing Xu f29231ece0 The second check point in the old test case was invalid.
llvm-svn: 101983
2010-04-21 02:22:25 +00:00
John McCall 465dfb2705 Use const_cast instead of a C cast. Safer, plus it suppresses a gcc warning.
llvm-svn: 101982
2010-04-21 02:20:33 +00:00
Zhongxing Xu 3affbe6b50 Use the right predecessor.
llvm-svn: 101981
2010-04-21 02:20:10 +00:00
Zhongxing Xu d80755dac2 Add initial support for C++ delete expr.
llvm-svn: 101980
2010-04-21 02:17:31 +00:00
Douglas Gregor 9a12919421 Overhaul the AST representation of Objective-C message send
expressions, to improve source-location information, clarify the
actual receiver of the message, and pave the way for proper C++
support. The ObjCMessageExpr node represents four different kinds of
message sends in a single AST node:

  1) Send to a object instance described by an expression (e.g., [x method:5])
  2) Send to a class described by the class name (e.g., [NSString method:5])
  3) Send to a superclass class (e.g, [super method:5] in class method)
  4) Send to a superclass instance (e.g., [super method:5] in instance method)

Previously these four cases where tangled together. Now, they have
more distinct representations. Specific changes:

  1) Unchanged; the object instance is represented by an Expr*.

  2) Previously stored the ObjCInterfaceDecl* referring to the class
  receiving the message. Now stores a TypeSourceInfo* so that we know
  how the class was spelled. This both maintains typedef information
  and opens the door for more complicated C++ types (e.g., dependent
  types). There was an alternative, unused representation of these
  sends by naming the class via an IdentifierInfo *. In practice, we
  either had an ObjCInterfaceDecl *, from which we would get the
  IdentifierInfo *, or we fell into the case below...

  3) Previously represented by a class message whose IdentifierInfo *
  referred to "super". Sema and CodeGen would use isStr("super") to
  determine if they had a send to super. Now represented as a
  "class super" send, where we have both the location of the "super"
  keyword and the ObjCInterfaceDecl* of the superclass we're
  targetting (statically).

  4) Previously represented by an instance message whose receiver is a
  an ObjCSuperExpr, which Sema and CodeGen would check for via
  isa<ObjCSuperExpr>(). Now represented as an "instance super" send,
  where we have both the location of the "super" keyword and the
  ObjCInterfaceDecl* of the superclass we're targetting
  (statically). Note that ObjCSuperExpr only has one remaining use in
  the AST, which is for "super.prop" references.

The new representation of ObjCMessageExpr is 2 pointers smaller than
the old one, since it combines more storage. It also eliminates a leak
when we loaded message-send expressions from a precompiled header. The
representation also feels much cleaner to me; comments welcome!

This patch attempts to maintain the same semantics we previously had
with Objective-C message sends. In several places, there are massive
changes that boil down to simply replacing a nested-if structure such
as:

  if (message has a receiver expression) {
    // instance message
    if (isa<ObjCSuperExpr>(...)) {
     // send to super
    } else {
     // send to an object
   }
  } else {
    // class message
    if (name->isStr("super")) {
      // class send to super
    } else {
      // send to class
    }
  }

with a switch

  switch (E->getReceiverKind()) {
  case ObjCMessageExpr::SuperInstance: ...
  case ObjCMessageExpr::Instance: ...
  case ObjCMessageExpr::SuperClass: ...
  case ObjCMessageExpr::Class:...
  }

There are quite a few places (particularly in the checkers) where
send-to-super is effectively ignored. I've placed FIXMEs in most of
them, and attempted to address send-to-super in a reasonable way. This
could use some review.

llvm-svn: 101972
2010-04-21 00:45:42 +00:00
Anders Carlsson b722993cff Remove an unused parameter from isImplicitlyDefined.
llvm-svn: 101962
2010-04-20 23:32:58 +00:00
John Thompson 7bc797b0ca Fix comment to reflect recent code change.
llvm-svn: 101960
2010-04-20 23:21:17 +00:00
Ted Kremenek 6d159c1060 Fix USRs for 'extern' variables declaration in functions/method bodies.
Fix USRs for @synthesize.
Add more USR tests.

llvm-svn: 101954
2010-04-20 23:15:40 +00:00
Ted Kremenek 926d86089f Specify linkage for Objective-C declarations.
llvm-svn: 101953
2010-04-20 23:15:35 +00:00
Anders Carlsson cedc0a469f Factor some common code out into a separate function.
llvm-svn: 101952
2010-04-20 23:11:20 +00:00
Fariborz Jahanian acdfa7acfe Fixes a code gen. bug by removing an assert.
It is ok to have c++-ness inside extern "C" 
block. Fixes pr6644.

llvm-svn: 101948
2010-04-20 22:02:31 +00:00
Chris Lattner 0151b7edb7 fix the ?: fixit that ted added to recover properly.
llvm-svn: 101943
2010-04-20 21:33:39 +00:00
Ted Kremenek 15a81e59ca Fix crash on invalid code where a @throw statement is not followed by a ';'
llvm-svn: 101941
2010-04-20 21:21:51 +00:00
Chris Lattner 8f5bc9f0e1 change FullSourceLoc to have a *const* SourceManager&, eliminating
a const_cast.

llvm-svn: 101940
2010-04-20 20:49:23 +00:00
Chris Lattner fb24a3a4ec push some source location information down through the compiler,
into ContentCache::getBuffer.  This allows it to produce 
diagnostics on the broken #include line instead of without a 
location.

llvm-svn: 101939
2010-04-20 20:35:58 +00:00
Fariborz Jahanian 877aaa9706 Patch to support transparent_union types on
objective-c methods. Fixes radar 7875968.

llvm-svn: 101935
2010-04-20 20:28:15 +00:00
Chris Lattner 8fbe98b3b6 enhance sourcemgr to detect various UTF BOM's and emit a fatal error
about it instead of producing tons of garbage from the lexer.

It would be even better for sourcemgr to dynamically transcode (e.g.
from UTF16 -> UTF8).

llvm-svn: 101924
2010-04-20 18:14:03 +00:00
Anders Carlsson 91baecfeb3 Back out r101911 and see if it makes the bots happy.
llvm-svn: 101921
2010-04-20 18:05:10 +00:00
Benjamin Kramer 92b761cf4b Remove dead code.
llvm-svn: 101920
2010-04-20 18:01:57 +00:00
Daniel Dunbar 20b551a443 IRgen: Always use i8 arrays to access union bit-fields. This is ugly, but
matches how we currently handle structs, and this correctly handles
-fno-bitfield-type-align.

llvm-svn: 101918
2010-04-20 17:52:30 +00:00
Chris Lattner 882bdf2a8d remove some extraneous qualifiers.
llvm-svn: 101912
2010-04-20 17:13:14 +00:00
Anders Carlsson 6a0227df49 Fix a bug which triggered the assertion I added yesterday. Basically, when we initialize the vtable pointer for a virtual base, and there was another path from the most derived class to another base with the same class type, we would use the wrong base.
llvm-svn: 101911
2010-04-20 16:22:16 +00:00
Anders Carlsson 53cebd1ea6 Move code to apply a non-virtual and virtual offset out into a separate function.
llvm-svn: 101909
2010-04-20 16:03:35 +00:00
Douglas Gregor abd9e9689a Keep proper source location information for the type in an Objective-C
@encode expression. 

llvm-svn: 101907
2010-04-20 15:39:42 +00:00
Benjamin Kramer 6a2542b629 Tip of the day: save before commit.
llvm-svn: 101896
2010-04-20 11:55:38 +00:00
Benjamin Kramer 25d3d782d2 Fix -Wcast-qual warnings.
llvm-svn: 101895
2010-04-20 11:50:39 +00:00
Douglas Gregor ffed1cb339 Introduce a limit on the depth of the template instantiation backtrace
we will print with each error that occurs during template
instantiation. When the backtrace is longer than that, we will print
N/2 of the innermost backtrace entries and N/2 of the outermost
backtrace entries, then skip the middle entries with a note such as:

  note: suppressed 2 template instantiation contexts; use
  -ftemplate-backtrace-limit=N to change the number of template
  instantiation entries shown

This should eliminate some excessively long backtraces that aren't
providing any value.

llvm-svn: 101882
2010-04-20 07:18:24 +00:00
Zhongxing Xu 52c28fe61a Add test cases.
llvm-svn: 101878
2010-04-20 05:48:57 +00:00
Chris Lattner 9cffdf1331 don't slap noalias attribute on stret result arguments.
This mirror's Dan's patch for llvm-gcc in r97989, and
fixes the miscompilation in PR6525.  There is some contention
over whether this is the right thing to do, but it is the
conservative answer and demonstrably fixes a miscompilation.

llvm-svn: 101877
2010-04-20 05:44:43 +00:00
Zhongxing Xu 23030c9004 Replace code with a method call. No functionality change.
llvm-svn: 101876
2010-04-20 05:40:40 +00:00
Anders Carlsson 652758c3ec Pass the nearest virtual base decl to InitializeVTablePointers. No functionality change right now.
llvm-svn: 101872
2010-04-20 05:22:15 +00:00
Chris Lattner b596ac718e reapply john's patch, he broke mainline again by changing the test.
llvm-svn: 101871
2010-04-20 05:19:10 +00:00
Anders Carlsson 3d4218570a Assert that the path from the derived to the base class in CodeGenFunction::GetAddressOfBaseClass is not ambiguous.
llvm-svn: 101869
2010-04-20 05:07:22 +00:00
John Thompson 359675d036 Altivec vector literal initializer count mismatch error removed.
llvm-svn: 101868
2010-04-20 05:01:46 +00:00
Zhongxing Xu 4d4b8d833e Use GetState() to get the possible cleaned state.
llvm-svn: 101867
2010-04-20 04:53:09 +00:00
Chris Lattner 03499d36b5 grr, lit only hates me, not the rest of the world.
llvm-svn: 101865
2010-04-20 04:33:06 +00:00
Chris Lattner 3da9a2a3a9 revert r101863, whcih is causing Sema/altivec-init.c to fail on a ton
of buildbots with:

error: 'error' diagnostics expected but not seen: 
  Line 9: too few elements in vector initialization (expected 8 elements, have 2)
1 warning and 1 error generated.

llvm-svn: 101864
2010-04-20 04:31:55 +00:00
John Thompson f351b2c2b4 Altivec vector literal initializer count mismatch error removed.
llvm-svn: 101863
2010-04-20 03:58:33 +00:00
Zhongxing Xu 40eb21a827 Improve handling of CXXNewExpr.
llvm-svn: 101862
2010-04-20 03:37:34 +00:00
John McCall 0f55a035cf Restore r101841 without modification. Also mark 'operator delete' as used for
actual delete expressions, not just new expressions.

llvm-svn: 101861
2010-04-20 02:18:25 +00:00
John McCall 44adf26dd0 Revert r101841 and follow-up.
llvm-svn: 101859
2010-04-20 01:42:53 +00:00
Chris Lattner b6410e168c add __builtin_[r]index. Perhaps all LIBBUILTIN's should get
these or something?

llvm-svn: 101858
2010-04-20 01:31:15 +00:00
John McCall 21f8d1d643 Use __SIZE_TYPE__ as suggested by dgregor.
llvm-svn: 101857
2010-04-20 01:26:56 +00:00
John McCall 75b4746e7d Don't bother looking for (or diagnosing problems with) the 'operator delete'
associated with a new expression if -fno-exceptions is set.

llvm-svn: 101841
2010-04-20 00:22:43 +00:00
Douglas Gregor dc35ef9279 Do not diagnose unused-parameter errors in template instantiations. We
will already have done so when the template is declared.

llvm-svn: 101838
2010-04-19 23:56:20 +00:00
Douglas Gregor c4df407604 Keep track of the actual storage specifier written on a variable or
function declaration, since it may end up being changed (e.g.,
"extern" can become "static" if a prior declaration was static). Patch
by Enea Zaffanella and Paolo Bolzoni.

llvm-svn: 101826
2010-04-19 22:54:31 +00:00
Douglas Gregor f4cd8f4ece Only suppress the "extern variable has an initializer" warning when the extern entity being initialized is const.
llvm-svn: 101821
2010-04-19 22:34:40 +00:00
Douglas Gregor c81ca09830 Disable the "'extern' variable has an initializer" warning in C++,
since it makes sense there to have const extern variables. Fixes
PR6495.

llvm-svn: 101818
2010-04-19 21:31:25 +00:00
Daniel Dunbar ccabe48235 AST: Dump ASTRecordLayout objects when they are created with -fdump-record-layouts.
llvm-svn: 101815
2010-04-19 20:44:53 +00:00
Daniel Dunbar 2ea5183b59 IRgen: Kill unused function and move the type match assert to after record dumping.
llvm-svn: 101814
2010-04-19 20:44:47 +00:00
Chris Lattner 72286d6129 add a PPCallback handler for a skipped #include, patch by
Zhanyong Wan!

llvm-svn: 101813
2010-04-19 20:44:31 +00:00
Douglas Gregor ca7136b9ac When normal name lookup to disambiguiate an Objective-C message send
fails to find anything,  perform ivar lookup and, if we find one,
consider this an instance message.

llvm-svn: 101810
2010-04-19 20:09:36 +00:00
Douglas Gregor 26380d493b More tests for Objective-C-related name lookup weirdness. Yes, it's
weird; yes, it's what GCC does. Almost.

llvm-svn: 101803
2010-04-19 19:10:40 +00:00
Eric Christopher 5c6525fbee Add a testcase for PR6501 (too many/too few arguments to a function call).
llvm-svn: 101800
2010-04-19 18:39:43 +00:00
Fariborz Jahanian fd34b0ac84 Check for darwin befoer cheking for version.
(related to radar 7866951).

llvm-svn: 101799
2010-04-19 18:38:31 +00:00
Fariborz Jahanian cf33091659 Make this test darwin10 specific.
llvm-svn: 101797
2010-04-19 18:27:05 +00:00
Eric Christopher ca6638f950 Temporarily XFAIL this test on windows.
llvm-svn: 101796
2010-04-19 18:26:40 +00:00
Eric Christopher 63448c3de2 Remove the argument number from the constant integer diagnostic.
Update all of the testcases accordingly.

llvm-svn: 101795
2010-04-19 18:23:02 +00:00
Fariborz Jahanian 4d55b2d049 Some renaming of methods, fixes typo
(related to PR6769).

llvm-svn: 101794
2010-04-19 18:15:02 +00:00
Douglas Gregor 0b59e80db5 When searching for code-completion and typo-correction candidates,
look from an Objective-C class or category to its implementation, to
pick up synthesized ivars. Fixes a problem reported by David
Chisnall.

llvm-svn: 101792
2010-04-19 18:02:19 +00:00
Fariborz Jahanian dfb3983525 Force clang to produce legacy api for messaging
in for pre-snowleoprd (NeXt runtime). Fixes
radar 7866951

llvm-svn: 101791
2010-04-19 17:53:30 +00:00
Rafael Espindola 47cf5b581a Add comment explaning the use of c99 inline in c++.
llvm-svn: 101787
2010-04-19 16:58:20 +00:00
Dan Gohman 145f3f1e83 Fix -Wcast-qual warnings.
llvm-svn: 101786
2010-04-19 16:39:44 +00:00
Zhongxing Xu 6a479bf281 Move all C++ expression evaluation logic into its own file.
llvm-svn: 101772
2010-04-19 12:51:02 +00:00
Zhongxing Xu b6843f5f35 Analyzer: add support for CXXNewExpr.
llvm-svn: 101771
2010-04-19 11:47:28 +00:00
David Chisnall 44ec555a87 Don't just emit ivar metadata - emit CORRECT ivar metadata. (GNU runtime)
llvm-svn: 101759
2010-04-19 01:37:25 +00:00
David Chisnall 18cf7378de Fix emitting ivar metadata for synthesized ivars and some 64-bit fixes. (GNU runtime)
llvm-svn: 101758
2010-04-19 00:45:34 +00:00
Rafael Espindola 683fe4fc4c If a method is virtual and the class key function is in another file, emit the method as available_externally.
Fixes PR6747

llvm-svn: 101757
2010-04-19 00:44:22 +00:00
Fariborz Jahanian 3fef72f0ba Local static variables must be available module-wise
as they are accessible in static methods in a class
local to the same function. Fixes PR6769.

llvm-svn: 101756
2010-04-18 21:01:23 +00:00
Nuno Lopes 247a138ec6 recommit r101568 to fix PR6766
as a side-effect, remove two FIXMEs now fixed

llvm-svn: 101726
2010-04-18 19:06:43 +00:00
Douglas Gregor 1da2225786 Make sure that we don't visit redeclarations of nested classes while
instantiating class members as part of an explicit
instantiation. Addresses a compilation problem in
Boost.Serialization.

llvm-svn: 101725
2010-04-18 18:11:38 +00:00
Douglas Gregor b74b1038bb C++ [namespace.memdef]p3 only applies when the friend is not named via
a qualified name. We weren't checking for an empty
nested-name-specifier when dealing with friend class templates
(although we were checking in the other places where we deal with this
paragraph). Fixes a Boost.Serialization showstopper.

llvm-svn: 101724
2010-04-18 17:37:40 +00:00
Daniel Dunbar 8387488f14 tests: Don't force triple in x86-builtin-palignr test, this test should be
portable.

llvm-svn: 101719
2010-04-18 15:30:18 +00:00
Benjamin Kramer 98ff7f8730 Bail out early to avoid comparing the internals of two conversion sequences of
different kinds (aka garbage). This happens if we're comparing a standard
conversion sequence to an ambiguous one which have the same KindRank.

Found by valgrind.

llvm-svn: 101717
2010-04-18 12:05:54 +00:00
Douglas Gregor 870f3743e4 When performing reference initialization for the purposes of overload
resolution ([over.ics.ref]), we take some shortcuts required by the
standard that effectively permit binding of a const volatile reference
to an rvalue. We have to treat lightly here to avoid infinite
recursion.

Fixes PR6177.

llvm-svn: 101712
2010-04-18 09:22:00 +00:00
Douglas Gregor f93df19496 Binding a reference to an rvalue is a direct binding in C++0x but not
in C++03.

llvm-svn: 101707
2010-04-18 08:46:23 +00:00
Chandler Carruth aad3007fe5 Fix the access checking of function and function template argument types,
return types, and default arguments. This fixes PR6855 along with several
similar cases where we rejected valid code.

llvm-svn: 101706
2010-04-18 08:23:21 +00:00
Douglas Gregor 30b5277a0a When checking the copy constructor for the optional copy during a
reference binding to an rvalue of reference-compatible type, check
parameters after the first for complete parameter types and build any
required default function arguments. We're effectively simulating the
type-checking for a call without building the call itself.

llvm-svn: 101705
2010-04-18 07:57:34 +00:00
Douglas Gregor c9cd64eee3 In C++98/03, when binding a reference to an rvalue of
reference-compatible type, the implementation is permitted to make a
copy of the rvalue (or many such copies, even). However, even though
we don't make that copy, we are required to check for the presence of
a suitable copy constructor. With this change, we do.

Note that in C++0x we are not allowed to make these copies, so we test
both dialects separately.

Also note the FIXME in one of the C++03 tests, where we are not
instantiating default function arguments for the copy constructor we
pick (but do not call). The fix is obvious; eliminating the infinite
recursion it causes is not. Will address that next.

llvm-svn: 101704
2010-04-18 07:40:54 +00:00
Chandler Carruth 5acc7d0e17 Add testcase that I forgot for r101667 for gnu-keywords.
llvm-svn: 101700
2010-04-18 06:12:13 +00:00
Ted Kremenek 36712b2ac1 Allow the 'ibaction' attribute to be attached to method declarations (and not issue a warning).
llvm-svn: 101699
2010-04-18 04:59:38 +00:00
Douglas Gregor 7566e4ad2c Do not consider explicit constructors when performing a copy to a
temporary object. This is blindingly obvious from reading C++
[over.match.ctor]p1, but somehow I'd missed it and it took DR152 to
educate me. Adjust one test that was relying on this non-standard
behavior.

llvm-svn: 101688
2010-04-18 02:16:12 +00:00
Anders Carlsson d5f27b0583 Simplify wide bit-field layout in CGRecordLayoutBuilder, and also fix a bug where assigning to a bit-field member would overwrite other parts of the struct.
llvm-svn: 101681
2010-04-17 22:54:57 +00:00
Douglas Gregor 5ab1165531 Improve our handling of user-defined conversions as part of overload
resolution. There are two sources of problems involving user-defined
conversions that this change eliminates, along with providing simpler
interfaces for checking implicit conversions:

  - It eliminates a case of infinite recursion found in Boost.

  - It eliminates the search for the constructor needed to copy a temporary
    generated by an implicit conversion from overload
    resolution. Overload resolution assumes that, if it gets a value
    of the parameter's class type (or a derived class thereof), there
    is a way to copy if... even if there isn't. We now model this
    properly.

llvm-svn: 101680
2010-04-17 22:01:05 +00:00
Anders Carlsson 8345a70c67 Fix an assert when assigning a boolean value to a bitfield of type _Bool.
llvm-svn: 101678
2010-04-17 21:52:22 +00:00
Anders Carlsson 2295f13bb0 Unnamed bit-fields in a union should be laid out with a type that doesn't affect alignment.
llvm-svn: 101673
2010-04-17 21:04:52 +00:00
Anders Carlsson 1de2f5710b Factor union field layout code out into a separate function. No functionality change.
llvm-svn: 101671
2010-04-17 20:49:27 +00:00
Anders Carlsson aad5fa85d0 If a wide bit-field is inside a union its offset should always be 0.
llvm-svn: 101668
2010-04-17 20:21:41 +00:00
Chandler Carruth e03aa55bfd Add support for '-fgnu-keywords' and '-fasm' to Clang's driver. They are not
implemented precisely the same as GCC, but the distinction GCC makes isn't
useful to represent. This allows parsing code which uses GCC-specific keywords
('asm', etc.) without parsing in a fully GNU mode.

llvm-svn: 101667
2010-04-17 20:17:31 +00:00
Anders Carlsson 11e5140db9 Vtable -> VTable renames across the board.
llvm-svn: 101666
2010-04-17 20:15:18 +00:00
Chandler Carruth 13bca6cd5a Prevent accidental in-source builds with CMake, and detect when there are
generated files from a previous in-source builds.

llvm-svn: 101665
2010-04-17 20:12:02 +00:00
Chris Lattner a299f2c872 fix integrated assembler with i386 objc code.
llvm-svn: 101660
2010-04-17 18:26:20 +00:00
Anders Carlsson c6db5ab8b2 Fix a bug where we would sometimes incorrectly mark an vtable function as unused.
llvm-svn: 101643
2010-04-17 17:24:33 +00:00
Benjamin Kramer 95c7c427aa Add printName to DeclarationName which prints the human-readable name on a
raw_ostream. Use it in getAsString and NamedDecl's raw_ostream operator.

llvm-svn: 101633
2010-04-17 09:56:45 +00:00
Benjamin Kramer b11416d061 Add raw_ostream operators to NamedDecl for convenience. Switch over all users of getNameAsString on a stream.
The next step is to print the name directly into the stream, avoiding a temporary std::string copy.

llvm-svn: 101632
2010-04-17 09:33:03 +00:00
Chris Lattner b714a4b4a0 revert r101568, which miscompiles this testcase, distilled from ldecod:
void exit_picture()
{
  char yuv_types[4][6]= {"4:0:0","4:2:0","4:2:2","4:4:4"};
  foo(yuv_types);
}

llvm-svn: 101623
2010-04-17 06:53:44 +00:00
Daniel Dunbar 88534f4201 Driver: Add missing claim() for -mllvm options.
llvm-svn: 101618
2010-04-17 06:10:00 +00:00
Eric Christopher 0dd32fe068 New test to verify that we see constant integers here.
llvm-svn: 101611
2010-04-17 02:36:08 +00:00
Eric Christopher 8d0c621ca6 Consolidate most of the integer constant expression builtin requirement
checking into a single function and use that throughout. Remove some
now unnecessary diagnostics and update tests with now more accurate
diagnostics.

llvm-svn: 101610
2010-04-17 02:26:23 +00:00
Ted Kremenek 6542feb92c Wrap 'data' key in quotes.
llvm-svn: 101594
2010-04-17 00:37:35 +00:00
Ted Kremenek 9e9dd5c535 Make script actually work.
llvm-svn: 101591
2010-04-17 00:33:24 +00:00
Ted Kremenek bfd5a75b1c Log code completion data in json format.
llvm-svn: 101587
2010-04-17 00:21:44 +00:00
Ted Kremenek cab334cc90 Send code completion data in json format.
llvm-svn: 101586
2010-04-17 00:21:42 +00:00
Ted Kremenek 551c178efc Remove unneeded assertion and don't return a null CXString.
llvm-svn: 101585
2010-04-17 00:21:38 +00:00
Chris Lattner 1cf5bdd03d emit warn_char_constant_too_large at most once per literal, fixing PR6852
llvm-svn: 101580
2010-04-16 23:44:05 +00:00
Chris Lattner 4ebae65d6a make our existing "switch on bool" warning work for C. Since
the result of comparisons are 'int' in C, it doesn't work to
test just the result type of the expression.

llvm-svn: 101576
2010-04-16 23:34:13 +00:00
Douglas Gregor 24f27696db If a non-noreturn virtual member function is guaranteed not to return,
do *not* suggest that the function could be attribute 'noreturn';
overridden functions may end up returning.

llvm-svn: 101572
2010-04-16 23:28:44 +00:00
Douglas Gregor 19175ffb67 Switch Sema::FindCompositePointerType() over to InitializationSequence.
This is the last of the uses of TryImplicitConversion outside of
overload resolution and InitializationSequence itself.

llvm-svn: 101569
2010-04-16 23:20:25 +00:00
Nuno Lopes 74b595256a fix PR6766: codegen of var initialized with wide char
llvm-svn: 101568
2010-04-16 23:19:41 +00:00
Douglas Gregor ae4b5df817 Move Sema::PerformImplicitConversion over to where Sema::TryImplicitConversion is, for my own sanity. No functionality change
llvm-svn: 101554
2010-04-16 22:27:05 +00:00
Douglas Gregor a425392cdf Make Sema::BuildCXXCastArgument static, since it now only has one caller. No functionality change
llvm-svn: 101550
2010-04-16 22:17:36 +00:00
Douglas Gregor b33eed0ced Collapse the three separate initialization paths in
TryStaticImplicitCast (for references, class types, and everything
else, respectively) into a single invocation of
InitializationSequence.

One of the paths (for class types) was the only client of
Sema::TryInitializationByConstructor, which I have eliminated. This
also simplified the interface for much of the cast-checking logic,
eliminating yet more code.

I've kept the representation of C++ functional casts with <> 1
arguments the same, despite the fact that I hate it. That fix will
come soon. To satisfy my paranoia, I've bootstrapped + tested Clang
with these changes.

llvm-svn: 101549
2010-04-16 22:09:46 +00:00
Ted Kremenek 7afa85b8fa Rework USR generation for symbols with no linkage. Many of the USRs are now shortened,
and we now include the file name that declares the symbol with no linkage in the USR.
USRs for such symbols are generated only in restructed cases, e.g., anonymous enum declarations,
typedefs, etc.

llvm-svn: 101542
2010-04-16 21:31:52 +00:00
Nuno Lopes 1c5c30fdd3 add another test for the undef patch just for to have peace of mind :)
this follows from C99 6.7.8p10: if it is a union, the first named member is initialized

llvm-svn: 101539
2010-04-16 21:19:39 +00:00
Chris Lattner 3cff64ab58 fix a bogus assertion exposed by a recent change: packing the
struct may cause it to shrink more than one byte.  Before
my recent changes we compiled the new test into:

%0 = type { [6 x i8] }
@x = global %0 { [6 x i8] undef }, align 2        ; <%0*> [#uses=0]

which is obviously bogus.  Now we compile it into:

%0 = type <{ i32, i8, i8 }>
@x = global %0 zeroinitializer, align 2           ; <%0*> [#uses=0]

Where the last byte only is tail padding.

llvm-svn: 101536
2010-04-16 21:02:32 +00:00
Nuno Lopes 5863c999e7 emit padding as undef values, take 2
merge also a few tests I had here for this feature, and FileCheck'ize one file

llvm-svn: 101535
2010-04-16 20:56:35 +00:00
Douglas Gregor 5c8ffab9fb Switch the checking of implicit casts for static_cast, C-style, and
functional casts over to InitializationSequence, eliminating a caller
of Sema::TryImplicitConversion. We also get access and ambiguity
checking "for free".

More cleanups to come in this routine.

llvm-svn: 101526
2010-04-16 19:30:02 +00:00
Nick Lewycky 40884c0520 Add a write(raw_ostream&) method to RewriteBuffer. This uses an inefficient
implementation today but is the right place if we want to make it faster some
day.

llvm-svn: 101521
2010-04-16 18:49:45 +00:00
Chris Lattner 4dcc6ddb43 allow mapping fatal errors to errors.
llvm-svn: 101516
2010-04-16 18:39:52 +00:00
Douglas Gregor e81335c85b Kill ForceRValue once and for all
llvm-svn: 101502
2010-04-16 18:00:29 +00:00
Ted Kremenek ef55dd17ec Static analyzer: Don't crash when casting a symbolic region address to a float. Fixes PR 6854.
llvm-svn: 101499
2010-04-16 17:54:33 +00:00
Douglas Gregor dcd27fff43 Eliminate the ForceRValue parameter from TryCopyInitialization.
llvm-svn: 101498
2010-04-16 17:53:55 +00:00
Douglas Gregor cb13cfc878 Move Sema::TryCopyInitialization into a static function in
SemaOverload.cpp; no functionality change.

llvm-svn: 101497
2010-04-16 17:51:22 +00:00
Douglas Gregor adc7a704d2 Eliminate ForceRValue parameters from reference binding. Did I mention
that we aren't using ForceRValue any more? 

llvm-svn: 101496
2010-04-16 17:45:54 +00:00
Benjamin Kramer 659d7fc003 Silence warning.
llvm-svn: 101495
2010-04-16 17:43:15 +00:00
Douglas Gregor b05275ac47 Eliminate the ForceRValue parameter to Sema::AddOverloadCandidate
llvm-svn: 101494
2010-04-16 17:41:49 +00:00
Douglas Gregor f1e4669232 Eliminate the ForceRValue parameter from most of Sema's Add*Candidate
functions.

llvm-svn: 101492
2010-04-16 17:33:27 +00:00
Douglas Gregor 7b23e41774 Eliminate the ForceRValue parameter from Sema::IsUserDefinedConversion. It's not the way we're going to handle this.
llvm-svn: 101483
2010-04-16 17:25:05 +00:00
Douglas Gregor 73b0cd72ff Eliminate the default value for the UserCast parameter of Sema::IsUserDefinedConversion. No functionality change
llvm-svn: 101482
2010-04-16 17:21:50 +00:00
Douglas Gregor f149520464 Eliminate the Elidable parameter to PerformImplicitConversion; we
don't need it.

llvm-svn: 101481
2010-04-16 17:16:43 +00:00
Dan Gohman 6e8427e066 Remove this hard-coded buffer size. In some basic experiments preprocessing
large files, this doesn't seem significantly better than just letting
raw_ostream pick a buffer size.

This code predates raw-ostream's automatic buffer sizing; in fact, it
was introduced as part of the code which would eventually become
raw_ostream.

llvm-svn: 101473
2010-04-16 16:28:05 +00:00
Anders Carlsson be6f3181dd Make CGRecordLayoutBuilder deal with wide bit-fields. Will land tests shortly (Daniel, please review).
llvm-svn: 101472
2010-04-16 16:23:02 +00:00
Anders Carlsson d9abbe56a5 Remove printfs.
llvm-svn: 101470
2010-04-16 15:59:41 +00:00
Anders Carlsson 5723516ce9 More work on wide bit-fields, WIP.
llvm-svn: 101467
2010-04-16 15:57:11 +00:00
Anders Carlsson d5635feb1a Start working on handling wide bitfields in C++
llvm-svn: 101464
2010-04-16 15:16:32 +00:00
Anders Carlsson 5efc56e36b Rename the ASTContext member 'Context'.
llvm-svn: 101462
2010-04-16 15:07:51 +00:00
Douglas Gregor d2b896ab69 Only predefine the macro _GNU_SOURCE in C++ mode when we're on a
platform that typically uses glibc. Fixes a Boost.Thread compilation
failure.

llvm-svn: 101450
2010-04-16 06:31:05 +00:00
Chris Lattner 79bf976518 tidy up
llvm-svn: 101447
2010-04-16 06:12:51 +00:00
Eric Christopher 2a5aafff30 Expand the argument diagnostics for too many arguments and give
both number seen and number expected.

Finishes fixing PR6501.

llvm-svn: 101442
2010-04-16 04:56:46 +00:00
Eric Christopher abf1e18e32 Expand argument diagnostic for too few arguments to give the number
of arguments both seen and expected.

Fixes PR6501.

llvm-svn: 101441
2010-04-16 04:48:22 +00:00
Dan Gohman 314ca58a91 Convert libCIndex to use the new native EXPORTED_SYMBOL_FILE mechanism.
libCIndex also has a CMakeLists.txt file which has its own code for using
the exports file. To preserve existing functionality, create a separate
darwin-specific exports file for use by this CMakeLists.txt code.

llvm-svn: 101440
2010-04-16 04:45:02 +00:00
Douglas Gregor aef0022925 Fix a bug in caret-line-pruning logic that only happens when we have a
source line wider than the terminal where the associated fix-it line
is longer than the caret line. Previously, we would crash in this
case, which was rather unfortunate. Fixes <rdar://problem/7856226>.

llvm-svn: 101426
2010-04-16 00:23:51 +00:00
Douglas Gregor b8eaf2944b Audit uses of Sema::LookupSingleName for those lookups that are
intended for redeclarations, fixing those that need it. Fixes PR6831.

This uncovered an issue where the C++ type-specifier-seq parsing logic
would try to perform name lookup on an identifier after it already had
a type-specifier, which could also lead to spurious ambiguity errors
(as in PR6831, but with a different test case).

llvm-svn: 101419
2010-04-15 23:40:53 +00:00
Douglas Gregor b2ccf010fb Feed proper source-location information into Sema::LookupSingleResult,
in case it ends up doing something that might trigger diagnostics
(template instantiation, ambiguity reporting, access
reporting). Noticed while working on PR6831.

llvm-svn: 101412
2010-04-15 22:33:43 +00:00
Ted Kremenek a96a8eebbb Better support USRs for anonymous enums, structs, by including the location where
the tag was declared.  WIP.

llvm-svn: 101403
2010-04-15 21:51:13 +00:00
Ted Kremenek 1a596562ed Specify temporary file for -emit-llvm output in test case so that we don't deposit the file
in the original source directory.

llvm-svn: 101402
2010-04-15 21:11:33 +00:00
Ted Kremenek 9833d399ce Do not generate USRs for declarations with 'no linkage' except for enums, structs, typedefs.
Those still need work to disambiguate them across translation units.

llvm-svn: 101401
2010-04-15 21:04:25 +00:00
Anders Carlsson 7a4a25de1e Improve the bit-field too wide error message.
llvm-svn: 101384
2010-04-15 18:47:32 +00:00
Douglas Gregor e8154339f4 Diagnose attempts to throw an abstract class type.
llvm-svn: 101381
2010-04-15 18:05:39 +00:00
Ted Kremenek 8db54ff1de Fix PR 6844, a regression caused by the introduction of llvm_unreachable for the default
case in GRExprEngine::Visit (in r101129).  Instead, enumerate all Stmt cases and have
no 'default' case in the switch statement.  When we encounter a Stmt we don't handle,
we should explicitly add it to the switch statement.

llvm-svn: 101378
2010-04-15 17:33:31 +00:00
Anders Carlsson ea7b18298e Split adding the primary virtual base offsets out into a separate pass. This fixes a bug where we would lay out virtual bases in the wrong order.
llvm-svn: 101373
2010-04-15 16:12:58 +00:00
Douglas Gregor c1cf814c8b Fix a few cases where enum constant handling was using
ASTContext::getTypeSize() rather than ASTContext::getIntWidth() for
the width of an integral type. The former includes padding for bools
(to the target's size) while the latter does not, so we woud end up
zero-extending bools to the target width when we shouldn't. Fixes a
crash-on-valid in the included test.

llvm-svn: 101372
2010-04-15 15:53:31 +00:00
Daniel Dunbar 9302f60606 clang -cc1: Add a -fno-bitfield-type-align option, for my own testing purposes.
llvm-svn: 101370
2010-04-15 15:06:22 +00:00
Daniel Dunbar 1da6511b99 Tweak spelling (Bitfield -> BitField)
llvm-svn: 101369
2010-04-15 15:06:18 +00:00
Nick Lewycky a1e20de908 Teach -fixit to modify all of its inputs instead of just the main file, unless
-fixit-at specified a particular fixit to fix, or the -o flag was used.

llvm-svn: 101359
2010-04-15 06:46:58 +00:00
Ted Kremenek 72ac9505f0 Include sender address in completion log.
llvm-svn: 101358
2010-04-15 06:32:15 +00:00
Daniel Dunbar 3e0cac6f20 Tidy up comment.
llvm-svn: 101357
2010-04-15 06:18:42 +00:00
Daniel Dunbar 3d9289c736 Add TargetInfo::useBitfieldTypeAlignment().
- Used to determine whether the alignment of the type in a bit-field is
   respected when laying out structures. The default is true, targets can
   override this as needed.

 - This is designed to correspond to the PCC_BITFIELD_TYPE_MATTERS macro in
   gcc. The AST/Sema implementation only affects one line, unless I have
   forgotten something. I'd appreciate further review.

 - IRgen still needs to be updated to fully support this (which is effectively
   PR5591).

llvm-svn: 101356
2010-04-15 06:18:39 +00:00
Daniel Dunbar 76fa840d09 Driver/Frontend: Add support for -mllvm, which forwards options to the LLVM option parser.
- Note that this is a behavior change, previously -mllvm at the driver level forwarded to clang -cc1. The driver does a little magic to make sure that '-mllvm -disable-llvm-optzns' works correctly, but other users will need to be updated to use -Xclang.

llvm-svn: 101354
2010-04-15 06:09:03 +00:00
Daniel Dunbar 9c78d63fbc IRgen: Change CGBitFieldInfo to take the AccessInfo as constructor arguments, it is now an immutable object.
Also, add some checking of various invariants that should hold on the CGBitFieldInfo access.

llvm-svn: 101345
2010-04-15 05:09:32 +00:00
Daniel Dunbar bb13845c5f IRgen: Eliminate now unused fields from CGBitFieldInfo.
llvm-svn: 101344
2010-04-15 05:09:28 +00:00
Daniel Dunbar 67aba79b74 IRgen: (Reapply 101222, with fixes) Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.
- Sadly, this doesn't seem to give any .ll size win so far. It is possible to make this routine significantly smarter & avoid various shifting, masking, and zext/sext, but I'm not really convinced it is worth it. It is tricky, and this is really instcombine's job.

 - No intended functionality change; the test case is just to increase coverage & serves as a demo file, it worked before this commit.

The new fixes from r101222 are:

 1. The shift to the target position needs to occur after the value is extended to the correct size. This broke Clang bootstrap, among other things no doubt.

 2. Swap the order of arguments to OR, to get a tad more constant folding.

llvm-svn: 101339
2010-04-15 03:47:33 +00:00
Eric Christopher 1bbc7086ff Rewrite handling of 64-bit palignr intrinsics to be vector shuffles.
Stop multiplying constant by 8 accordingly in the header and change
intrinsic definition for what types we expect.

Add to existing palignr test to check that we're emitting the correct things.

llvm-svn: 101332
2010-04-15 01:43:08 +00:00
Ted Kremenek c9b748e74f Teach ASTVector::append() about the case where 'NumInputs' is 0. This hopefully fixes
a crash in InitListExpr's ctor.

llvm-svn: 101328
2010-04-15 01:14:12 +00:00
Ted Kremenek ef0ada67f5 Add simple python server for recording code completion timings.
llvm-svn: 101327
2010-04-15 01:02:31 +00:00
Ted Kremenek 9e0cf0978c Add optional timing logging for code completion results. This causes a UDP packet
containing the time taken for the code completion to be sent to a designated server
(which is specified using a compile-time -D flag).

llvm-svn: 101326
2010-04-15 01:02:28 +00:00
Douglas Gregor 454a5b65d4 Warn about non-aggregate classes with no user-declared constructors
that have reference or const scalar members, since those members can
never be initializer or modified. Fixes <rdar://problem/7804350>.

llvm-svn: 101316
2010-04-15 00:00:53 +00:00
Douglas Gregor 064fdb2fe8 Always diagnose and complain about problems in
ResolveAddressOfOverloadedFunction when asked to complain. Previously,
we had some weird handshake where ResolveAddressOfOverloadedFunction
expected its caller to handle some of the diagnostics but not others,
and yet there was no way for the caller to know which case we were
in. Eliminate this madness, fixing <rdar://problem/7765884>.

llvm-svn: 101312
2010-04-14 23:11:21 +00:00
Alexis Hunt 1deb972b55 Fix 80-cols violtaions
llvm-svn: 101311
2010-04-14 23:07:37 +00:00
Douglas Gregor 2d2d90750c Once we've emitted a fatal diagnostic, keep counting errors but with a
separate count of "suppressed" errors. This way, semantic analysis
bits that depend on the error count to determine whether problems
occured (e.g., some template argument deduction failures, jump-scope
checking) will not get confused.

The actual problem here is that a missing #include (which is a fatal
error) could cause the jump-scope checker to run on invalid code,
which it is not prepared to do. Trivial fix for both
<rdar://problem/7775941> and <rdar://problem/7775709>.

llvm-svn: 101297
2010-04-14 22:19:45 +00:00
Ted Kremenek ee457516e6 Make CXLanguage_Invalid the first enum value (with '0' as its value) in CXLanguageKind.
llvm-svn: 101287
2010-04-14 20:58:32 +00:00
Fariborz Jahanian b5795c01c4 Fix a -pedantic spurious warning involving @dynamic.
llvm-svn: 101284
2010-04-14 20:52:42 +00:00
Chris Lattner dd6697b4fa improve altivec c++ support by adding casts, patch by
Anton Yartsev!

llvm-svn: 101281
2010-04-14 20:35:39 +00:00
Douglas Gregor 2fb18b746f Thread a Scope pointer into BuildRecoveryCallExpr to help typo
correction find names when a call failed. Fixes
<rdar://problem/7853795>.

llvm-svn: 101278
2010-04-14 20:27:54 +00:00
Douglas Gregor 280e1ee0ae Teach typo correction about various language keywords. We can't
generally recover from typos in keywords (since we would effectively
have to mangle the token stream). However, there are still benefits to
typo-correcting with keywords:
  - We don't make stupid suggestions when the user typed something
  that is similar to a keyword. 
  - We can suggest the keyword in a diagnostic (did you mean
  "static_cast"?), even if we can't recover and therefore don't have
  a fix-it.

llvm-svn: 101274
2010-04-14 20:04:41 +00:00
Douglas Gregor fd0e2e31be Return the corrected DeclarationName from Sema::CorrectTypo rather
than just a bool indicating that correction occurred. No actual
functionality change (it's still always used like a bool), but this
refactoring will be used to support typo correction to keywords.

llvm-svn: 101259
2010-04-14 17:09:22 +00:00
Daniel Dunbar d51c1a6e09 IRgen/NeXT: Simplify to use AST record layout for getting offsets instead of the
IRgen record layout, which this code doesn't need to depend on.

llvm-svn: 101257
2010-04-14 17:02:21 +00:00
Douglas Gregor 2bf2d3d016 When diagnosing suspicious precedence or assignments, move the fix-it
that adds parentheses from the main diagnostic down to a new
note. This way, when the fix-it represents a choice between two
options, each of the options is associted with a note. There is no
default option in such cases. For example:

/Users/dgregor/t.c:2:9: warning: & has lower precedence than ==; ==
will be
      evaluated first [-Wparentheses]
  if (x & y == 0) {
        ^~~~~~~~
/Users/dgregor/t.c:2:9: note: place parentheses around the &
expression to
      evaluate it first
  if (x & y == 0) {
        ^
      (    )
/Users/dgregor/t.c:2:9: note: place parentheses around the ==
expression to
      silence this warning
  if (x & y == 0) {
        ^
          (     )

llvm-svn: 101249
2010-04-14 16:09:52 +00:00
Zhongxing Xu 5eb08f79fc Move GRStmtNodeBuilder::MakeNode() out of line. No functionality change.
llvm-svn: 101239
2010-04-14 06:35:09 +00:00
Zhongxing Xu 3fd05096ce Add support for CXXBoolLiteralExpr.
llvm-svn: 101238
2010-04-14 06:29:29 +00:00
Zhongxing Xu b5e94ac97d Use direct assignment instead of user defined conversion.
llvm-svn: 101236
2010-04-14 05:50:04 +00:00
Daniel Dunbar 91ea6ac3e9 Speculatively revert "IRgen: Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.", I think it might be breaking bootstrap.
llvm-svn: 101235
2010-04-14 05:48:35 +00:00
Chris Lattner c745cec17c Improve line marker directive locations, patch by Jordy Rose
llvm-svn: 101226
2010-04-14 04:28:50 +00:00
Chris Lattner 851002d42e add builtin for __builtin_vsprintf, patch by Paul Davey
llvm-svn: 101224
2010-04-14 04:25:45 +00:00
Daniel Dunbar 230e1541b3 IRgen: Move EmitStoreThroughBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.
- Sadly, this doesn't seem to give any .ll size win so far. It is possible to make this routine significantly smarter & avoid various shifting, masking, and zext/sext, but I'm not really convinced it is worth it. It is tricky, and this is really instcombine's job.

 - No intended functionality change; the test case is just to increase coverage & serves as a demo file, it worked before this commit.

llvm-svn: 101222
2010-04-14 04:08:03 +00:00
Daniel Dunbar b2b40a479d IRgen: Tweak CGBitFieldInfo doxyments & add an accessor.
llvm-svn: 101221
2010-04-14 04:07:59 +00:00
Chris Lattner 0384e63501 make the token paste avoidance logic turn "..." into ".. ." instead of ". . ."
when avoiding paste.  Patch by David Peixotto!

llvm-svn: 101218
2010-04-14 03:57:19 +00:00
Chris Lattner dad4062b4d implement altivec.h and a bunch of support code, patch by Anton Yartsev!
llvm-svn: 101215
2010-04-14 03:54:58 +00:00
Chris Lattner 76fe8cb0b8 remove some obsolete super-handling code that I forgot to zap.
llvm-svn: 101212
2010-04-14 03:16:52 +00:00
Douglas Gregor 8aa4ebf0bc Implement typo correction for Objective-C message sends when the
receiver is a mis-typed class name. Previously, we would give a non-specific
typo-correction diagnostic from the expression-parsing code, but there
was no fix-it because it was too late to recover. Now, we give a nice
diagnostic

honk.m:6:4: error: unknown receiver 'Hnk'; did you mean 'Honk'?
  [Hnk method];
   ^~~
   Honk
honk.m:1:1: note: 'Honk' declared here
@interface Honk
^

which includes a fix-it.

We still need to recover better from mis-typing "super".

llvm-svn: 101211
2010-04-14 02:46:37 +00:00
Douglas Gregor a148a1d40e Introduce a parsing action to distinguish between class, instance, and
super message sends in Objective-C. No actual functionality change
here, but it provides a hook so that Sema can typo-correct the
receiver in some cases.

llvm-svn: 101207
2010-04-14 02:22:16 +00:00
John McCall b723860aac Mark a function declaration invalid if any of its parameter declarations
are invalid.  Prevents a crash-on-invalid during template instantiation.
I... really don't understand how this wasn't already present.

llvm-svn: 101203
2010-04-14 01:27:20 +00:00
John McCall b7c5c278bf Parse friend template ids as types instead of ending up in
ActOnClassTemplateSpecialization and being very confused.
Fixes PR6514 (for non-templated-scope friends).

llvm-svn: 101198
2010-04-14 00:24:33 +00:00
Fariborz Jahanian 9ffd706bd4 Add encoding of reference types like gcc does for objc methods and
blocks. Fixes PR6468.

llvm-svn: 101196
2010-04-13 23:45:47 +00:00
Ted Kremenek ac034616f1 Use ASTVector instead of std::vector for the Exprs in InitListExpr. Performance
measurements of '-fsyntax-only' on combine.c (403.gcc) shows no real performance
change, but now the vector isn't leaked.

llvm-svn: 101195
2010-04-13 23:39:13 +00:00
Ted Kremenek a98e8aa15d Introduce ASTVector, which is a std::vector-like class that allocates all memory
using the allocator associated with an ASTContext.  This is largely copy-and-paste
from SmallVector, and should be refactored one day.

llvm-svn: 101194
2010-04-13 23:39:09 +00:00
Ted Kremenek 225b8e39f1 Add cursor kind for C++ methods.
llvm-svn: 101193
2010-04-13 23:39:06 +00:00
Daniel Dunbar 3447a02d5f IRgen: Move EmitLoadOfBitfieldLValue to use new CGBitfieldInfo::AccessInfo decomposition, instead of computing the access policy itself.
- This lets the method focus slightly more on emitting clean IR to honor the policy which has been selected. On 403.gcc's combine.c, x86_64, -O0, this reduces the number of lines in the .ll file (~= # of instructions) by 2.5%.

 - No intended functionality change -- at -O3 this should produce equivalent if not identical output. On 403.gcc's combine.c, x86_64, -O3, this isn't quite true and some of the changes are regressions, but I'm not going to worry about that until we move to a new access policy.

 - There is still some room for improvement in the generated IR, in particular we can usually fold the sign-extension of the bit-field into one of the component access. See the FIXME.

llvm-svn: 101192
2010-04-13 23:34:15 +00:00
John McCall 900d980cd8 Fix an embarrasing memory error. I was apparently very tired when I wrote this
code the first time.

Fixes PR6827.

llvm-svn: 101184
2010-04-13 22:18:28 +00:00
Daniel Dunbar b935b9370d IRgen: Enhance CGBitFieldInfo with enough information to fully describe the "policy" with which a bit-field should be accessed.
- For now, these policies are computed to match the current IRgen strategy, although the new information isn't being used yet (except in -fdump-record-layouts).

 - Design comments appreciated.

llvm-svn: 101178
2010-04-13 20:58:55 +00:00
Daniel Dunbar fe53aaef51 Remove unnecessary cast.
llvm-svn: 101176
2010-04-13 20:52:05 +00:00
John McCall e820e5e006 Support befriending members of class template specializations.
llvm-svn: 101173
2010-04-13 20:37:33 +00:00
Fariborz Jahanian ea70a17626 Twik to radar 7839485. Do not attach weak_import attribute to class
for non-fragile abi on darwin.

llvm-svn: 101168
2010-04-13 20:22:35 +00:00
Fariborz Jahanian dd9a259975 Turn off warning about weak_import attribute
on objc classes for Darwin. Radar 7839485.

llvm-svn: 101164
2010-04-13 19:02:07 +00:00
Fariborz Jahanian 5e575c03b8 Removes a FIXME.
llvm-svn: 101161
2010-04-13 18:43:37 +00:00
Fariborz Jahanian 7e9d52aaca Variation of objc_copyStruct API generation when
property (atomic/nonatomic) is of aggregate type with
gc'able member objects) (NeXT runtime).

llvm-svn: 101156
2010-04-13 18:32:24 +00:00
Chris Lattner ff0e2a36e2 Rework the ConstStructBuilder code to emit missing initializer
elements with explicit zero values instead of with tail padding.
On an example like this:

struct foo { int a; int b; };

struct foo fooarray[] = {
    {1, 2},
    {4},
};

We now lay this out as:

@fooarray = global [2 x %struct.foo] [%struct.foo { i32 1, i32 2 }, %struct.foo { i32 4, i32 0 }]

instead of as:

@fooarray = global %0 <{ %struct.foo { i32 1, i32 2 }, %1 { i32 4, [4 x i8] zeroinitializer } }>

Preserving both the struct type of the second element, but also the array type of the entire thing.

llvm-svn: 101155
2010-04-13 18:16:19 +00:00
Chris Lattner d8d760ce66 unbreak tests.
llvm-svn: 101153
2010-04-13 17:57:11 +00:00
Chris Lattner cfa3e7ae6a move a bunch of ConstStructBuilder methods out of line.
llvm-svn: 101152
2010-04-13 17:45:57 +00:00
Chris Lattner 7a4a29f89a minor cleanups
llvm-svn: 101151
2010-04-13 17:39:09 +00:00
Chris Lattner a06794201d Teach HasSideEffect about InitListExprs. Not having
this caused us to codegen dead globals like this:

struct foo { int a; int b; };

static struct foo fooarray[] = {
  {1, 2},
  {4},
};

llvm-svn: 101150
2010-04-13 17:34:23 +00:00
Chris Lattner 8d269dc329 make the rewriter add a #ifndef around the #define of __attribute__.
Without it, there is no reason for a compiler that supports it to
emit the dead static globals that the rewriter labels attribute(used).

llvm-svn: 101149
2010-04-13 17:33:56 +00:00
Douglas Gregor 38ae6ab6bc Refactor and simplify the computation of implicit conversion sequences
for reference binding. The code attempted to handle both the
computation of the ICS and the actual conversion, but the latter is an
anachronism: we now use InitializationSequence for that. 

Sema::CheckReferenceInit is now a static function TryReferenceInit
that's only use within overload resolution, and has been simplified
slightly. It still needs to be updated per C++ [over.ics.ref], by
eliminating more of the lvalue/rvalue checks.

llvm-svn: 101136
2010-04-13 16:31:36 +00:00
Douglas Gregor e5e775bc8e When returning the result of a call to an object of class type, do not
return a NULL expression; return either an error or a proper
expression. Fixes PR6078.

llvm-svn: 101133
2010-04-13 15:50:39 +00:00
Douglas Gregor 538be4622c During referencing binding, only consider conversion functions for
direct reference binding when the source and target types are not
reference-related. Fixes PR6066.

llvm-svn: 101132
2010-04-13 15:07:45 +00:00
Zhongxing Xu 17b33ed0cf Make all cases that we don't handle explicit.
llvm-svn: 101129
2010-04-13 13:15:19 +00:00
Zhongxing Xu b6f02c3d67 Dispatch all C++ cast expr to VisitCast().
llvm-svn: 101128
2010-04-13 12:38:32 +00:00
Zhongxing Xu 7e61217d86 CFGBuilder: always add C++ member call expr as block-level expr.
llvm-svn: 101127
2010-04-13 09:38:01 +00:00
John McCall 43314ab3ae Allow classes to befriend implicitly-declared members. Fixes PR6207 for
members of non-templated classes.

llvm-svn: 101122
2010-04-13 07:45:41 +00:00
Zhongxing Xu 7d4bc9a106 Add a cc1 option to specify the max number of nodes the analyzer can explore.
llvm-svn: 101120
2010-04-13 06:44:31 +00:00
John McCall 84821e7143 Parse constructor names in friend declarations. Part of the fix for
PR6207.

llvm-svn: 101119
2010-04-13 06:39:49 +00:00
Fariborz Jahanian 33eb59a61b Remove this test for now until I can figure out
why it keeps failing on buildbot (but not for me).

llvm-svn: 101115
2010-04-13 02:16:35 +00:00
John McCall 77e41c1cc6 Don't try to find a scope corresponding to the search DC for an unfound
friend declaration;  this used to be important but is now just a waste of time
plus an unreasonable assertion.  Fixes PR6174.

llvm-svn: 101112
2010-04-13 01:44:10 +00:00
Fariborz Jahanian cb21e38dc5 Modify test to be darwin specific.
llvm-svn: 101109
2010-04-13 01:10:57 +00:00
Chris Lattner dc6040b357 add frontend support for -fdata-sections and -ffunction-sections,
patch by Sylvere Teissier!

llvm-svn: 101108
2010-04-13 00:38:24 +00:00
Fariborz Jahanian 08b0f66d2e Add support for objc_copyStruct to enforce
atomicity of aggregate properties in setter/getter
methods. wip.

llvm-svn: 101107
2010-04-13 00:38:05 +00:00
Devang Patel 74c10507a6 Fix debug info for cleanup block.
llvm-svn: 101100
2010-04-13 00:08:43 +00:00
Chris Lattner 9d94f04f27 cache the PP's SourceManager.
llvm-svn: 101099
2010-04-13 00:06:42 +00:00
John McCall 212fa2efb7 Diagnose declarations of conversion functions with declarators other than '()'.
llvm-svn: 101098
2010-04-13 00:04:31 +00:00
Chris Lattner 5dbefc6697 make the preprocessor listen to linemarker directives in -E mode,
PR6101.  This is based on a patch and testcase by Jordy Rose!

llvm-svn: 101097
2010-04-13 00:01:41 +00:00
Douglas Gregor b3cdaee190 Remove some dead FIXMEs
llvm-svn: 101092
2010-04-12 23:52:24 +00:00
Douglas Gregor 2c326bce38 Implement C++ [over.ics.user]p3, which restricts the final conversion
from a conversion function template specialization to one of exact
match rank. We only know how to test this in C++0x with default
function template arguments, but it's also in the C++03 spec. Fixes
PR6285.

llvm-svn: 101089
2010-04-12 23:42:09 +00:00
Douglas Gregor 5c0066f1cf Improve source-location information for C++ conversion functions, by
copying the type location information from the conversion-type-id into
the type location information for the function type. Do something
similar for constructors and destructors, by giving their "void"
return type source-location information.

In all of these cases, we previously left this type-source information
uninitialized, which led to various unfortunate crashes.

We still aren't tracking good source-location information for the
actual names. That's PR6357.

John, please check my sanity on this.

llvm-svn: 101088
2010-04-12 23:19:01 +00:00
Chris Lattner 1a9e873bf9 fix a minor bug I noticed while work with Jordy's patch for PR6101,
in an input file like this:

# 42
int x;

we were emitting:

# <something>
 int x;

(with a space before the int) because we weren't clearing the leading 
whitespace flag properly after the \n from the directive was handled.

llvm-svn: 101084
2010-04-12 23:04:41 +00:00
Ted Kremenek e601365de9 Add fixit hint for missing ':' in ternary expressions.
llvm-svn: 101073
2010-04-12 22:10:35 +00:00
Chris Lattner 97a8e43a02 fix PR6814 - Only print [-pedantic] on a diagnostic if -pedantic
actually turned it on.  If a diag is produced by a warning which
is an extension but defaults to on, and has no warning group, don't
print any option info.

llvm-svn: 101071
2010-04-12 21:53:11 +00:00
Ted Kremenek 4ed2925b91 Add 'clang_getCursorLanguage' to return the "language" of the AST element (e.g., distinguish between C and Objective-C language features). Currently this only returns results for declarations.
llvm-svn: 101070
2010-04-12 21:22:16 +00:00
Ted Kremenek 601f6d5b59 Sort exports file.
llvm-svn: 101069
2010-04-12 21:22:10 +00:00
Chris Lattner 933f67887f fix PR6660/6168: emit padding as zeros instead of undef. Because
trailing fields may not be represented in initializer lists, they
are being handled as padding and those fields *must* be zero 
initialized.

llvm-svn: 101067
2010-04-12 21:10:05 +00:00
Daniel Dunbar f9c24f8403 IRgen: Factor out ComputeBitFieldInfo.
llvm-svn: 101066
2010-04-12 21:01:28 +00:00
Douglas Gregor 41f9030fb8 Implement C++ [temp.local]p4, which specifies how we eliminate
name-lookup ambiguities when there are multiple base classes that are
all specializations of the same class template. This is part of a
general cleanup for ambiguities in template-name lookup. Fixes
PR6717.

llvm-svn: 101065
2010-04-12 20:54:26 +00:00
Ted Kremenek 39a7665832 Fix null dereference in 'WriteSourceLocation' when the FileEntry is null.
llvm-svn: 101060
2010-04-12 19:54:17 +00:00
Benjamin Kramer 0644145373 Prune includes.
llvm-svn: 101059
2010-04-12 19:45:50 +00:00
Ted Kremenek de24a940a7 Update doxygen comments about lifetime requirements of CXUnsaveFile data arguments.
llvm-svn: 101054
2010-04-12 18:47:26 +00:00
Fariborz Jahanian 5a8c2034a4 Add some API code for future work.
llvm-svn: 101052
2010-04-12 18:18:10 +00:00
Daniel Dunbar b97bff9aa9 IRgen: Add CGRecordLayout::dump, and dump (irgen) record layouts as part of -fdump-record-layouts.
llvm-svn: 101051
2010-04-12 18:14:18 +00:00
Chris Lattner 509a32da75 fix PR6819
llvm-svn: 101050
2010-04-12 17:25:51 +00:00
Chris Lattner 5ff40fc7ab tighten the check for cast of super to avoid rejecting valid code,
rdar://7853261

llvm-svn: 101048
2010-04-12 17:09:27 +00:00
Douglas Gregor b93b606759 When creating the implicitly-declared special member functions, be
sure to introduce them into the current Scope (when we have one) in
addition to the DeclContext for the class, so that they can be found
by name lookup for inline members of the class. Fixes PR6570.

llvm-svn: 101047
2010-04-12 17:09:20 +00:00
Chris Lattner 08e774b7ef fix rdar://7852959 - Use of super within a block is actually ok.
(aka, Fariborz was right ;-)

llvm-svn: 101046
2010-04-12 17:03:29 +00:00
Fariborz Jahanian 5ea6bdd0ea Issue warning when 'weak_import' attribute is applied on a class only
when it is not supported in versions of MacOs.

llvm-svn: 101044
2010-04-12 16:57:31 +00:00
Douglas Gregor 61c1ac2e5c Remove the blanket statement about Clang not supporting access control. It does now
llvm-svn: 101041
2010-04-12 16:01:38 +00:00
Douglas Gregor ce40e2ef8a Fix a crash-on-invalid involving name lookup of tag names, where we
ended up finding a function template that we didn't expect. Recover
more gracefully, and fix a similar issue for class templates.

llvm-svn: 101040
2010-04-12 16:00:01 +00:00
Douglas Gregor 7531ca96f7 Add another test case for r101029, which verifies that we now
correctly diagnose instantiation of a function parameter with Objective-C
class type (since Objective-C classes can't be passed by value).

llvm-svn: 101031
2010-04-12 07:51:13 +00:00
Douglas Gregor 940bca7b93 Be sure to instantiate the parameters of a function, even when the
function's type is (strictly speaking) non-dependent. This ensures
that, e.g., default function arguments get instantiated properly.

And, since I couldn't resist, collapse the two implementations of
function-parameter instantiation into calls to a single, new function
(Sema::SubstParmVarDecl), since the two had nearly identical code (and
each had bugs the other didn't!). More importantly, factored out the
semantic analysis of a parameter declaration into
Sema::CheckParameter, which is called both by
Sema::ActOnParamDeclarator (when parameters are parsed) and when a
parameter is instantiated. Previously, we were missing some
Objective-C and address-space checks on instantiated function
parameters.

Fixes PR6733.

llvm-svn: 101029
2010-04-12 07:48:19 +00:00
Chris Lattner 3adb17d44f fix a bug I noticed by inspection, correcting two reject-valid bugs.
llvm-svn: 101026
2010-04-12 06:36:00 +00:00
Chris Lattner 3ab8ca2894 fix a rejects-valid bug that I introduced, pointed out
by David Chisnall

llvm-svn: 101024
2010-04-12 06:27:57 +00:00
Chris Lattner 1447136553 use pointer comparison instead of isStr
llvm-svn: 101022
2010-04-12 06:22:50 +00:00
Chris Lattner cd963185f0 fix a rejects-valid testcase involving super that I dreamt up.
This also fixes cases where super is used in a block in a
method which isn't valid.

llvm-svn: 101021
2010-04-12 06:20:33 +00:00
Chris Lattner df74264787 change Scope::WithinElse to be a normal scope flag, widen the
fields to two 16-bit values instead of using bitfields.

llvm-svn: 101020
2010-04-12 06:12:50 +00:00
Chris Lattner 7974fb130f fix this test.
llvm-svn: 101019
2010-04-12 05:47:20 +00:00