SemaType.cpp revision 9e876876afc13aa671cc11a17c19907c599b9ab9
1//===--- SemaType.cpp - Semantic Analysis for Types -----------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file implements type-related semantic analysis.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/Sema/SemaInternal.h"
15#include "clang/Sema/Template.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/AST/CXXInheritance.h"
18#include "clang/AST/DeclObjC.h"
19#include "clang/AST/DeclTemplate.h"
20#include "clang/AST/TypeLoc.h"
21#include "clang/AST/TypeLocVisitor.h"
22#include "clang/AST/Expr.h"
23#include "clang/Basic/PartialDiagnostic.h"
24#include "clang/Basic/TargetInfo.h"
25#include "clang/Sema/DeclSpec.h"
26#include "llvm/ADT/SmallPtrSet.h"
27#include "llvm/Support/ErrorHandling.h"
28using namespace clang;
29
30/// \brief Perform adjustment on the parameter type of a function.
31///
32/// This routine adjusts the given parameter type @p T to the actual
33/// parameter type used by semantic analysis (C99 6.7.5.3p[7,8],
34/// C++ [dcl.fct]p3). The adjusted parameter type is returned.
35QualType Sema::adjustParameterType(QualType T) {
36  // C99 6.7.5.3p7:
37  //   A declaration of a parameter as "array of type" shall be
38  //   adjusted to "qualified pointer to type", where the type
39  //   qualifiers (if any) are those specified within the [ and ] of
40  //   the array type derivation.
41  if (T->isArrayType())
42    return Context.getArrayDecayedType(T);
43
44  // C99 6.7.5.3p8:
45  //   A declaration of a parameter as "function returning type"
46  //   shall be adjusted to "pointer to function returning type", as
47  //   in 6.3.2.1.
48  if (T->isFunctionType())
49    return Context.getPointerType(T);
50
51  return T;
52}
53
54
55
56/// isOmittedBlockReturnType - Return true if this declarator is missing a
57/// return type because this is a omitted return type on a block literal.
58static bool isOmittedBlockReturnType(const Declarator &D) {
59  if (D.getContext() != Declarator::BlockLiteralContext ||
60      D.getDeclSpec().hasTypeSpecifier())
61    return false;
62
63  if (D.getNumTypeObjects() == 0)
64    return true;   // ^{ ... }
65
66  if (D.getNumTypeObjects() == 1 &&
67      D.getTypeObject(0).Kind == DeclaratorChunk::Function)
68    return true;   // ^(int X, float Y) { ... }
69
70  return false;
71}
72
73// objc_gc applies to Objective-C pointers or, otherwise, to the
74// smallest available pointer type (i.e. 'void*' in 'void**').
75#define OBJC_POINTER_TYPE_ATTRS_CASELIST \
76    case AttributeList::AT_objc_gc
77
78// Function type attributes.
79#define FUNCTION_TYPE_ATTRS_CASELIST \
80    case AttributeList::AT_noreturn: \
81    case AttributeList::AT_cdecl: \
82    case AttributeList::AT_fastcall: \
83    case AttributeList::AT_stdcall: \
84    case AttributeList::AT_thiscall: \
85    case AttributeList::AT_pascal: \
86    case AttributeList::AT_regparm
87
88namespace {
89  /// An object which stores processing state for the entire
90  /// GetTypeForDeclarator process.
91  class TypeProcessingState {
92    Sema &sema;
93
94    /// The declarator being processed.
95    Declarator &declarator;
96
97    /// The index of the declarator chunk we're currently processing.
98    /// May be the total number of valid chunks, indicating the
99    /// DeclSpec.
100    unsigned chunkIndex;
101
102    /// Whether there are non-trivial modifications to the decl spec.
103    bool trivial;
104
105    /// The original set of attributes on the DeclSpec.
106    llvm::SmallVector<AttributeList*, 2> savedAttrs;
107
108    /// A list of attributes to diagnose the uselessness of when the
109    /// processing is complete.
110    llvm::SmallVector<AttributeList*, 2> ignoredTypeAttrs;
111
112  public:
113    TypeProcessingState(Sema &sema, Declarator &declarator)
114      : sema(sema), declarator(declarator),
115        chunkIndex(declarator.getNumTypeObjects()),
116        trivial(true) {}
117
118    Sema &getSema() const {
119      return sema;
120    }
121
122    Declarator &getDeclarator() const {
123      return declarator;
124    }
125
126    unsigned getCurrentChunkIndex() const {
127      return chunkIndex;
128    }
129
130    void setCurrentChunkIndex(unsigned idx) {
131      assert(idx <= declarator.getNumTypeObjects());
132      chunkIndex = idx;
133    }
134
135    AttributeList *&getCurrentAttrListRef() const {
136      assert(chunkIndex <= declarator.getNumTypeObjects());
137      if (chunkIndex == declarator.getNumTypeObjects())
138        return getMutableDeclSpec().getAttributes().getListRef();
139      return declarator.getTypeObject(chunkIndex).getAttrListRef();
140    }
141
142    /// Save the current set of attributes on the DeclSpec.
143    void saveDeclSpecAttrs() {
144      // Don't try to save them multiple times.
145      if (!savedAttrs.empty()) return;
146
147      DeclSpec &spec = getMutableDeclSpec();
148      for (AttributeList *attr = spec.getAttributes().getList(); attr;
149             attr = attr->getNext())
150        savedAttrs.push_back(attr);
151      trivial &= savedAttrs.empty();
152    }
153
154    /// Record that we had nowhere to put the given type attribute.
155    /// We will diagnose such attributes later.
156    void addIgnoredTypeAttr(AttributeList &attr) {
157      ignoredTypeAttrs.push_back(&attr);
158    }
159
160    /// Diagnose all the ignored type attributes, given that the
161    /// declarator worked out to the given type.
162    void diagnoseIgnoredTypeAttrs(QualType type) const {
163      for (llvm::SmallVectorImpl<AttributeList*>::const_iterator
164             i = ignoredTypeAttrs.begin(), e = ignoredTypeAttrs.end();
165           i != e; ++i) {
166        AttributeList &attr = **i;
167        getSema().Diag(attr.getLoc(), diag::warn_function_attribute_wrong_type)
168          << attr.getName() << type;
169      }
170    }
171
172    ~TypeProcessingState() {
173      if (trivial) return;
174
175      restoreDeclSpecAttrs();
176    }
177
178  private:
179    DeclSpec &getMutableDeclSpec() const {
180      return const_cast<DeclSpec&>(declarator.getDeclSpec());
181    }
182
183    void restoreDeclSpecAttrs() {
184      assert(!savedAttrs.empty());
185      getMutableDeclSpec().getAttributes().set(savedAttrs[0]);
186      for (unsigned i = 0, e = savedAttrs.size() - 1; i != e; ++i)
187        savedAttrs[i]->setNext(savedAttrs[i+1]);
188      savedAttrs.back()->setNext(0);
189    }
190  };
191
192  /// Basically std::pair except that we really want to avoid an
193  /// implicit operator= for safety concerns.  It's also a minor
194  /// link-time optimization for this to be a private type.
195  struct AttrAndList {
196    /// The attribute.
197    AttributeList &first;
198
199    /// The head of the list the attribute is currently in.
200    AttributeList *&second;
201
202    AttrAndList(AttributeList &attr, AttributeList *&head)
203      : first(attr), second(head) {}
204  };
205}
206
207namespace llvm {
208  template <> struct isPodLike<AttrAndList> {
209    static const bool value = true;
210  };
211}
212
213static void spliceAttrIntoList(AttributeList &attr, AttributeList *&head) {
214  attr.setNext(head);
215  head = &attr;
216}
217
218static void spliceAttrOutOfList(AttributeList &attr, AttributeList *&head) {
219  if (head == &attr) {
220    head = attr.getNext();
221    return;
222  }
223
224  AttributeList *cur = head;
225  while (true) {
226    assert(cur && cur->getNext() && "ran out of attrs?");
227    if (cur->getNext() == &attr) {
228      cur->setNext(attr.getNext());
229      return;
230    }
231    cur = cur->getNext();
232  }
233}
234
235static void moveAttrFromListToList(AttributeList &attr,
236                                   AttributeList *&fromList,
237                                   AttributeList *&toList) {
238  spliceAttrOutOfList(attr, fromList);
239  spliceAttrIntoList(attr, toList);
240}
241
242static void processTypeAttrs(TypeProcessingState &state,
243                             QualType &type, bool isDeclSpec,
244                             AttributeList *attrs);
245
246static bool handleFunctionTypeAttr(TypeProcessingState &state,
247                                   AttributeList &attr,
248                                   QualType &type);
249
250static bool handleObjCGCTypeAttr(TypeProcessingState &state,
251                                 AttributeList &attr, QualType &type);
252
253static bool handleObjCPointerTypeAttr(TypeProcessingState &state,
254                                      AttributeList &attr, QualType &type) {
255  // Right now, we have exactly one of these attributes: objc_gc.
256  assert(attr.getKind() == AttributeList::AT_objc_gc);
257  return handleObjCGCTypeAttr(state, attr, type);
258}
259
260/// Given that an objc_gc attribute was written somewhere on a
261/// declaration *other* than on the declarator itself (for which, use
262/// distributeObjCPointerTypeAttrFromDeclarator), and given that it
263/// didn't apply in whatever position it was written in, try to move
264/// it to a more appropriate position.
265static void distributeObjCPointerTypeAttr(TypeProcessingState &state,
266                                          AttributeList &attr,
267                                          QualType type) {
268  Declarator &declarator = state.getDeclarator();
269  for (unsigned i = state.getCurrentChunkIndex(); i != 0; --i) {
270    DeclaratorChunk &chunk = declarator.getTypeObject(i-1);
271    switch (chunk.Kind) {
272    case DeclaratorChunk::Pointer:
273    case DeclaratorChunk::BlockPointer:
274      moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
275                             chunk.getAttrListRef());
276      return;
277
278    case DeclaratorChunk::Paren:
279    case DeclaratorChunk::Array:
280      continue;
281
282    // Don't walk through these.
283    case DeclaratorChunk::Reference:
284    case DeclaratorChunk::Function:
285    case DeclaratorChunk::MemberPointer:
286      goto error;
287    }
288  }
289 error:
290
291  state.getSema().Diag(attr.getLoc(), diag::warn_function_attribute_wrong_type)
292    << attr.getName() << type;
293}
294
295/// Distribute an objc_gc type attribute that was written on the
296/// declarator.
297static void
298distributeObjCPointerTypeAttrFromDeclarator(TypeProcessingState &state,
299                                            AttributeList &attr,
300                                            QualType &declSpecType) {
301  Declarator &declarator = state.getDeclarator();
302
303  // objc_gc goes on the innermost pointer to something that's not a
304  // pointer.
305  unsigned innermost = -1U;
306  bool considerDeclSpec = true;
307  for (unsigned i = 0, e = declarator.getNumTypeObjects(); i != e; ++i) {
308    DeclaratorChunk &chunk = declarator.getTypeObject(i);
309    switch (chunk.Kind) {
310    case DeclaratorChunk::Pointer:
311    case DeclaratorChunk::BlockPointer:
312      innermost = i;
313      continue;
314
315    case DeclaratorChunk::Reference:
316    case DeclaratorChunk::MemberPointer:
317    case DeclaratorChunk::Paren:
318    case DeclaratorChunk::Array:
319      continue;
320
321    case DeclaratorChunk::Function:
322      considerDeclSpec = false;
323      goto done;
324    }
325  }
326 done:
327
328  // That might actually be the decl spec if we weren't blocked by
329  // anything in the declarator.
330  if (considerDeclSpec) {
331    if (handleObjCPointerTypeAttr(state, attr, declSpecType))
332      return;
333  }
334
335  // Otherwise, if we found an appropriate chunk, splice the attribute
336  // into it.
337  if (innermost != -1U) {
338    moveAttrFromListToList(attr, declarator.getAttrListRef(),
339                       declarator.getTypeObject(innermost).getAttrListRef());
340    return;
341  }
342
343  // Otherwise, diagnose when we're done building the type.
344  spliceAttrOutOfList(attr, declarator.getAttrListRef());
345  state.addIgnoredTypeAttr(attr);
346}
347
348/// A function type attribute was written somewhere in a declaration
349/// *other* than on the declarator itself or in the decl spec.  Given
350/// that it didn't apply in whatever position it was written in, try
351/// to move it to a more appropriate position.
352static void distributeFunctionTypeAttr(TypeProcessingState &state,
353                                       AttributeList &attr,
354                                       QualType type) {
355  Declarator &declarator = state.getDeclarator();
356
357  // Try to push the attribute from the return type of a function to
358  // the function itself.
359  for (unsigned i = state.getCurrentChunkIndex(); i != 0; --i) {
360    DeclaratorChunk &chunk = declarator.getTypeObject(i-1);
361    switch (chunk.Kind) {
362    case DeclaratorChunk::Function:
363      moveAttrFromListToList(attr, state.getCurrentAttrListRef(),
364                             chunk.getAttrListRef());
365      return;
366
367    case DeclaratorChunk::Paren:
368    case DeclaratorChunk::Pointer:
369    case DeclaratorChunk::BlockPointer:
370    case DeclaratorChunk::Array:
371    case DeclaratorChunk::Reference:
372    case DeclaratorChunk::MemberPointer:
373      continue;
374    }
375  }
376
377  state.getSema().Diag(attr.getLoc(), diag::warn_function_attribute_wrong_type)
378    << attr.getName() << type;
379}
380
381/// Try to distribute a function type attribute to the innermost
382/// function chunk or type.  Returns true if the attribute was
383/// distributed, false if no location was found.
384static bool
385distributeFunctionTypeAttrToInnermost(TypeProcessingState &state,
386                                      AttributeList &attr,
387                                      AttributeList *&attrList,
388                                      QualType &declSpecType) {
389  Declarator &declarator = state.getDeclarator();
390
391  // Put it on the innermost function chunk, if there is one.
392  for (unsigned i = 0, e = declarator.getNumTypeObjects(); i != e; ++i) {
393    DeclaratorChunk &chunk = declarator.getTypeObject(i);
394    if (chunk.Kind != DeclaratorChunk::Function) continue;
395
396    moveAttrFromListToList(attr, attrList, chunk.getAttrListRef());
397    return true;
398  }
399
400  return handleFunctionTypeAttr(state, attr, declSpecType);
401}
402
403/// A function type attribute was written in the decl spec.  Try to
404/// apply it somewhere.
405static void
406distributeFunctionTypeAttrFromDeclSpec(TypeProcessingState &state,
407                                       AttributeList &attr,
408                                       QualType &declSpecType) {
409  state.saveDeclSpecAttrs();
410
411  // Try to distribute to the innermost.
412  if (distributeFunctionTypeAttrToInnermost(state, attr,
413                                            state.getCurrentAttrListRef(),
414                                            declSpecType))
415    return;
416
417  // If that failed, diagnose the bad attribute when the declarator is
418  // fully built.
419  state.addIgnoredTypeAttr(attr);
420}
421
422/// A function type attribute was written on the declarator.  Try to
423/// apply it somewhere.
424static void
425distributeFunctionTypeAttrFromDeclarator(TypeProcessingState &state,
426                                         AttributeList &attr,
427                                         QualType &declSpecType) {
428  Declarator &declarator = state.getDeclarator();
429
430  // Try to distribute to the innermost.
431  if (distributeFunctionTypeAttrToInnermost(state, attr,
432                                            declarator.getAttrListRef(),
433                                            declSpecType))
434    return;
435
436  // If that failed, diagnose the bad attribute when the declarator is
437  // fully built.
438  spliceAttrOutOfList(attr, declarator.getAttrListRef());
439  state.addIgnoredTypeAttr(attr);
440}
441
442/// \brief Given that there are attributes written on the declarator
443/// itself, try to distribute any type attributes to the appropriate
444/// declarator chunk.
445///
446/// These are attributes like the following:
447///   int f ATTR;
448///   int (f ATTR)();
449/// but not necessarily this:
450///   int f() ATTR;
451static void distributeTypeAttrsFromDeclarator(TypeProcessingState &state,
452                                              QualType &declSpecType) {
453  // Collect all the type attributes from the declarator itself.
454  assert(state.getDeclarator().getAttributes() && "declarator has no attrs!");
455  AttributeList *attr = state.getDeclarator().getAttributes();
456  AttributeList *next;
457  do {
458    next = attr->getNext();
459
460    switch (attr->getKind()) {
461    OBJC_POINTER_TYPE_ATTRS_CASELIST:
462      distributeObjCPointerTypeAttrFromDeclarator(state, *attr, declSpecType);
463      break;
464
465    FUNCTION_TYPE_ATTRS_CASELIST:
466      distributeFunctionTypeAttrFromDeclarator(state, *attr, declSpecType);
467      break;
468
469    default:
470      break;
471    }
472  } while ((attr = next));
473}
474
475/// Add a synthetic '()' to a block-literal declarator if it is
476/// required, given the return type.
477static void maybeSynthesizeBlockSignature(TypeProcessingState &state,
478                                          QualType declSpecType) {
479  Declarator &declarator = state.getDeclarator();
480
481  // First, check whether the declarator would produce a function,
482  // i.e. whether the innermost semantic chunk is a function.
483  if (declarator.isFunctionDeclarator()) {
484    // If so, make that declarator a prototyped declarator.
485    declarator.getFunctionTypeInfo().hasPrototype = true;
486    return;
487  }
488
489  // If there are any type objects, the type as written won't name a
490  // function, regardless of the decl spec type.  This is because a
491  // block signature declarator is always an abstract-declarator, and
492  // abstract-declarators can't just be parentheses chunks.  Therefore
493  // we need to build a function chunk unless there are no type
494  // objects and the decl spec type is a function.
495  if (!declarator.getNumTypeObjects() && declSpecType->isFunctionType())
496    return;
497
498  // Note that there *are* cases with invalid declarators where
499  // declarators consist solely of parentheses.  In general, these
500  // occur only in failed efforts to make function declarators, so
501  // faking up the function chunk is still the right thing to do.
502
503  // Otherwise, we need to fake up a function declarator.
504  SourceLocation loc = declarator.getSourceRange().getBegin();
505
506  // ...and *prepend* it to the declarator.
507  declarator.AddInnermostTypeInfo(DeclaratorChunk::getFunction(
508                             ParsedAttributes(),
509                             /*proto*/ true,
510                             /*variadic*/ false, SourceLocation(),
511                             /*args*/ 0, 0,
512                             /*type quals*/ 0,
513                             /*ref-qualifier*/true, SourceLocation(),
514                             /*EH*/ false, SourceLocation(), false, 0, 0, 0,
515                             /*parens*/ loc, loc,
516                             declarator));
517
518  // For consistency, make sure the state still has us as processing
519  // the decl spec.
520  assert(state.getCurrentChunkIndex() == declarator.getNumTypeObjects() - 1);
521  state.setCurrentChunkIndex(declarator.getNumTypeObjects());
522}
523
524/// \brief Convert the specified declspec to the appropriate type
525/// object.
526/// \param D  the declarator containing the declaration specifier.
527/// \returns The type described by the declaration specifiers.  This function
528/// never returns null.
529static QualType ConvertDeclSpecToType(Sema &S, TypeProcessingState &state) {
530  // FIXME: Should move the logic from DeclSpec::Finish to here for validity
531  // checking.
532
533  Declarator &declarator = state.getDeclarator();
534  const DeclSpec &DS = declarator.getDeclSpec();
535  SourceLocation DeclLoc = declarator.getIdentifierLoc();
536  if (DeclLoc.isInvalid())
537    DeclLoc = DS.getSourceRange().getBegin();
538
539  ASTContext &Context = S.Context;
540
541  QualType Result;
542  switch (DS.getTypeSpecType()) {
543  case DeclSpec::TST_void:
544    Result = Context.VoidTy;
545    break;
546  case DeclSpec::TST_char:
547    if (DS.getTypeSpecSign() == DeclSpec::TSS_unspecified)
548      Result = Context.CharTy;
549    else if (DS.getTypeSpecSign() == DeclSpec::TSS_signed)
550      Result = Context.SignedCharTy;
551    else {
552      assert(DS.getTypeSpecSign() == DeclSpec::TSS_unsigned &&
553             "Unknown TSS value");
554      Result = Context.UnsignedCharTy;
555    }
556    break;
557  case DeclSpec::TST_wchar:
558    if (DS.getTypeSpecSign() == DeclSpec::TSS_unspecified)
559      Result = Context.WCharTy;
560    else if (DS.getTypeSpecSign() == DeclSpec::TSS_signed) {
561      S.Diag(DS.getTypeSpecSignLoc(), diag::ext_invalid_sign_spec)
562        << DS.getSpecifierName(DS.getTypeSpecType());
563      Result = Context.getSignedWCharType();
564    } else {
565      assert(DS.getTypeSpecSign() == DeclSpec::TSS_unsigned &&
566        "Unknown TSS value");
567      S.Diag(DS.getTypeSpecSignLoc(), diag::ext_invalid_sign_spec)
568        << DS.getSpecifierName(DS.getTypeSpecType());
569      Result = Context.getUnsignedWCharType();
570    }
571    break;
572  case DeclSpec::TST_char16:
573      assert(DS.getTypeSpecSign() == DeclSpec::TSS_unspecified &&
574        "Unknown TSS value");
575      Result = Context.Char16Ty;
576    break;
577  case DeclSpec::TST_char32:
578      assert(DS.getTypeSpecSign() == DeclSpec::TSS_unspecified &&
579        "Unknown TSS value");
580      Result = Context.Char32Ty;
581    break;
582  case DeclSpec::TST_unspecified:
583    // "<proto1,proto2>" is an objc qualified ID with a missing id.
584    if (DeclSpec::ProtocolQualifierListTy PQ = DS.getProtocolQualifiers()) {
585      Result = Context.getObjCObjectType(Context.ObjCBuiltinIdTy,
586                                         (ObjCProtocolDecl**)PQ,
587                                         DS.getNumProtocolQualifiers());
588      Result = Context.getObjCObjectPointerType(Result);
589      break;
590    }
591
592    // If this is a missing declspec in a block literal return context, then it
593    // is inferred from the return statements inside the block.
594    if (isOmittedBlockReturnType(declarator)) {
595      Result = Context.DependentTy;
596      break;
597    }
598
599    // Unspecified typespec defaults to int in C90.  However, the C90 grammar
600    // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,
601    // type-qualifier, or storage-class-specifier.  If not, emit an extwarn.
602    // Note that the one exception to this is function definitions, which are
603    // allowed to be completely missing a declspec.  This is handled in the
604    // parser already though by it pretending to have seen an 'int' in this
605    // case.
606    if (S.getLangOptions().ImplicitInt) {
607      // In C89 mode, we only warn if there is a completely missing declspec
608      // when one is not allowed.
609      if (DS.isEmpty()) {
610        S.Diag(DeclLoc, diag::ext_missing_declspec)
611          << DS.getSourceRange()
612        << FixItHint::CreateInsertion(DS.getSourceRange().getBegin(), "int");
613      }
614    } else if (!DS.hasTypeSpecifier()) {
615      // C99 and C++ require a type specifier.  For example, C99 6.7.2p2 says:
616      // "At least one type specifier shall be given in the declaration
617      // specifiers in each declaration, and in the specifier-qualifier list in
618      // each struct declaration and type name."
619      // FIXME: Does Microsoft really have the implicit int extension in C++?
620      if (S.getLangOptions().CPlusPlus &&
621          !S.getLangOptions().Microsoft) {
622        S.Diag(DeclLoc, diag::err_missing_type_specifier)
623          << DS.getSourceRange();
624
625        // When this occurs in C++ code, often something is very broken with the
626        // value being declared, poison it as invalid so we don't get chains of
627        // errors.
628        declarator.setInvalidType(true);
629      } else {
630        S.Diag(DeclLoc, diag::ext_missing_type_specifier)
631          << DS.getSourceRange();
632      }
633    }
634
635    // FALL THROUGH.
636  case DeclSpec::TST_int: {
637    if (DS.getTypeSpecSign() != DeclSpec::TSS_unsigned) {
638      switch (DS.getTypeSpecWidth()) {
639      case DeclSpec::TSW_unspecified: Result = Context.IntTy; break;
640      case DeclSpec::TSW_short:       Result = Context.ShortTy; break;
641      case DeclSpec::TSW_long:        Result = Context.LongTy; break;
642      case DeclSpec::TSW_longlong:
643        Result = Context.LongLongTy;
644
645        // long long is a C99 feature.
646        if (!S.getLangOptions().C99 &&
647            !S.getLangOptions().CPlusPlus0x)
648          S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_longlong);
649        break;
650      }
651    } else {
652      switch (DS.getTypeSpecWidth()) {
653      case DeclSpec::TSW_unspecified: Result = Context.UnsignedIntTy; break;
654      case DeclSpec::TSW_short:       Result = Context.UnsignedShortTy; break;
655      case DeclSpec::TSW_long:        Result = Context.UnsignedLongTy; break;
656      case DeclSpec::TSW_longlong:
657        Result = Context.UnsignedLongLongTy;
658
659        // long long is a C99 feature.
660        if (!S.getLangOptions().C99 &&
661            !S.getLangOptions().CPlusPlus0x)
662          S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_longlong);
663        break;
664      }
665    }
666    break;
667  }
668  case DeclSpec::TST_float: Result = Context.FloatTy; break;
669  case DeclSpec::TST_double:
670    if (DS.getTypeSpecWidth() == DeclSpec::TSW_long)
671      Result = Context.LongDoubleTy;
672    else
673      Result = Context.DoubleTy;
674
675    if (S.getLangOptions().OpenCL && !S.getOpenCLOptions().cl_khr_fp64) {
676      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_double_requires_fp64);
677      declarator.setInvalidType(true);
678    }
679    break;
680  case DeclSpec::TST_bool: Result = Context.BoolTy; break; // _Bool or bool
681  case DeclSpec::TST_decimal32:    // _Decimal32
682  case DeclSpec::TST_decimal64:    // _Decimal64
683  case DeclSpec::TST_decimal128:   // _Decimal128
684    S.Diag(DS.getTypeSpecTypeLoc(), diag::err_decimal_unsupported);
685    Result = Context.IntTy;
686    declarator.setInvalidType(true);
687    break;
688  case DeclSpec::TST_class:
689  case DeclSpec::TST_enum:
690  case DeclSpec::TST_union:
691  case DeclSpec::TST_struct: {
692    TypeDecl *D = dyn_cast_or_null<TypeDecl>(DS.getRepAsDecl());
693    if (!D) {
694      // This can happen in C++ with ambiguous lookups.
695      Result = Context.IntTy;
696      declarator.setInvalidType(true);
697      break;
698    }
699
700    // If the type is deprecated or unavailable, diagnose it.
701    S.DiagnoseUseOfDecl(D, DS.getTypeSpecTypeLoc());
702
703    assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 &&
704           DS.getTypeSpecSign() == 0 && "No qualifiers on tag names!");
705
706    // TypeQuals handled by caller.
707    Result = Context.getTypeDeclType(D);
708
709    // In C++, make an ElaboratedType.
710    if (S.getLangOptions().CPlusPlus) {
711      ElaboratedTypeKeyword Keyword
712        = ElaboratedType::getKeywordForTypeSpec(DS.getTypeSpecType());
713      Result = S.getElaboratedType(Keyword, DS.getTypeSpecScope(), Result);
714    }
715    if (D->isInvalidDecl())
716      declarator.setInvalidType(true);
717    break;
718  }
719  case DeclSpec::TST_typename: {
720    assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 &&
721           DS.getTypeSpecSign() == 0 &&
722           "Can't handle qualifiers on typedef names yet!");
723    Result = S.GetTypeFromParser(DS.getRepAsType());
724    if (Result.isNull())
725      declarator.setInvalidType(true);
726    else if (DeclSpec::ProtocolQualifierListTy PQ
727               = DS.getProtocolQualifiers()) {
728      if (const ObjCObjectType *ObjT = Result->getAs<ObjCObjectType>()) {
729        // Silently drop any existing protocol qualifiers.
730        // TODO: determine whether that's the right thing to do.
731        if (ObjT->getNumProtocols())
732          Result = ObjT->getBaseType();
733
734        if (DS.getNumProtocolQualifiers())
735          Result = Context.getObjCObjectType(Result,
736                                             (ObjCProtocolDecl**) PQ,
737                                             DS.getNumProtocolQualifiers());
738      } else if (Result->isObjCIdType()) {
739        // id<protocol-list>
740        Result = Context.getObjCObjectType(Context.ObjCBuiltinIdTy,
741                                           (ObjCProtocolDecl**) PQ,
742                                           DS.getNumProtocolQualifiers());
743        Result = Context.getObjCObjectPointerType(Result);
744      } else if (Result->isObjCClassType()) {
745        // Class<protocol-list>
746        Result = Context.getObjCObjectType(Context.ObjCBuiltinClassTy,
747                                           (ObjCProtocolDecl**) PQ,
748                                           DS.getNumProtocolQualifiers());
749        Result = Context.getObjCObjectPointerType(Result);
750      } else {
751        S.Diag(DeclLoc, diag::err_invalid_protocol_qualifiers)
752          << DS.getSourceRange();
753        declarator.setInvalidType(true);
754      }
755    }
756
757    // TypeQuals handled by caller.
758    break;
759  }
760  case DeclSpec::TST_typeofType:
761    // FIXME: Preserve type source info.
762    Result = S.GetTypeFromParser(DS.getRepAsType());
763    assert(!Result.isNull() && "Didn't get a type for typeof?");
764    if (!Result->isDependentType())
765      if (const TagType *TT = Result->getAs<TagType>())
766        S.DiagnoseUseOfDecl(TT->getDecl(), DS.getTypeSpecTypeLoc());
767    // TypeQuals handled by caller.
768    Result = Context.getTypeOfType(Result);
769    break;
770  case DeclSpec::TST_typeofExpr: {
771    Expr *E = DS.getRepAsExpr();
772    assert(E && "Didn't get an expression for typeof?");
773    // TypeQuals handled by caller.
774    Result = S.BuildTypeofExprType(E, DS.getTypeSpecTypeLoc());
775    if (Result.isNull()) {
776      Result = Context.IntTy;
777      declarator.setInvalidType(true);
778    }
779    break;
780  }
781  case DeclSpec::TST_decltype: {
782    Expr *E = DS.getRepAsExpr();
783    assert(E && "Didn't get an expression for decltype?");
784    // TypeQuals handled by caller.
785    Result = S.BuildDecltypeType(E, DS.getTypeSpecTypeLoc());
786    if (Result.isNull()) {
787      Result = Context.IntTy;
788      declarator.setInvalidType(true);
789    }
790    break;
791  }
792  case DeclSpec::TST_auto: {
793    // TypeQuals handled by caller.
794    Result = Context.getAutoType(QualType());
795    break;
796  }
797
798  case DeclSpec::TST_error:
799    Result = Context.IntTy;
800    declarator.setInvalidType(true);
801    break;
802  }
803
804  // Handle complex types.
805  if (DS.getTypeSpecComplex() == DeclSpec::TSC_complex) {
806    if (S.getLangOptions().Freestanding)
807      S.Diag(DS.getTypeSpecComplexLoc(), diag::ext_freestanding_complex);
808    Result = Context.getComplexType(Result);
809  } else if (DS.isTypeAltiVecVector()) {
810    unsigned typeSize = static_cast<unsigned>(Context.getTypeSize(Result));
811    assert(typeSize > 0 && "type size for vector must be greater than 0 bits");
812    VectorType::VectorKind VecKind = VectorType::AltiVecVector;
813    if (DS.isTypeAltiVecPixel())
814      VecKind = VectorType::AltiVecPixel;
815    else if (DS.isTypeAltiVecBool())
816      VecKind = VectorType::AltiVecBool;
817    Result = Context.getVectorType(Result, 128/typeSize, VecKind);
818  }
819
820  // FIXME: Imaginary.
821  if (DS.getTypeSpecComplex() == DeclSpec::TSC_imaginary)
822    S.Diag(DS.getTypeSpecComplexLoc(), diag::err_imaginary_not_supported);
823
824  // Before we process any type attributes, synthesize a block literal
825  // function declarator if necessary.
826  if (declarator.getContext() == Declarator::BlockLiteralContext)
827    maybeSynthesizeBlockSignature(state, Result);
828
829  // Apply any type attributes from the decl spec.  This may cause the
830  // list of type attributes to be temporarily saved while the type
831  // attributes are pushed around.
832  if (AttributeList *attrs = DS.getAttributes().getList())
833    processTypeAttrs(state, Result, true, attrs);
834
835  // Apply const/volatile/restrict qualifiers to T.
836  if (unsigned TypeQuals = DS.getTypeQualifiers()) {
837
838    // Enforce C99 6.7.3p2: "Types other than pointer types derived from object
839    // or incomplete types shall not be restrict-qualified."  C++ also allows
840    // restrict-qualified references.
841    if (TypeQuals & DeclSpec::TQ_restrict) {
842      if (Result->isAnyPointerType() || Result->isReferenceType()) {
843        QualType EltTy;
844        if (Result->isObjCObjectPointerType())
845          EltTy = Result;
846        else
847          EltTy = Result->isPointerType() ?
848                    Result->getAs<PointerType>()->getPointeeType() :
849                    Result->getAs<ReferenceType>()->getPointeeType();
850
851        // If we have a pointer or reference, the pointee must have an object
852        // incomplete type.
853        if (!EltTy->isIncompleteOrObjectType()) {
854          S.Diag(DS.getRestrictSpecLoc(),
855               diag::err_typecheck_invalid_restrict_invalid_pointee)
856            << EltTy << DS.getSourceRange();
857          TypeQuals &= ~DeclSpec::TQ_restrict; // Remove the restrict qualifier.
858        }
859      } else {
860        S.Diag(DS.getRestrictSpecLoc(),
861               diag::err_typecheck_invalid_restrict_not_pointer)
862          << Result << DS.getSourceRange();
863        TypeQuals &= ~DeclSpec::TQ_restrict; // Remove the restrict qualifier.
864      }
865    }
866
867    // Warn about CV qualifiers on functions: C99 6.7.3p8: "If the specification
868    // of a function type includes any type qualifiers, the behavior is
869    // undefined."
870    if (Result->isFunctionType() && TypeQuals) {
871      // Get some location to point at, either the C or V location.
872      SourceLocation Loc;
873      if (TypeQuals & DeclSpec::TQ_const)
874        Loc = DS.getConstSpecLoc();
875      else if (TypeQuals & DeclSpec::TQ_volatile)
876        Loc = DS.getVolatileSpecLoc();
877      else {
878        assert((TypeQuals & DeclSpec::TQ_restrict) &&
879               "Has CVR quals but not C, V, or R?");
880        Loc = DS.getRestrictSpecLoc();
881      }
882      S.Diag(Loc, diag::warn_typecheck_function_qualifiers)
883        << Result << DS.getSourceRange();
884    }
885
886    // C++ [dcl.ref]p1:
887    //   Cv-qualified references are ill-formed except when the
888    //   cv-qualifiers are introduced through the use of a typedef
889    //   (7.1.3) or of a template type argument (14.3), in which
890    //   case the cv-qualifiers are ignored.
891    // FIXME: Shouldn't we be checking SCS_typedef here?
892    if (DS.getTypeSpecType() == DeclSpec::TST_typename &&
893        TypeQuals && Result->isReferenceType()) {
894      TypeQuals &= ~DeclSpec::TQ_const;
895      TypeQuals &= ~DeclSpec::TQ_volatile;
896    }
897
898    Qualifiers Quals = Qualifiers::fromCVRMask(TypeQuals);
899    Result = Context.getQualifiedType(Result, Quals);
900  }
901
902  return Result;
903}
904
905static std::string getPrintableNameForEntity(DeclarationName Entity) {
906  if (Entity)
907    return Entity.getAsString();
908
909  return "type name";
910}
911
912QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc,
913                                  Qualifiers Qs) {
914  // Enforce C99 6.7.3p2: "Types other than pointer types derived from
915  // object or incomplete types shall not be restrict-qualified."
916  if (Qs.hasRestrict()) {
917    unsigned DiagID = 0;
918    QualType ProblemTy;
919
920    const Type *Ty = T->getCanonicalTypeInternal().getTypePtr();
921    if (const ReferenceType *RTy = dyn_cast<ReferenceType>(Ty)) {
922      if (!RTy->getPointeeType()->isIncompleteOrObjectType()) {
923        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;
924        ProblemTy = T->getAs<ReferenceType>()->getPointeeType();
925      }
926    } else if (const PointerType *PTy = dyn_cast<PointerType>(Ty)) {
927      if (!PTy->getPointeeType()->isIncompleteOrObjectType()) {
928        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;
929        ProblemTy = T->getAs<PointerType>()->getPointeeType();
930      }
931    } else if (const MemberPointerType *PTy = dyn_cast<MemberPointerType>(Ty)) {
932      if (!PTy->getPointeeType()->isIncompleteOrObjectType()) {
933        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;
934        ProblemTy = T->getAs<PointerType>()->getPointeeType();
935      }
936    } else if (!Ty->isDependentType()) {
937      // FIXME: this deserves a proper diagnostic
938      DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;
939      ProblemTy = T;
940    }
941
942    if (DiagID) {
943      Diag(Loc, DiagID) << ProblemTy;
944      Qs.removeRestrict();
945    }
946  }
947
948  return Context.getQualifiedType(T, Qs);
949}
950
951/// \brief Build a paren type including \p T.
952QualType Sema::BuildParenType(QualType T) {
953  return Context.getParenType(T);
954}
955
956/// \brief Build a pointer type.
957///
958/// \param T The type to which we'll be building a pointer.
959///
960/// \param Loc The location of the entity whose type involves this
961/// pointer type or, if there is no such entity, the location of the
962/// type that will have pointer type.
963///
964/// \param Entity The name of the entity that involves the pointer
965/// type, if known.
966///
967/// \returns A suitable pointer type, if there are no
968/// errors. Otherwise, returns a NULL type.
969QualType Sema::BuildPointerType(QualType T,
970                                SourceLocation Loc, DeclarationName Entity) {
971  if (T->isReferenceType()) {
972    // C++ 8.3.2p4: There shall be no ... pointers to references ...
973    Diag(Loc, diag::err_illegal_decl_pointer_to_reference)
974      << getPrintableNameForEntity(Entity) << T;
975    return QualType();
976  }
977
978  assert(!T->isObjCObjectType() && "Should build ObjCObjectPointerType");
979
980  // Build the pointer type.
981  return Context.getPointerType(T);
982}
983
984/// \brief Build a reference type.
985///
986/// \param T The type to which we'll be building a reference.
987///
988/// \param Loc The location of the entity whose type involves this
989/// reference type or, if there is no such entity, the location of the
990/// type that will have reference type.
991///
992/// \param Entity The name of the entity that involves the reference
993/// type, if known.
994///
995/// \returns A suitable reference type, if there are no
996/// errors. Otherwise, returns a NULL type.
997QualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue,
998                                  SourceLocation Loc,
999                                  DeclarationName Entity) {
1000  // C++0x [dcl.ref]p6:
1001  //   If a typedef (7.1.3), a type template-parameter (14.3.1), or a
1002  //   decltype-specifier (7.1.6.2) denotes a type TR that is a reference to a
1003  //   type T, an attempt to create the type "lvalue reference to cv TR" creates
1004  //   the type "lvalue reference to T", while an attempt to create the type
1005  //   "rvalue reference to cv TR" creates the type TR.
1006  bool LValueRef = SpelledAsLValue || T->getAs<LValueReferenceType>();
1007
1008  // C++ [dcl.ref]p4: There shall be no references to references.
1009  //
1010  // According to C++ DR 106, references to references are only
1011  // diagnosed when they are written directly (e.g., "int & &"),
1012  // but not when they happen via a typedef:
1013  //
1014  //   typedef int& intref;
1015  //   typedef intref& intref2;
1016  //
1017  // Parser::ParseDeclaratorInternal diagnoses the case where
1018  // references are written directly; here, we handle the
1019  // collapsing of references-to-references as described in C++0x.
1020  // DR 106 and 540 introduce reference-collapsing into C++98/03.
1021
1022  // C++ [dcl.ref]p1:
1023  //   A declarator that specifies the type "reference to cv void"
1024  //   is ill-formed.
1025  if (T->isVoidType()) {
1026    Diag(Loc, diag::err_reference_to_void);
1027    return QualType();
1028  }
1029
1030  // Handle restrict on references.
1031  if (LValueRef)
1032    return Context.getLValueReferenceType(T, SpelledAsLValue);
1033  return Context.getRValueReferenceType(T);
1034}
1035
1036/// \brief Build an array type.
1037///
1038/// \param T The type of each element in the array.
1039///
1040/// \param ASM C99 array size modifier (e.g., '*', 'static').
1041///
1042/// \param ArraySize Expression describing the size of the array.
1043///
1044/// \param Loc The location of the entity whose type involves this
1045/// array type or, if there is no such entity, the location of the
1046/// type that will have array type.
1047///
1048/// \param Entity The name of the entity that involves the array
1049/// type, if known.
1050///
1051/// \returns A suitable array type, if there are no errors. Otherwise,
1052/// returns a NULL type.
1053QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
1054                              Expr *ArraySize, unsigned Quals,
1055                              SourceRange Brackets, DeclarationName Entity) {
1056
1057  SourceLocation Loc = Brackets.getBegin();
1058  if (getLangOptions().CPlusPlus) {
1059    // C++ [dcl.array]p1:
1060    //   T is called the array element type; this type shall not be a reference
1061    //   type, the (possibly cv-qualified) type void, a function type or an
1062    //   abstract class type.
1063    //
1064    // Note: function types are handled in the common path with C.
1065    if (T->isReferenceType()) {
1066      Diag(Loc, diag::err_illegal_decl_array_of_references)
1067      << getPrintableNameForEntity(Entity) << T;
1068      return QualType();
1069    }
1070
1071    if (T->isVoidType()) {
1072      Diag(Loc, diag::err_illegal_decl_array_incomplete_type) << T;
1073      return QualType();
1074    }
1075
1076    if (RequireNonAbstractType(Brackets.getBegin(), T,
1077                               diag::err_array_of_abstract_type))
1078      return QualType();
1079
1080  } else {
1081    // C99 6.7.5.2p1: If the element type is an incomplete or function type,
1082    // reject it (e.g. void ary[7], struct foo ary[7], void ary[7]())
1083    if (RequireCompleteType(Loc, T,
1084                            diag::err_illegal_decl_array_incomplete_type))
1085      return QualType();
1086  }
1087
1088  if (T->isFunctionType()) {
1089    Diag(Loc, diag::err_illegal_decl_array_of_functions)
1090      << getPrintableNameForEntity(Entity) << T;
1091    return QualType();
1092  }
1093
1094  if (T->getContainedAutoType()) {
1095    Diag(Loc, diag::err_illegal_decl_array_of_auto)
1096      << getPrintableNameForEntity(Entity) << T;
1097    return QualType();
1098  }
1099
1100  if (const RecordType *EltTy = T->getAs<RecordType>()) {
1101    // If the element type is a struct or union that contains a variadic
1102    // array, accept it as a GNU extension: C99 6.7.2.1p2.
1103    if (EltTy->getDecl()->hasFlexibleArrayMember())
1104      Diag(Loc, diag::ext_flexible_array_in_array) << T;
1105  } else if (T->isObjCObjectType()) {
1106    Diag(Loc, diag::err_objc_array_of_interfaces) << T;
1107    return QualType();
1108  }
1109
1110  // Do lvalue-to-rvalue conversions on the array size expression.
1111  if (ArraySize && !ArraySize->isRValue())
1112    DefaultLvalueConversion(ArraySize);
1113
1114  // C99 6.7.5.2p1: The size expression shall have integer type.
1115  // TODO: in theory, if we were insane, we could allow contextual
1116  // conversions to integer type here.
1117  if (ArraySize && !ArraySize->isTypeDependent() &&
1118      !ArraySize->getType()->isIntegralOrUnscopedEnumerationType()) {
1119    Diag(ArraySize->getLocStart(), diag::err_array_size_non_int)
1120      << ArraySize->getType() << ArraySize->getSourceRange();
1121    return QualType();
1122  }
1123  llvm::APSInt ConstVal(Context.getTypeSize(Context.getSizeType()));
1124  if (!ArraySize) {
1125    if (ASM == ArrayType::Star)
1126      T = Context.getVariableArrayType(T, 0, ASM, Quals, Brackets);
1127    else
1128      T = Context.getIncompleteArrayType(T, ASM, Quals);
1129  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {
1130    T = Context.getDependentSizedArrayType(T, ArraySize, ASM, Quals, Brackets);
1131  } else if (!ArraySize->isIntegerConstantExpr(ConstVal, Context) ||
1132             (!T->isDependentType() && !T->isIncompleteType() &&
1133              !T->isConstantSizeType())) {
1134    // Per C99, a variable array is an array with either a non-constant
1135    // size or an element type that has a non-constant-size
1136    T = Context.getVariableArrayType(T, ArraySize, ASM, Quals, Brackets);
1137  } else {
1138    // C99 6.7.5.2p1: If the expression is a constant expression, it shall
1139    // have a value greater than zero.
1140    if (ConstVal.isSigned() && ConstVal.isNegative()) {
1141      if (Entity)
1142        Diag(ArraySize->getLocStart(), diag::err_decl_negative_array_size)
1143          << getPrintableNameForEntity(Entity) << ArraySize->getSourceRange();
1144      else
1145        Diag(ArraySize->getLocStart(), diag::err_typecheck_negative_array_size)
1146          << ArraySize->getSourceRange();
1147      return QualType();
1148    }
1149    if (ConstVal == 0) {
1150      // GCC accepts zero sized static arrays. We allow them when
1151      // we're not in a SFINAE context.
1152      Diag(ArraySize->getLocStart(),
1153           isSFINAEContext()? diag::err_typecheck_zero_array_size
1154                            : diag::ext_typecheck_zero_array_size)
1155        << ArraySize->getSourceRange();
1156    } else if (!T->isDependentType() && !T->isVariablyModifiedType() &&
1157               !T->isIncompleteType()) {
1158      // Is the array too large?
1159      unsigned ActiveSizeBits
1160        = ConstantArrayType::getNumAddressingBits(Context, T, ConstVal);
1161      if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context))
1162        Diag(ArraySize->getLocStart(), diag::err_array_too_large)
1163          << ConstVal.toString(10)
1164          << ArraySize->getSourceRange();
1165    }
1166
1167    T = Context.getConstantArrayType(T, ConstVal, ASM, Quals);
1168  }
1169  // If this is not C99, extwarn about VLA's and C99 array size modifiers.
1170  if (!getLangOptions().C99) {
1171    if (T->isVariableArrayType()) {
1172      // Prohibit the use of non-POD types in VLAs.
1173      if (!T->isDependentType() &&
1174          !Context.getBaseElementType(T)->isPODType()) {
1175        Diag(Loc, diag::err_vla_non_pod)
1176          << Context.getBaseElementType(T);
1177        return QualType();
1178      }
1179      // Prohibit the use of VLAs during template argument deduction.
1180      else if (isSFINAEContext()) {
1181        Diag(Loc, diag::err_vla_in_sfinae);
1182        return QualType();
1183      }
1184      // Just extwarn about VLAs.
1185      else
1186        Diag(Loc, diag::ext_vla);
1187    } else if (ASM != ArrayType::Normal || Quals != 0)
1188      Diag(Loc,
1189           getLangOptions().CPlusPlus? diag::err_c99_array_usage_cxx
1190                                     : diag::ext_c99_array_usage);
1191  }
1192
1193  return T;
1194}
1195
1196/// \brief Build an ext-vector type.
1197///
1198/// Run the required checks for the extended vector type.
1199QualType Sema::BuildExtVectorType(QualType T, Expr *ArraySize,
1200                                  SourceLocation AttrLoc) {
1201  // unlike gcc's vector_size attribute, we do not allow vectors to be defined
1202  // in conjunction with complex types (pointers, arrays, functions, etc.).
1203  if (!T->isDependentType() &&
1204      !T->isIntegerType() && !T->isRealFloatingType()) {
1205    Diag(AttrLoc, diag::err_attribute_invalid_vector_type) << T;
1206    return QualType();
1207  }
1208
1209  if (!ArraySize->isTypeDependent() && !ArraySize->isValueDependent()) {
1210    llvm::APSInt vecSize(32);
1211    if (!ArraySize->isIntegerConstantExpr(vecSize, Context)) {
1212      Diag(AttrLoc, diag::err_attribute_argument_not_int)
1213        << "ext_vector_type" << ArraySize->getSourceRange();
1214      return QualType();
1215    }
1216
1217    // unlike gcc's vector_size attribute, the size is specified as the
1218    // number of elements, not the number of bytes.
1219    unsigned vectorSize = static_cast<unsigned>(vecSize.getZExtValue());
1220
1221    if (vectorSize == 0) {
1222      Diag(AttrLoc, diag::err_attribute_zero_size)
1223      << ArraySize->getSourceRange();
1224      return QualType();
1225    }
1226
1227    if (!T->isDependentType())
1228      return Context.getExtVectorType(T, vectorSize);
1229  }
1230
1231  return Context.getDependentSizedExtVectorType(T, ArraySize, AttrLoc);
1232}
1233
1234/// \brief Build a function type.
1235///
1236/// This routine checks the function type according to C++ rules and
1237/// under the assumption that the result type and parameter types have
1238/// just been instantiated from a template. It therefore duplicates
1239/// some of the behavior of GetTypeForDeclarator, but in a much
1240/// simpler form that is only suitable for this narrow use case.
1241///
1242/// \param T The return type of the function.
1243///
1244/// \param ParamTypes The parameter types of the function. This array
1245/// will be modified to account for adjustments to the types of the
1246/// function parameters.
1247///
1248/// \param NumParamTypes The number of parameter types in ParamTypes.
1249///
1250/// \param Variadic Whether this is a variadic function type.
1251///
1252/// \param Quals The cvr-qualifiers to be applied to the function type.
1253///
1254/// \param Loc The location of the entity whose type involves this
1255/// function type or, if there is no such entity, the location of the
1256/// type that will have function type.
1257///
1258/// \param Entity The name of the entity that involves the function
1259/// type, if known.
1260///
1261/// \returns A suitable function type, if there are no
1262/// errors. Otherwise, returns a NULL type.
1263QualType Sema::BuildFunctionType(QualType T,
1264                                 QualType *ParamTypes,
1265                                 unsigned NumParamTypes,
1266                                 bool Variadic, unsigned Quals,
1267                                 RefQualifierKind RefQualifier,
1268                                 SourceLocation Loc, DeclarationName Entity,
1269                                 FunctionType::ExtInfo Info) {
1270  if (T->isArrayType() || T->isFunctionType()) {
1271    Diag(Loc, diag::err_func_returning_array_function)
1272      << T->isFunctionType() << T;
1273    return QualType();
1274  }
1275
1276  bool Invalid = false;
1277  for (unsigned Idx = 0; Idx < NumParamTypes; ++Idx) {
1278    QualType ParamType = adjustParameterType(ParamTypes[Idx]);
1279    if (ParamType->isVoidType()) {
1280      Diag(Loc, diag::err_param_with_void_type);
1281      Invalid = true;
1282    }
1283
1284    ParamTypes[Idx] = ParamType;
1285  }
1286
1287  if (Invalid)
1288    return QualType();
1289
1290  FunctionProtoType::ExtProtoInfo EPI;
1291  EPI.Variadic = Variadic;
1292  EPI.TypeQuals = Quals;
1293  EPI.RefQualifier = RefQualifier;
1294  EPI.ExtInfo = Info;
1295
1296  return Context.getFunctionType(T, ParamTypes, NumParamTypes, EPI);
1297}
1298
1299/// \brief Build a member pointer type \c T Class::*.
1300///
1301/// \param T the type to which the member pointer refers.
1302/// \param Class the class type into which the member pointer points.
1303/// \param CVR Qualifiers applied to the member pointer type
1304/// \param Loc the location where this type begins
1305/// \param Entity the name of the entity that will have this member pointer type
1306///
1307/// \returns a member pointer type, if successful, or a NULL type if there was
1308/// an error.
1309QualType Sema::BuildMemberPointerType(QualType T, QualType Class,
1310                                      SourceLocation Loc,
1311                                      DeclarationName Entity) {
1312  // Verify that we're not building a pointer to pointer to function with
1313  // exception specification.
1314  if (CheckDistantExceptionSpec(T)) {
1315    Diag(Loc, diag::err_distant_exception_spec);
1316
1317    // FIXME: If we're doing this as part of template instantiation,
1318    // we should return immediately.
1319
1320    // Build the type anyway, but use the canonical type so that the
1321    // exception specifiers are stripped off.
1322    T = Context.getCanonicalType(T);
1323  }
1324
1325  // C++ 8.3.3p3: A pointer to member shall not point to ... a member
1326  //   with reference type, or "cv void."
1327  if (T->isReferenceType()) {
1328    Diag(Loc, diag::err_illegal_decl_mempointer_to_reference)
1329      << (Entity? Entity.getAsString() : "type name") << T;
1330    return QualType();
1331  }
1332
1333  if (T->isVoidType()) {
1334    Diag(Loc, diag::err_illegal_decl_mempointer_to_void)
1335      << (Entity? Entity.getAsString() : "type name");
1336    return QualType();
1337  }
1338
1339  if (!Class->isDependentType() && !Class->isRecordType()) {
1340    Diag(Loc, diag::err_mempointer_in_nonclass_type) << Class;
1341    return QualType();
1342  }
1343
1344  // In the Microsoft ABI, the class is allowed to be an incomplete
1345  // type. In such cases, the compiler makes a worst-case assumption.
1346  // We make no such assumption right now, so emit an error if the
1347  // class isn't a complete type.
1348  if (Context.Target.getCXXABI() == CXXABI_Microsoft &&
1349      RequireCompleteType(Loc, Class, diag::err_incomplete_type))
1350    return QualType();
1351
1352  return Context.getMemberPointerType(T, Class.getTypePtr());
1353}
1354
1355/// \brief Build a block pointer type.
1356///
1357/// \param T The type to which we'll be building a block pointer.
1358///
1359/// \param CVR The cvr-qualifiers to be applied to the block pointer type.
1360///
1361/// \param Loc The location of the entity whose type involves this
1362/// block pointer type or, if there is no such entity, the location of the
1363/// type that will have block pointer type.
1364///
1365/// \param Entity The name of the entity that involves the block pointer
1366/// type, if known.
1367///
1368/// \returns A suitable block pointer type, if there are no
1369/// errors. Otherwise, returns a NULL type.
1370QualType Sema::BuildBlockPointerType(QualType T,
1371                                     SourceLocation Loc,
1372                                     DeclarationName Entity) {
1373  if (!T->isFunctionType()) {
1374    Diag(Loc, diag::err_nonfunction_block_type);
1375    return QualType();
1376  }
1377
1378  return Context.getBlockPointerType(T);
1379}
1380
1381QualType Sema::GetTypeFromParser(ParsedType Ty, TypeSourceInfo **TInfo) {
1382  QualType QT = Ty.get();
1383  if (QT.isNull()) {
1384    if (TInfo) *TInfo = 0;
1385    return QualType();
1386  }
1387
1388  TypeSourceInfo *DI = 0;
1389  if (const LocInfoType *LIT = dyn_cast<LocInfoType>(QT)) {
1390    QT = LIT->getType();
1391    DI = LIT->getTypeSourceInfo();
1392  }
1393
1394  if (TInfo) *TInfo = DI;
1395  return QT;
1396}
1397
1398static void DiagnoseIgnoredQualifiers(unsigned Quals,
1399                                      SourceLocation ConstQualLoc,
1400                                      SourceLocation VolatileQualLoc,
1401                                      SourceLocation RestrictQualLoc,
1402                                      Sema& S) {
1403  std::string QualStr;
1404  unsigned NumQuals = 0;
1405  SourceLocation Loc;
1406
1407  FixItHint ConstFixIt;
1408  FixItHint VolatileFixIt;
1409  FixItHint RestrictFixIt;
1410
1411  // FIXME: The locations here are set kind of arbitrarily. It'd be nicer to
1412  // find a range and grow it to encompass all the qualifiers, regardless of
1413  // the order in which they textually appear.
1414  if (Quals & Qualifiers::Const) {
1415    ConstFixIt = FixItHint::CreateRemoval(ConstQualLoc);
1416    Loc = ConstQualLoc;
1417    ++NumQuals;
1418    QualStr = "const";
1419  }
1420  if (Quals & Qualifiers::Volatile) {
1421    VolatileFixIt = FixItHint::CreateRemoval(VolatileQualLoc);
1422    if (NumQuals == 0) {
1423      Loc = VolatileQualLoc;
1424      QualStr = "volatile";
1425    } else {
1426      QualStr += " volatile";
1427    }
1428    ++NumQuals;
1429  }
1430  if (Quals & Qualifiers::Restrict) {
1431    RestrictFixIt = FixItHint::CreateRemoval(RestrictQualLoc);
1432    if (NumQuals == 0) {
1433      Loc = RestrictQualLoc;
1434      QualStr = "restrict";
1435    } else {
1436      QualStr += " restrict";
1437    }
1438    ++NumQuals;
1439  }
1440
1441  assert(NumQuals > 0 && "No known qualifiers?");
1442
1443  S.Diag(Loc, diag::warn_qual_return_type)
1444    << QualStr << NumQuals
1445    << ConstFixIt << VolatileFixIt << RestrictFixIt;
1446}
1447
1448/// GetTypeForDeclarator - Convert the type for the specified
1449/// declarator to Type instances.
1450///
1451/// If OwnedDecl is non-NULL, and this declarator's decl-specifier-seq
1452/// owns the declaration of a type (e.g., the definition of a struct
1453/// type), then *OwnedDecl will receive the owned declaration.
1454///
1455/// The result of this call will never be null, but the associated
1456/// type may be a null type if there's an unrecoverable error.
1457TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S,
1458                                           TagDecl **OwnedDecl,
1459                                           bool AutoAllowedInTypeName) {
1460  // Determine the type of the declarator. Not all forms of declarator
1461  // have a type.
1462  QualType T;
1463  TypeSourceInfo *ReturnTypeInfo = 0;
1464
1465  TypeProcessingState state(*this, D);
1466
1467  switch (D.getName().getKind()) {
1468  case UnqualifiedId::IK_Identifier:
1469  case UnqualifiedId::IK_OperatorFunctionId:
1470  case UnqualifiedId::IK_LiteralOperatorId:
1471  case UnqualifiedId::IK_TemplateId:
1472    T = ConvertDeclSpecToType(*this, state);
1473
1474    if (!D.isInvalidType() && D.getDeclSpec().isTypeSpecOwned()) {
1475      TagDecl* Owned = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
1476      // Owned is embedded if it was defined here, or if it is the
1477      // very first (i.e., canonical) declaration of this tag type.
1478      Owned->setEmbeddedInDeclarator(Owned->isDefinition() ||
1479                                     Owned->isCanonicalDecl());
1480      if (OwnedDecl) *OwnedDecl = Owned;
1481    }
1482    break;
1483
1484  case UnqualifiedId::IK_ConstructorName:
1485  case UnqualifiedId::IK_ConstructorTemplateId:
1486  case UnqualifiedId::IK_DestructorName:
1487    // Constructors and destructors don't have return types. Use
1488    // "void" instead.
1489    T = Context.VoidTy;
1490    break;
1491
1492  case UnqualifiedId::IK_ConversionFunctionId:
1493    // The result type of a conversion function is the type that it
1494    // converts to.
1495    T = GetTypeFromParser(D.getName().ConversionFunctionId,
1496                          &ReturnTypeInfo);
1497    break;
1498  }
1499
1500  if (D.getAttributes())
1501    distributeTypeAttrsFromDeclarator(state, T);
1502
1503  // C++0x [dcl.spec.auto]p5: reject 'auto' if it is not in an allowed context.
1504  // In C++0x, a function declarator using 'auto' must have a trailing return
1505  // type (this is checked later) and we can skip this. In other languages
1506  // using auto, we need to check regardless.
1507  if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
1508      (!getLangOptions().CPlusPlus0x || !D.isFunctionDeclarator())) {
1509    int Error = -1;
1510
1511    switch (D.getContext()) {
1512    case Declarator::KNRTypeListContext:
1513      assert(0 && "K&R type lists aren't allowed in C++");
1514      break;
1515    case Declarator::PrototypeContext:
1516      Error = 0; // Function prototype
1517      break;
1518    case Declarator::MemberContext:
1519      switch (cast<TagDecl>(CurContext)->getTagKind()) {
1520      case TTK_Enum: assert(0 && "unhandled tag kind"); break;
1521      case TTK_Struct: Error = 1; /* Struct member */ break;
1522      case TTK_Union:  Error = 2; /* Union member */ break;
1523      case TTK_Class:  Error = 3; /* Class member */ break;
1524      }
1525      break;
1526    case Declarator::CXXCatchContext:
1527      Error = 4; // Exception declaration
1528      break;
1529    case Declarator::TemplateParamContext:
1530      Error = 5; // Template parameter
1531      break;
1532    case Declarator::BlockLiteralContext:
1533      Error = 6; // Block literal
1534      break;
1535    case Declarator::TemplateTypeArgContext:
1536      Error = 7; // Template type argument
1537      break;
1538    case Declarator::TypeNameContext:
1539      if (!AutoAllowedInTypeName)
1540        Error = 10; // Generic
1541      break;
1542    case Declarator::FileContext:
1543    case Declarator::BlockContext:
1544    case Declarator::ForContext:
1545    case Declarator::ConditionContext:
1546      break;
1547    }
1548
1549    if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
1550      Error = 8;
1551
1552    // In Objective-C it is an error to use 'auto' on a function declarator.
1553    if (D.isFunctionDeclarator())
1554      Error = 9;
1555
1556    // C++0x [dcl.spec.auto]p2: 'auto' is always fine if the declarator
1557    // contains a trailing return type. That is only legal at the outermost
1558    // level. Check all declarator chunks (outermost first) anyway, to give
1559    // better diagnostics.
1560    if (getLangOptions().CPlusPlus0x && Error != -1) {
1561      for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
1562        unsigned chunkIndex = e - i - 1;
1563        state.setCurrentChunkIndex(chunkIndex);
1564        DeclaratorChunk &DeclType = D.getTypeObject(chunkIndex);
1565        if (DeclType.Kind == DeclaratorChunk::Function) {
1566          const DeclaratorChunk::FunctionTypeInfo &FTI = DeclType.Fun;
1567          if (FTI.TrailingReturnType) {
1568            Error = -1;
1569            break;
1570          }
1571        }
1572      }
1573    }
1574
1575    if (Error != -1) {
1576      Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_auto_not_allowed)
1577        << Error;
1578      T = Context.IntTy;
1579      D.setInvalidType(true);
1580    }
1581  }
1582
1583  if (T.isNull())
1584    return Context.getNullTypeSourceInfo();
1585
1586  // The name we're declaring, if any.
1587  DeclarationName Name;
1588  if (D.getIdentifier())
1589    Name = D.getIdentifier();
1590
1591  // Walk the DeclTypeInfo, building the recursive type as we go.
1592  // DeclTypeInfos are ordered from the identifier out, which is
1593  // opposite of what we want :).
1594  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
1595    unsigned chunkIndex = e - i - 1;
1596    state.setCurrentChunkIndex(chunkIndex);
1597    DeclaratorChunk &DeclType = D.getTypeObject(chunkIndex);
1598    switch (DeclType.Kind) {
1599    default: assert(0 && "Unknown decltype!");
1600    case DeclaratorChunk::Paren:
1601      T = BuildParenType(T);
1602      break;
1603    case DeclaratorChunk::BlockPointer:
1604      // If blocks are disabled, emit an error.
1605      if (!LangOpts.Blocks)
1606        Diag(DeclType.Loc, diag::err_blocks_disable);
1607
1608      T = BuildBlockPointerType(T, D.getIdentifierLoc(), Name);
1609      if (DeclType.Cls.TypeQuals)
1610        T = BuildQualifiedType(T, DeclType.Loc, DeclType.Cls.TypeQuals);
1611      break;
1612    case DeclaratorChunk::Pointer:
1613      // Verify that we're not building a pointer to pointer to function with
1614      // exception specification.
1615      if (getLangOptions().CPlusPlus && CheckDistantExceptionSpec(T)) {
1616        Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);
1617        D.setInvalidType(true);
1618        // Build the type anyway.
1619      }
1620      if (getLangOptions().ObjC1 && T->getAs<ObjCObjectType>()) {
1621        T = Context.getObjCObjectPointerType(T);
1622        if (DeclType.Ptr.TypeQuals)
1623          T = BuildQualifiedType(T, DeclType.Loc, DeclType.Ptr.TypeQuals);
1624        break;
1625      }
1626      T = BuildPointerType(T, DeclType.Loc, Name);
1627      if (DeclType.Ptr.TypeQuals)
1628        T = BuildQualifiedType(T, DeclType.Loc, DeclType.Ptr.TypeQuals);
1629
1630      break;
1631    case DeclaratorChunk::Reference: {
1632      // Verify that we're not building a reference to pointer to function with
1633      // exception specification.
1634      if (getLangOptions().CPlusPlus && CheckDistantExceptionSpec(T)) {
1635        Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);
1636        D.setInvalidType(true);
1637        // Build the type anyway.
1638      }
1639      T = BuildReferenceType(T, DeclType.Ref.LValueRef, DeclType.Loc, Name);
1640
1641      Qualifiers Quals;
1642      if (DeclType.Ref.HasRestrict)
1643        T = BuildQualifiedType(T, DeclType.Loc, Qualifiers::Restrict);
1644      break;
1645    }
1646    case DeclaratorChunk::Array: {
1647      // Verify that we're not building an array of pointers to function with
1648      // exception specification.
1649      if (getLangOptions().CPlusPlus && CheckDistantExceptionSpec(T)) {
1650        Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);
1651        D.setInvalidType(true);
1652        // Build the type anyway.
1653      }
1654      DeclaratorChunk::ArrayTypeInfo &ATI = DeclType.Arr;
1655      Expr *ArraySize = static_cast<Expr*>(ATI.NumElts);
1656      ArrayType::ArraySizeModifier ASM;
1657      if (ATI.isStar)
1658        ASM = ArrayType::Star;
1659      else if (ATI.hasStatic)
1660        ASM = ArrayType::Static;
1661      else
1662        ASM = ArrayType::Normal;
1663      if (ASM == ArrayType::Star &&
1664          D.getContext() != Declarator::PrototypeContext) {
1665        // FIXME: This check isn't quite right: it allows star in prototypes
1666        // for function definitions, and disallows some edge cases detailed
1667        // in http://gcc.gnu.org/ml/gcc-patches/2009-02/msg00133.html
1668        Diag(DeclType.Loc, diag::err_array_star_outside_prototype);
1669        ASM = ArrayType::Normal;
1670        D.setInvalidType(true);
1671      }
1672      T = BuildArrayType(T, ASM, ArraySize,
1673                         Qualifiers::fromCVRMask(ATI.TypeQuals),
1674                         SourceRange(DeclType.Loc, DeclType.EndLoc), Name);
1675      break;
1676    }
1677    case DeclaratorChunk::Function: {
1678      // If the function declarator has a prototype (i.e. it is not () and
1679      // does not have a K&R-style identifier list), then the arguments are part
1680      // of the type, otherwise the argument list is ().
1681      const DeclaratorChunk::FunctionTypeInfo &FTI = DeclType.Fun;
1682
1683      // Check for auto functions and trailing return type and adjust the
1684      // return type accordingly.
1685      if (!D.isInvalidType()) {
1686        // trailing-return-type is only required if we're declaring a function,
1687        // and not, for instance, a pointer to a function.
1688        if (D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto &&
1689            !FTI.TrailingReturnType && chunkIndex == 0) {
1690          Diag(D.getDeclSpec().getTypeSpecTypeLoc(),
1691               diag::err_auto_missing_trailing_return);
1692          T = Context.IntTy;
1693          D.setInvalidType(true);
1694        } else if (FTI.TrailingReturnType) {
1695          // T must be exactly 'auto' at this point. See CWG issue 681.
1696          if (isa<ParenType>(T)) {
1697            Diag(D.getDeclSpec().getTypeSpecTypeLoc(),
1698                 diag::err_trailing_return_in_parens)
1699              << T << D.getDeclSpec().getSourceRange();
1700            D.setInvalidType(true);
1701          } else if (T.hasQualifiers() || !isa<AutoType>(T)) {
1702            Diag(D.getDeclSpec().getTypeSpecTypeLoc(),
1703                 diag::err_trailing_return_without_auto)
1704              << T << D.getDeclSpec().getSourceRange();
1705            D.setInvalidType(true);
1706          }
1707
1708          T = GetTypeFromParser(
1709            ParsedType::getFromOpaquePtr(FTI.TrailingReturnType),
1710            &ReturnTypeInfo);
1711        }
1712      }
1713
1714      // C99 6.7.5.3p1: The return type may not be a function or array type.
1715      // For conversion functions, we'll diagnose this particular error later.
1716      if ((T->isArrayType() || T->isFunctionType()) &&
1717          (D.getName().getKind() != UnqualifiedId::IK_ConversionFunctionId)) {
1718        unsigned diagID = diag::err_func_returning_array_function;
1719        // Last processing chunk in block context means this function chunk
1720        // represents the block.
1721        if (chunkIndex == 0 &&
1722            D.getContext() == Declarator::BlockLiteralContext)
1723          diagID = diag::err_block_returning_array_function;
1724        Diag(DeclType.Loc, diagID) << T->isFunctionType() << T;
1725        T = Context.IntTy;
1726        D.setInvalidType(true);
1727      }
1728
1729      // cv-qualifiers on return types are pointless except when the type is a
1730      // class type in C++.
1731      if (isa<PointerType>(T) && T.getLocalCVRQualifiers() &&
1732          (!getLangOptions().CPlusPlus || !T->isDependentType())) {
1733        assert(chunkIndex + 1 < e && "No DeclaratorChunk for the return type?");
1734        DeclaratorChunk ReturnTypeChunk = D.getTypeObject(chunkIndex + 1);
1735        assert(ReturnTypeChunk.Kind == DeclaratorChunk::Pointer);
1736
1737        DeclaratorChunk::PointerTypeInfo &PTI = ReturnTypeChunk.Ptr;
1738
1739        DiagnoseIgnoredQualifiers(PTI.TypeQuals,
1740            SourceLocation::getFromRawEncoding(PTI.ConstQualLoc),
1741            SourceLocation::getFromRawEncoding(PTI.VolatileQualLoc),
1742            SourceLocation::getFromRawEncoding(PTI.RestrictQualLoc),
1743            *this);
1744
1745      } else if (T.getCVRQualifiers() && D.getDeclSpec().getTypeQualifiers() &&
1746          (!getLangOptions().CPlusPlus ||
1747           (!T->isDependentType() && !T->isRecordType()))) {
1748
1749        DiagnoseIgnoredQualifiers(D.getDeclSpec().getTypeQualifiers(),
1750                                  D.getDeclSpec().getConstSpecLoc(),
1751                                  D.getDeclSpec().getVolatileSpecLoc(),
1752                                  D.getDeclSpec().getRestrictSpecLoc(),
1753                                  *this);
1754      }
1755
1756      if (getLangOptions().CPlusPlus && D.getDeclSpec().isTypeSpecOwned()) {
1757        // C++ [dcl.fct]p6:
1758        //   Types shall not be defined in return or parameter types.
1759        TagDecl *Tag = cast<TagDecl>(D.getDeclSpec().getRepAsDecl());
1760        if (Tag->isDefinition())
1761          Diag(Tag->getLocation(), diag::err_type_defined_in_result_type)
1762            << Context.getTypeDeclType(Tag);
1763      }
1764
1765      // Exception specs are not allowed in typedefs. Complain, but add it
1766      // anyway.
1767      if (FTI.hasExceptionSpec &&
1768          D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
1769        Diag(FTI.getThrowLoc(), diag::err_exception_spec_in_typedef);
1770
1771      if (!FTI.NumArgs && !FTI.isVariadic && !getLangOptions().CPlusPlus) {
1772        // Simple void foo(), where the incoming T is the result type.
1773        T = Context.getFunctionNoProtoType(T);
1774      } else {
1775        // We allow a zero-parameter variadic function in C if the
1776        // function is marked with the "overloadable" attribute. Scan
1777        // for this attribute now.
1778        if (!FTI.NumArgs && FTI.isVariadic && !getLangOptions().CPlusPlus) {
1779          bool Overloadable = false;
1780          for (const AttributeList *Attrs = D.getAttributes();
1781               Attrs; Attrs = Attrs->getNext()) {
1782            if (Attrs->getKind() == AttributeList::AT_overloadable) {
1783              Overloadable = true;
1784              break;
1785            }
1786          }
1787
1788          if (!Overloadable)
1789            Diag(FTI.getEllipsisLoc(), diag::err_ellipsis_first_arg);
1790        }
1791
1792        if (FTI.NumArgs && FTI.ArgInfo[0].Param == 0) {
1793          // C99 6.7.5.3p3: Reject int(x,y,z) when it's not a function
1794          // definition.
1795          Diag(FTI.ArgInfo[0].IdentLoc, diag::err_ident_list_in_fn_declaration);
1796          D.setInvalidType(true);
1797          break;
1798        }
1799
1800        FunctionProtoType::ExtProtoInfo EPI;
1801        EPI.Variadic = FTI.isVariadic;
1802        EPI.TypeQuals = FTI.TypeQuals;
1803        EPI.RefQualifier = !FTI.hasRefQualifier()? RQ_None
1804                    : FTI.RefQualifierIsLValueRef? RQ_LValue
1805                    : RQ_RValue;
1806
1807        // Otherwise, we have a function with an argument list that is
1808        // potentially variadic.
1809        llvm::SmallVector<QualType, 16> ArgTys;
1810        ArgTys.reserve(FTI.NumArgs);
1811
1812        for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
1813          ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param);
1814          QualType ArgTy = Param->getType();
1815          assert(!ArgTy.isNull() && "Couldn't parse type?");
1816
1817          // Adjust the parameter type.
1818          assert((ArgTy == adjustParameterType(ArgTy)) && "Unadjusted type?");
1819
1820          // Look for 'void'.  void is allowed only as a single argument to a
1821          // function with no other parameters (C99 6.7.5.3p10).  We record
1822          // int(void) as a FunctionProtoType with an empty argument list.
1823          if (ArgTy->isVoidType()) {
1824            // If this is something like 'float(int, void)', reject it.  'void'
1825            // is an incomplete type (C99 6.2.5p19) and function decls cannot
1826            // have arguments of incomplete type.
1827            if (FTI.NumArgs != 1 || FTI.isVariadic) {
1828              Diag(DeclType.Loc, diag::err_void_only_param);
1829              ArgTy = Context.IntTy;
1830              Param->setType(ArgTy);
1831            } else if (FTI.ArgInfo[i].Ident) {
1832              // Reject, but continue to parse 'int(void abc)'.
1833              Diag(FTI.ArgInfo[i].IdentLoc,
1834                   diag::err_param_with_void_type);
1835              ArgTy = Context.IntTy;
1836              Param->setType(ArgTy);
1837            } else {
1838              // Reject, but continue to parse 'float(const void)'.
1839              if (ArgTy.hasQualifiers())
1840                Diag(DeclType.Loc, diag::err_void_param_qualified);
1841
1842              // Do not add 'void' to the ArgTys list.
1843              break;
1844            }
1845          } else if (!FTI.hasPrototype) {
1846            if (ArgTy->isPromotableIntegerType()) {
1847              ArgTy = Context.getPromotedIntegerType(ArgTy);
1848            } else if (const BuiltinType* BTy = ArgTy->getAs<BuiltinType>()) {
1849              if (BTy->getKind() == BuiltinType::Float)
1850                ArgTy = Context.DoubleTy;
1851            }
1852          }
1853
1854          ArgTys.push_back(ArgTy);
1855        }
1856
1857        llvm::SmallVector<QualType, 4> Exceptions;
1858        if (FTI.hasExceptionSpec) {
1859          EPI.HasExceptionSpec = FTI.hasExceptionSpec;
1860          EPI.HasAnyExceptionSpec = FTI.hasAnyExceptionSpec;
1861          Exceptions.reserve(FTI.NumExceptions);
1862          for (unsigned ei = 0, ee = FTI.NumExceptions; ei != ee; ++ei) {
1863            // FIXME: Preserve type source info.
1864            QualType ET = GetTypeFromParser(FTI.Exceptions[ei].Ty);
1865            // Check that the type is valid for an exception spec, and
1866            // drop it if not.
1867            if (!CheckSpecifiedExceptionType(ET, FTI.Exceptions[ei].Range))
1868              Exceptions.push_back(ET);
1869          }
1870          EPI.NumExceptions = Exceptions.size();
1871          EPI.Exceptions = Exceptions.data();
1872        }
1873
1874        T = Context.getFunctionType(T, ArgTys.data(), ArgTys.size(), EPI);
1875      }
1876
1877      break;
1878    }
1879    case DeclaratorChunk::MemberPointer:
1880      // The scope spec must refer to a class, or be dependent.
1881      CXXScopeSpec &SS = DeclType.Mem.Scope();
1882      QualType ClsType;
1883      if (SS.isInvalid()) {
1884        // Avoid emitting extra errors if we already errored on the scope.
1885        D.setInvalidType(true);
1886      } else if (isDependentScopeSpecifier(SS) ||
1887                 dyn_cast_or_null<CXXRecordDecl>(computeDeclContext(SS))) {
1888        NestedNameSpecifier *NNS
1889          = static_cast<NestedNameSpecifier*>(SS.getScopeRep());
1890        NestedNameSpecifier *NNSPrefix = NNS->getPrefix();
1891        switch (NNS->getKind()) {
1892        case NestedNameSpecifier::Identifier:
1893          ClsType = Context.getDependentNameType(ETK_None, NNSPrefix,
1894                                                 NNS->getAsIdentifier());
1895          break;
1896
1897        case NestedNameSpecifier::Namespace:
1898        case NestedNameSpecifier::NamespaceAlias:
1899        case NestedNameSpecifier::Global:
1900          llvm_unreachable("Nested-name-specifier must name a type");
1901          break;
1902
1903        case NestedNameSpecifier::TypeSpec:
1904        case NestedNameSpecifier::TypeSpecWithTemplate:
1905          ClsType = QualType(NNS->getAsType(), 0);
1906          // Note: if NNS is dependent, then its prefix (if any) is already
1907          // included in ClsType; this does not hold if the NNS is
1908          // nondependent: in this case (if there is indeed a prefix)
1909          // ClsType needs to be wrapped into an elaborated type.
1910          if (NNSPrefix && !NNS->isDependent())
1911            ClsType = Context.getElaboratedType(ETK_None, NNSPrefix, ClsType);
1912          break;
1913        }
1914      } else {
1915        Diag(DeclType.Mem.Scope().getBeginLoc(),
1916             diag::err_illegal_decl_mempointer_in_nonclass)
1917          << (D.getIdentifier() ? D.getIdentifier()->getName() : "type name")
1918          << DeclType.Mem.Scope().getRange();
1919        D.setInvalidType(true);
1920      }
1921
1922      if (!ClsType.isNull())
1923        T = BuildMemberPointerType(T, ClsType, DeclType.Loc, D.getIdentifier());
1924      if (T.isNull()) {
1925        T = Context.IntTy;
1926        D.setInvalidType(true);
1927      } else if (DeclType.Mem.TypeQuals) {
1928        T = BuildQualifiedType(T, DeclType.Loc, DeclType.Mem.TypeQuals);
1929      }
1930      break;
1931    }
1932
1933    if (T.isNull()) {
1934      D.setInvalidType(true);
1935      T = Context.IntTy;
1936    }
1937
1938    // See if there are any attributes on this declarator chunk.
1939    if (AttributeList *attrs = const_cast<AttributeList*>(DeclType.getAttrs()))
1940      processTypeAttrs(state, T, false, attrs);
1941  }
1942
1943  if (getLangOptions().CPlusPlus && T->isFunctionType()) {
1944    const FunctionProtoType *FnTy = T->getAs<FunctionProtoType>();
1945    assert(FnTy && "Why oh why is there not a FunctionProtoType here?");
1946
1947    // C++ 8.3.5p4:
1948    //   A cv-qualifier-seq shall only be part of the function type
1949    //   for a nonstatic member function, the function type to which a pointer
1950    //   to member refers, or the top-level function type of a function typedef
1951    //   declaration.
1952    //
1953    // Core issue 547 also allows cv-qualifiers on function types that are
1954    // top-level template type arguments.
1955    bool FreeFunction;
1956    if (!D.getCXXScopeSpec().isSet()) {
1957      FreeFunction = (D.getContext() != Declarator::MemberContext ||
1958                      D.getDeclSpec().isFriendSpecified());
1959    } else {
1960      DeclContext *DC = computeDeclContext(D.getCXXScopeSpec());
1961      FreeFunction = (DC && !DC->isRecord());
1962    }
1963
1964    // C++0x [dcl.fct]p6:
1965    //   A ref-qualifier shall only be part of the function type for a
1966    //   non-static member function, the function type to which a pointer to
1967    //   member refers, or the top-level function type of a function typedef
1968    //   declaration.
1969    if ((FnTy->getTypeQuals() != 0 || FnTy->getRefQualifier()) &&
1970        !(D.getContext() == Declarator::TemplateTypeArgContext &&
1971          !D.isFunctionDeclarator()) &&
1972        D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef &&
1973        (FreeFunction ||
1974         D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_static)) {
1975      if (D.getContext() == Declarator::TemplateTypeArgContext) {
1976        // Accept qualified function types as template type arguments as a GNU
1977        // extension. This is also the subject of C++ core issue 547.
1978        std::string Quals;
1979        if (FnTy->getTypeQuals() != 0)
1980          Quals = Qualifiers::fromCVRMask(FnTy->getTypeQuals()).getAsString();
1981
1982        switch (FnTy->getRefQualifier()) {
1983        case RQ_None:
1984          break;
1985
1986        case RQ_LValue:
1987          if (!Quals.empty())
1988            Quals += ' ';
1989          Quals += '&';
1990          break;
1991
1992        case RQ_RValue:
1993          if (!Quals.empty())
1994            Quals += ' ';
1995          Quals += "&&";
1996          break;
1997        }
1998
1999        Diag(D.getIdentifierLoc(),
2000             diag::ext_qualified_function_type_template_arg)
2001          << Quals;
2002      } else {
2003        if (FnTy->getTypeQuals() != 0) {
2004          if (D.isFunctionDeclarator())
2005            Diag(D.getIdentifierLoc(),
2006                 diag::err_invalid_qualified_function_type);
2007          else
2008            Diag(D.getIdentifierLoc(),
2009                 diag::err_invalid_qualified_typedef_function_type_use)
2010              << FreeFunction;
2011        }
2012
2013        if (FnTy->getRefQualifier()) {
2014          if (D.isFunctionDeclarator()) {
2015            SourceLocation Loc = D.getIdentifierLoc();
2016            for (unsigned I = 0, N = D.getNumTypeObjects(); I != N; ++I) {
2017              const DeclaratorChunk &Chunk = D.getTypeObject(N-I-1);
2018              if (Chunk.Kind == DeclaratorChunk::Function &&
2019                  Chunk.Fun.hasRefQualifier()) {
2020                Loc = Chunk.Fun.getRefQualifierLoc();
2021                break;
2022              }
2023            }
2024
2025            Diag(Loc, diag::err_invalid_ref_qualifier_function_type)
2026              << (FnTy->getRefQualifier() == RQ_LValue)
2027              << FixItHint::CreateRemoval(Loc);
2028          } else {
2029            Diag(D.getIdentifierLoc(),
2030                 diag::err_invalid_ref_qualifier_typedef_function_type_use)
2031              << FreeFunction
2032              << (FnTy->getRefQualifier() == RQ_LValue);
2033          }
2034        }
2035
2036        // Strip the cv-qualifiers and ref-qualifiers from the type.
2037        FunctionProtoType::ExtProtoInfo EPI = FnTy->getExtProtoInfo();
2038        EPI.TypeQuals = 0;
2039        EPI.RefQualifier = RQ_None;
2040
2041        T = Context.getFunctionType(FnTy->getResultType(),
2042                                    FnTy->arg_type_begin(),
2043                                    FnTy->getNumArgs(), EPI);
2044      }
2045    }
2046  }
2047
2048  // Apply any undistributed attributes from the declarator.
2049  if (!T.isNull())
2050    if (AttributeList *attrs = D.getAttributes())
2051      processTypeAttrs(state, T, false, attrs);
2052
2053  // Diagnose any ignored type attributes.
2054  if (!T.isNull()) state.diagnoseIgnoredTypeAttrs(T);
2055
2056  // If there's a constexpr specifier, treat it as a top-level const.
2057  if (D.getDeclSpec().isConstexprSpecified()) {
2058    T.addConst();
2059  }
2060
2061  // If there was an ellipsis in the declarator, the declaration declares a
2062  // parameter pack whose type may be a pack expansion type.
2063  if (D.hasEllipsis() && !T.isNull()) {
2064    // C++0x [dcl.fct]p13:
2065    //   A declarator-id or abstract-declarator containing an ellipsis shall
2066    //   only be used in a parameter-declaration. Such a parameter-declaration
2067    //   is a parameter pack (14.5.3). [...]
2068    switch (D.getContext()) {
2069    case Declarator::PrototypeContext:
2070      // C++0x [dcl.fct]p13:
2071      //   [...] When it is part of a parameter-declaration-clause, the
2072      //   parameter pack is a function parameter pack (14.5.3). The type T
2073      //   of the declarator-id of the function parameter pack shall contain
2074      //   a template parameter pack; each template parameter pack in T is
2075      //   expanded by the function parameter pack.
2076      //
2077      // We represent function parameter packs as function parameters whose
2078      // type is a pack expansion.
2079      if (!T->containsUnexpandedParameterPack()) {
2080        Diag(D.getEllipsisLoc(),
2081             diag::err_function_parameter_pack_without_parameter_packs)
2082          << T <<  D.getSourceRange();
2083        D.setEllipsisLoc(SourceLocation());
2084      } else {
2085        T = Context.getPackExpansionType(T, llvm::Optional<unsigned>());
2086      }
2087      break;
2088
2089    case Declarator::TemplateParamContext:
2090      // C++0x [temp.param]p15:
2091      //   If a template-parameter is a [...] is a parameter-declaration that
2092      //   declares a parameter pack (8.3.5), then the template-parameter is a
2093      //   template parameter pack (14.5.3).
2094      //
2095      // Note: core issue 778 clarifies that, if there are any unexpanded
2096      // parameter packs in the type of the non-type template parameter, then
2097      // it expands those parameter packs.
2098      if (T->containsUnexpandedParameterPack())
2099        T = Context.getPackExpansionType(T, llvm::Optional<unsigned>());
2100      else if (!getLangOptions().CPlusPlus0x)
2101        Diag(D.getEllipsisLoc(), diag::ext_variadic_templates);
2102      break;
2103
2104    case Declarator::FileContext:
2105    case Declarator::KNRTypeListContext:
2106    case Declarator::TypeNameContext:
2107    case Declarator::MemberContext:
2108    case Declarator::BlockContext:
2109    case Declarator::ForContext:
2110    case Declarator::ConditionContext:
2111    case Declarator::CXXCatchContext:
2112    case Declarator::BlockLiteralContext:
2113    case Declarator::TemplateTypeArgContext:
2114      // FIXME: We may want to allow parameter packs in block-literal contexts
2115      // in the future.
2116      Diag(D.getEllipsisLoc(), diag::err_ellipsis_in_declarator_not_parameter);
2117      D.setEllipsisLoc(SourceLocation());
2118      break;
2119    }
2120  }
2121
2122  if (T.isNull())
2123    return Context.getNullTypeSourceInfo();
2124  else if (D.isInvalidType())
2125    return Context.getTrivialTypeSourceInfo(T);
2126  return GetTypeSourceInfoForDeclarator(D, T, ReturnTypeInfo);
2127}
2128
2129namespace {
2130  class TypeSpecLocFiller : public TypeLocVisitor<TypeSpecLocFiller> {
2131    ASTContext &Context;
2132    const DeclSpec &DS;
2133
2134  public:
2135    TypeSpecLocFiller(ASTContext &Context, const DeclSpec &DS)
2136      : Context(Context), DS(DS) {}
2137
2138    void VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
2139      Visit(TL.getUnqualifiedLoc());
2140    }
2141    void VisitTypedefTypeLoc(TypedefTypeLoc TL) {
2142      TL.setNameLoc(DS.getTypeSpecTypeLoc());
2143    }
2144    void VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
2145      TL.setNameLoc(DS.getTypeSpecTypeLoc());
2146    }
2147    void VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
2148      // Handle the base type, which might not have been written explicitly.
2149      if (DS.getTypeSpecType() == DeclSpec::TST_unspecified) {
2150        TL.setHasBaseTypeAsWritten(false);
2151        TL.getBaseLoc().initialize(Context, SourceLocation());
2152      } else {
2153        TL.setHasBaseTypeAsWritten(true);
2154        Visit(TL.getBaseLoc());
2155      }
2156
2157      // Protocol qualifiers.
2158      if (DS.getProtocolQualifiers()) {
2159        assert(TL.getNumProtocols() > 0);
2160        assert(TL.getNumProtocols() == DS.getNumProtocolQualifiers());
2161        TL.setLAngleLoc(DS.getProtocolLAngleLoc());
2162        TL.setRAngleLoc(DS.getSourceRange().getEnd());
2163        for (unsigned i = 0, e = DS.getNumProtocolQualifiers(); i != e; ++i)
2164          TL.setProtocolLoc(i, DS.getProtocolLocs()[i]);
2165      } else {
2166        assert(TL.getNumProtocols() == 0);
2167        TL.setLAngleLoc(SourceLocation());
2168        TL.setRAngleLoc(SourceLocation());
2169      }
2170    }
2171    void VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
2172      TL.setStarLoc(SourceLocation());
2173      Visit(TL.getPointeeLoc());
2174    }
2175    void VisitTemplateSpecializationTypeLoc(TemplateSpecializationTypeLoc TL) {
2176      TypeSourceInfo *TInfo = 0;
2177      Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
2178
2179      // If we got no declarator info from previous Sema routines,
2180      // just fill with the typespec loc.
2181      if (!TInfo) {
2182        TL.initialize(Context, DS.getTypeSpecTypeLoc());
2183        return;
2184      }
2185
2186      TypeLoc OldTL = TInfo->getTypeLoc();
2187      if (TInfo->getType()->getAs<ElaboratedType>()) {
2188        ElaboratedTypeLoc ElabTL = cast<ElaboratedTypeLoc>(OldTL);
2189        TemplateSpecializationTypeLoc NamedTL =
2190          cast<TemplateSpecializationTypeLoc>(ElabTL.getNamedTypeLoc());
2191        TL.copy(NamedTL);
2192      }
2193      else
2194        TL.copy(cast<TemplateSpecializationTypeLoc>(OldTL));
2195    }
2196    void VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
2197      assert(DS.getTypeSpecType() == DeclSpec::TST_typeofExpr);
2198      TL.setTypeofLoc(DS.getTypeSpecTypeLoc());
2199      TL.setParensRange(DS.getTypeofParensRange());
2200    }
2201    void VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
2202      assert(DS.getTypeSpecType() == DeclSpec::TST_typeofType);
2203      TL.setTypeofLoc(DS.getTypeSpecTypeLoc());
2204      TL.setParensRange(DS.getTypeofParensRange());
2205      assert(DS.getRepAsType());
2206      TypeSourceInfo *TInfo = 0;
2207      Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
2208      TL.setUnderlyingTInfo(TInfo);
2209    }
2210    void VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
2211      // By default, use the source location of the type specifier.
2212      TL.setBuiltinLoc(DS.getTypeSpecTypeLoc());
2213      if (TL.needsExtraLocalData()) {
2214        // Set info for the written builtin specifiers.
2215        TL.getWrittenBuiltinSpecs() = DS.getWrittenBuiltinSpecs();
2216        // Try to have a meaningful source location.
2217        if (TL.getWrittenSignSpec() != TSS_unspecified)
2218          // Sign spec loc overrides the others (e.g., 'unsigned long').
2219          TL.setBuiltinLoc(DS.getTypeSpecSignLoc());
2220        else if (TL.getWrittenWidthSpec() != TSW_unspecified)
2221          // Width spec loc overrides type spec loc (e.g., 'short int').
2222          TL.setBuiltinLoc(DS.getTypeSpecWidthLoc());
2223      }
2224    }
2225    void VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
2226      ElaboratedTypeKeyword Keyword
2227        = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType());
2228      if (DS.getTypeSpecType() == TST_typename) {
2229        TypeSourceInfo *TInfo = 0;
2230        Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
2231        if (TInfo) {
2232          TL.copy(cast<ElaboratedTypeLoc>(TInfo->getTypeLoc()));
2233          return;
2234        }
2235      }
2236      TL.setKeywordLoc(Keyword != ETK_None
2237                       ? DS.getTypeSpecTypeLoc()
2238                       : SourceLocation());
2239      const CXXScopeSpec& SS = DS.getTypeSpecScope();
2240      TL.setQualifierLoc(SS.getWithLocInContext(Context));
2241      Visit(TL.getNextTypeLoc().getUnqualifiedLoc());
2242    }
2243    void VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
2244      ElaboratedTypeKeyword Keyword
2245        = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType());
2246      if (DS.getTypeSpecType() == TST_typename) {
2247        TypeSourceInfo *TInfo = 0;
2248        Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
2249        if (TInfo) {
2250          TL.copy(cast<DependentNameTypeLoc>(TInfo->getTypeLoc()));
2251          return;
2252        }
2253      }
2254      TL.setKeywordLoc(Keyword != ETK_None
2255                       ? DS.getTypeSpecTypeLoc()
2256                       : SourceLocation());
2257      const CXXScopeSpec& SS = DS.getTypeSpecScope();
2258      TL.setQualifierLoc(SS.getWithLocInContext(Context));
2259      TL.setNameLoc(DS.getTypeSpecTypeLoc());
2260    }
2261    void VisitDependentTemplateSpecializationTypeLoc(
2262                                 DependentTemplateSpecializationTypeLoc TL) {
2263      ElaboratedTypeKeyword Keyword
2264        = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType());
2265      if (Keyword == ETK_Typename) {
2266        TypeSourceInfo *TInfo = 0;
2267        Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo);
2268        if (TInfo) {
2269          TL.copy(cast<DependentTemplateSpecializationTypeLoc>(
2270                    TInfo->getTypeLoc()));
2271          return;
2272        }
2273      }
2274      TL.initializeLocal(Context, SourceLocation());
2275      TL.setKeywordLoc(Keyword != ETK_None
2276                       ? DS.getTypeSpecTypeLoc()
2277                       : SourceLocation());
2278      const CXXScopeSpec& SS = DS.getTypeSpecScope();
2279      TL.setQualifierRange(SS.isEmpty() ? SourceRange() : SS.getRange());
2280      // FIXME: load appropriate source location.
2281      TL.setNameLoc(DS.getTypeSpecTypeLoc());
2282    }
2283
2284    void VisitTypeLoc(TypeLoc TL) {
2285      // FIXME: add other typespec types and change this to an assert.
2286      TL.initialize(Context, DS.getTypeSpecTypeLoc());
2287    }
2288  };
2289
2290  class DeclaratorLocFiller : public TypeLocVisitor<DeclaratorLocFiller> {
2291    const DeclaratorChunk &Chunk;
2292
2293  public:
2294    DeclaratorLocFiller(const DeclaratorChunk &Chunk) : Chunk(Chunk) {}
2295
2296    void VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
2297      llvm_unreachable("qualified type locs not expected here!");
2298    }
2299
2300    void VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
2301      assert(Chunk.Kind == DeclaratorChunk::BlockPointer);
2302      TL.setCaretLoc(Chunk.Loc);
2303    }
2304    void VisitPointerTypeLoc(PointerTypeLoc TL) {
2305      assert(Chunk.Kind == DeclaratorChunk::Pointer);
2306      TL.setStarLoc(Chunk.Loc);
2307    }
2308    void VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
2309      assert(Chunk.Kind == DeclaratorChunk::Pointer);
2310      TL.setStarLoc(Chunk.Loc);
2311    }
2312    void VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
2313      assert(Chunk.Kind == DeclaratorChunk::MemberPointer);
2314      TL.setStarLoc(Chunk.Loc);
2315      // FIXME: nested name specifier
2316    }
2317    void VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
2318      assert(Chunk.Kind == DeclaratorChunk::Reference);
2319      // 'Amp' is misleading: this might have been originally
2320      /// spelled with AmpAmp.
2321      TL.setAmpLoc(Chunk.Loc);
2322    }
2323    void VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
2324      assert(Chunk.Kind == DeclaratorChunk::Reference);
2325      assert(!Chunk.Ref.LValueRef);
2326      TL.setAmpAmpLoc(Chunk.Loc);
2327    }
2328    void VisitArrayTypeLoc(ArrayTypeLoc TL) {
2329      assert(Chunk.Kind == DeclaratorChunk::Array);
2330      TL.setLBracketLoc(Chunk.Loc);
2331      TL.setRBracketLoc(Chunk.EndLoc);
2332      TL.setSizeExpr(static_cast<Expr*>(Chunk.Arr.NumElts));
2333    }
2334    void VisitFunctionTypeLoc(FunctionTypeLoc TL) {
2335      assert(Chunk.Kind == DeclaratorChunk::Function);
2336      TL.setLParenLoc(Chunk.Loc);
2337      TL.setRParenLoc(Chunk.EndLoc);
2338      TL.setTrailingReturn(!!Chunk.Fun.TrailingReturnType);
2339
2340      const DeclaratorChunk::FunctionTypeInfo &FTI = Chunk.Fun;
2341      for (unsigned i = 0, e = TL.getNumArgs(), tpi = 0; i != e; ++i) {
2342        ParmVarDecl *Param = cast<ParmVarDecl>(FTI.ArgInfo[i].Param);
2343        TL.setArg(tpi++, Param);
2344      }
2345      // FIXME: exception specs
2346    }
2347    void VisitParenTypeLoc(ParenTypeLoc TL) {
2348      assert(Chunk.Kind == DeclaratorChunk::Paren);
2349      TL.setLParenLoc(Chunk.Loc);
2350      TL.setRParenLoc(Chunk.EndLoc);
2351    }
2352
2353    void VisitTypeLoc(TypeLoc TL) {
2354      llvm_unreachable("unsupported TypeLoc kind in declarator!");
2355    }
2356  };
2357}
2358
2359/// \brief Create and instantiate a TypeSourceInfo with type source information.
2360///
2361/// \param T QualType referring to the type as written in source code.
2362///
2363/// \param ReturnTypeInfo For declarators whose return type does not show
2364/// up in the normal place in the declaration specifiers (such as a C++
2365/// conversion function), this pointer will refer to a type source information
2366/// for that return type.
2367TypeSourceInfo *
2368Sema::GetTypeSourceInfoForDeclarator(Declarator &D, QualType T,
2369                                     TypeSourceInfo *ReturnTypeInfo) {
2370  TypeSourceInfo *TInfo = Context.CreateTypeSourceInfo(T);
2371  UnqualTypeLoc CurrTL = TInfo->getTypeLoc().getUnqualifiedLoc();
2372
2373  // Handle parameter packs whose type is a pack expansion.
2374  if (isa<PackExpansionType>(T)) {
2375    cast<PackExpansionTypeLoc>(CurrTL).setEllipsisLoc(D.getEllipsisLoc());
2376    CurrTL = CurrTL.getNextTypeLoc().getUnqualifiedLoc();
2377  }
2378
2379  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {
2380    DeclaratorLocFiller(D.getTypeObject(i)).Visit(CurrTL);
2381    CurrTL = CurrTL.getNextTypeLoc().getUnqualifiedLoc();
2382  }
2383
2384  // If we have different source information for the return type, use
2385  // that.  This really only applies to C++ conversion functions.
2386  if (ReturnTypeInfo) {
2387    TypeLoc TL = ReturnTypeInfo->getTypeLoc();
2388    assert(TL.getFullDataSize() == CurrTL.getFullDataSize());
2389    memcpy(CurrTL.getOpaqueData(), TL.getOpaqueData(), TL.getFullDataSize());
2390  } else {
2391    TypeSpecLocFiller(Context, D.getDeclSpec()).Visit(CurrTL);
2392  }
2393
2394  return TInfo;
2395}
2396
2397/// \brief Create a LocInfoType to hold the given QualType and TypeSourceInfo.
2398ParsedType Sema::CreateParsedType(QualType T, TypeSourceInfo *TInfo) {
2399  // FIXME: LocInfoTypes are "transient", only needed for passing to/from Parser
2400  // and Sema during declaration parsing. Try deallocating/caching them when
2401  // it's appropriate, instead of allocating them and keeping them around.
2402  LocInfoType *LocT = (LocInfoType*)BumpAlloc.Allocate(sizeof(LocInfoType),
2403                                                       TypeAlignment);
2404  new (LocT) LocInfoType(T, TInfo);
2405  assert(LocT->getTypeClass() != T->getTypeClass() &&
2406         "LocInfoType's TypeClass conflicts with an existing Type class");
2407  return ParsedType::make(QualType(LocT, 0));
2408}
2409
2410void LocInfoType::getAsStringInternal(std::string &Str,
2411                                      const PrintingPolicy &Policy) const {
2412  assert(false && "LocInfoType leaked into the type system; an opaque TypeTy*"
2413         " was used directly instead of getting the QualType through"
2414         " GetTypeFromParser");
2415}
2416
2417TypeResult Sema::ActOnTypeName(Scope *S, Declarator &D) {
2418  // C99 6.7.6: Type names have no identifier.  This is already validated by
2419  // the parser.
2420  assert(D.getIdentifier() == 0 && "Type name should have no identifier!");
2421
2422  TagDecl *OwnedTag = 0;
2423  TypeSourceInfo *TInfo = GetTypeForDeclarator(D, S, &OwnedTag);
2424  QualType T = TInfo->getType();
2425  if (D.isInvalidType())
2426    return true;
2427
2428  if (getLangOptions().CPlusPlus) {
2429    // Check that there are no default arguments (C++ only).
2430    CheckExtraCXXDefaultArguments(D);
2431
2432    // C++0x [dcl.type]p3:
2433    //   A type-specifier-seq shall not define a class or enumeration
2434    //   unless it appears in the type-id of an alias-declaration
2435    //   (7.1.3).
2436    if (OwnedTag && OwnedTag->isDefinition())
2437      Diag(OwnedTag->getLocation(), diag::err_type_defined_in_type_specifier)
2438        << Context.getTypeDeclType(OwnedTag);
2439  }
2440
2441  return CreateParsedType(T, TInfo);
2442}
2443
2444
2445
2446//===----------------------------------------------------------------------===//
2447// Type Attribute Processing
2448//===----------------------------------------------------------------------===//
2449
2450/// HandleAddressSpaceTypeAttribute - Process an address_space attribute on the
2451/// specified type.  The attribute contains 1 argument, the id of the address
2452/// space for the type.
2453static void HandleAddressSpaceTypeAttribute(QualType &Type,
2454                                            const AttributeList &Attr, Sema &S){
2455
2456  // If this type is already address space qualified, reject it.
2457  // Clause 6.7.3 - Type qualifiers: "No type shall be qualified by qualifiers
2458  // for two or more different address spaces."
2459  if (Type.getAddressSpace()) {
2460    S.Diag(Attr.getLoc(), diag::err_attribute_address_multiple_qualifiers);
2461    Attr.setInvalid();
2462    return;
2463  }
2464
2465  // Check the attribute arguments.
2466  if (Attr.getNumArgs() != 1) {
2467    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
2468    Attr.setInvalid();
2469    return;
2470  }
2471  Expr *ASArgExpr = static_cast<Expr *>(Attr.getArg(0));
2472  llvm::APSInt addrSpace(32);
2473  if (ASArgExpr->isTypeDependent() || ASArgExpr->isValueDependent() ||
2474      !ASArgExpr->isIntegerConstantExpr(addrSpace, S.Context)) {
2475    S.Diag(Attr.getLoc(), diag::err_attribute_address_space_not_int)
2476      << ASArgExpr->getSourceRange();
2477    Attr.setInvalid();
2478    return;
2479  }
2480
2481  // Bounds checking.
2482  if (addrSpace.isSigned()) {
2483    if (addrSpace.isNegative()) {
2484      S.Diag(Attr.getLoc(), diag::err_attribute_address_space_negative)
2485        << ASArgExpr->getSourceRange();
2486      Attr.setInvalid();
2487      return;
2488    }
2489    addrSpace.setIsSigned(false);
2490  }
2491  llvm::APSInt max(addrSpace.getBitWidth());
2492  max = Qualifiers::MaxAddressSpace;
2493  if (addrSpace > max) {
2494    S.Diag(Attr.getLoc(), diag::err_attribute_address_space_too_high)
2495      << Qualifiers::MaxAddressSpace << ASArgExpr->getSourceRange();
2496    Attr.setInvalid();
2497    return;
2498  }
2499
2500  unsigned ASIdx = static_cast<unsigned>(addrSpace.getZExtValue());
2501  Type = S.Context.getAddrSpaceQualType(Type, ASIdx);
2502}
2503
2504/// handleObjCGCTypeAttr - Process the __attribute__((objc_gc)) type
2505/// attribute on the specified type.  Returns true to indicate that
2506/// the attribute was handled, false to indicate that the type does
2507/// not permit the attribute.
2508static bool handleObjCGCTypeAttr(TypeProcessingState &state,
2509                                 AttributeList &attr,
2510                                 QualType &type) {
2511  Sema &S = state.getSema();
2512
2513  // Delay if this isn't some kind of pointer.
2514  if (!type->isPointerType() &&
2515      !type->isObjCObjectPointerType() &&
2516      !type->isBlockPointerType())
2517    return false;
2518
2519  if (type.getObjCGCAttr() != Qualifiers::GCNone) {
2520    S.Diag(attr.getLoc(), diag::err_attribute_multiple_objc_gc);
2521    attr.setInvalid();
2522    return true;
2523  }
2524
2525  // Check the attribute arguments.
2526  if (!attr.getParameterName()) {
2527    S.Diag(attr.getLoc(), diag::err_attribute_argument_n_not_string)
2528      << "objc_gc" << 1;
2529    attr.setInvalid();
2530    return true;
2531  }
2532  Qualifiers::GC GCAttr;
2533  if (attr.getNumArgs() != 0) {
2534    S.Diag(attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
2535    attr.setInvalid();
2536    return true;
2537  }
2538  if (attr.getParameterName()->isStr("weak"))
2539    GCAttr = Qualifiers::Weak;
2540  else if (attr.getParameterName()->isStr("strong"))
2541    GCAttr = Qualifiers::Strong;
2542  else {
2543    S.Diag(attr.getLoc(), diag::warn_attribute_type_not_supported)
2544      << "objc_gc" << attr.getParameterName();
2545    attr.setInvalid();
2546    return true;
2547  }
2548
2549  type = S.Context.getObjCGCQualType(type, GCAttr);
2550  return true;
2551}
2552
2553namespace {
2554  /// A helper class to unwrap a type down to a function for the
2555  /// purposes of applying attributes there.
2556  ///
2557  /// Use:
2558  ///   FunctionTypeUnwrapper unwrapped(SemaRef, T);
2559  ///   if (unwrapped.isFunctionType()) {
2560  ///     const FunctionType *fn = unwrapped.get();
2561  ///     // change fn somehow
2562  ///     T = unwrapped.wrap(fn);
2563  ///   }
2564  struct FunctionTypeUnwrapper {
2565    enum WrapKind {
2566      Desugar,
2567      Parens,
2568      Pointer,
2569      BlockPointer,
2570      Reference,
2571      MemberPointer
2572    };
2573
2574    QualType Original;
2575    const FunctionType *Fn;
2576    llvm::SmallVector<unsigned char /*WrapKind*/, 8> Stack;
2577
2578    FunctionTypeUnwrapper(Sema &S, QualType T) : Original(T) {
2579      while (true) {
2580        const Type *Ty = T.getTypePtr();
2581        if (isa<FunctionType>(Ty)) {
2582          Fn = cast<FunctionType>(Ty);
2583          return;
2584        } else if (isa<ParenType>(Ty)) {
2585          T = cast<ParenType>(Ty)->getInnerType();
2586          Stack.push_back(Parens);
2587        } else if (isa<PointerType>(Ty)) {
2588          T = cast<PointerType>(Ty)->getPointeeType();
2589          Stack.push_back(Pointer);
2590        } else if (isa<BlockPointerType>(Ty)) {
2591          T = cast<BlockPointerType>(Ty)->getPointeeType();
2592          Stack.push_back(BlockPointer);
2593        } else if (isa<MemberPointerType>(Ty)) {
2594          T = cast<MemberPointerType>(Ty)->getPointeeType();
2595          Stack.push_back(MemberPointer);
2596        } else if (isa<ReferenceType>(Ty)) {
2597          T = cast<ReferenceType>(Ty)->getPointeeType();
2598          Stack.push_back(Reference);
2599        } else {
2600          const Type *DTy = Ty->getUnqualifiedDesugaredType();
2601          if (Ty == DTy) {
2602            Fn = 0;
2603            return;
2604          }
2605
2606          T = QualType(DTy, 0);
2607          Stack.push_back(Desugar);
2608        }
2609      }
2610    }
2611
2612    bool isFunctionType() const { return (Fn != 0); }
2613    const FunctionType *get() const { return Fn; }
2614
2615    QualType wrap(Sema &S, const FunctionType *New) {
2616      // If T wasn't modified from the unwrapped type, do nothing.
2617      if (New == get()) return Original;
2618
2619      Fn = New;
2620      return wrap(S.Context, Original, 0);
2621    }
2622
2623  private:
2624    QualType wrap(ASTContext &C, QualType Old, unsigned I) {
2625      if (I == Stack.size())
2626        return C.getQualifiedType(Fn, Old.getQualifiers());
2627
2628      // Build up the inner type, applying the qualifiers from the old
2629      // type to the new type.
2630      SplitQualType SplitOld = Old.split();
2631
2632      // As a special case, tail-recurse if there are no qualifiers.
2633      if (SplitOld.second.empty())
2634        return wrap(C, SplitOld.first, I);
2635      return C.getQualifiedType(wrap(C, SplitOld.first, I), SplitOld.second);
2636    }
2637
2638    QualType wrap(ASTContext &C, const Type *Old, unsigned I) {
2639      if (I == Stack.size()) return QualType(Fn, 0);
2640
2641      switch (static_cast<WrapKind>(Stack[I++])) {
2642      case Desugar:
2643        // This is the point at which we potentially lose source
2644        // information.
2645        return wrap(C, Old->getUnqualifiedDesugaredType(), I);
2646
2647      case Parens: {
2648        QualType New = wrap(C, cast<ParenType>(Old)->getInnerType(), I);
2649        return C.getParenType(New);
2650      }
2651
2652      case Pointer: {
2653        QualType New = wrap(C, cast<PointerType>(Old)->getPointeeType(), I);
2654        return C.getPointerType(New);
2655      }
2656
2657      case BlockPointer: {
2658        QualType New = wrap(C, cast<BlockPointerType>(Old)->getPointeeType(),I);
2659        return C.getBlockPointerType(New);
2660      }
2661
2662      case MemberPointer: {
2663        const MemberPointerType *OldMPT = cast<MemberPointerType>(Old);
2664        QualType New = wrap(C, OldMPT->getPointeeType(), I);
2665        return C.getMemberPointerType(New, OldMPT->getClass());
2666      }
2667
2668      case Reference: {
2669        const ReferenceType *OldRef = cast<ReferenceType>(Old);
2670        QualType New = wrap(C, OldRef->getPointeeType(), I);
2671        if (isa<LValueReferenceType>(OldRef))
2672          return C.getLValueReferenceType(New, OldRef->isSpelledAsLValue());
2673        else
2674          return C.getRValueReferenceType(New);
2675      }
2676      }
2677
2678      llvm_unreachable("unknown wrapping kind");
2679      return QualType();
2680    }
2681  };
2682}
2683
2684/// Process an individual function attribute.  Returns true to
2685/// indicate that the attribute was handled, false if it wasn't.
2686static bool handleFunctionTypeAttr(TypeProcessingState &state,
2687                                   AttributeList &attr,
2688                                   QualType &type) {
2689  Sema &S = state.getSema();
2690
2691  FunctionTypeUnwrapper unwrapped(S, type);
2692
2693  if (attr.getKind() == AttributeList::AT_noreturn) {
2694    if (S.CheckNoReturnAttr(attr))
2695      return true;
2696
2697    // Delay if this is not a function type.
2698    if (!unwrapped.isFunctionType())
2699      return false;
2700
2701    // Otherwise we can process right away.
2702    FunctionType::ExtInfo EI = unwrapped.get()->getExtInfo().withNoReturn(true);
2703    type = unwrapped.wrap(S, S.Context.adjustFunctionType(unwrapped.get(), EI));
2704    return true;
2705  }
2706
2707  if (attr.getKind() == AttributeList::AT_regparm) {
2708    unsigned value;
2709    if (S.CheckRegparmAttr(attr, value))
2710      return true;
2711
2712    // Delay if this is not a function type.
2713    if (!unwrapped.isFunctionType())
2714      return false;
2715
2716    // Diagnose regparm with fastcall.
2717    const FunctionType *fn = unwrapped.get();
2718    CallingConv CC = fn->getCallConv();
2719    if (CC == CC_X86FastCall) {
2720      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
2721        << FunctionType::getNameForCallConv(CC)
2722        << "regparm";
2723      attr.setInvalid();
2724      return true;
2725    }
2726
2727    FunctionType::ExtInfo EI =
2728      unwrapped.get()->getExtInfo().withRegParm(value);
2729    type = unwrapped.wrap(S, S.Context.adjustFunctionType(unwrapped.get(), EI));
2730    return true;
2731  }
2732
2733  // Otherwise, a calling convention.
2734  CallingConv CC;
2735  if (S.CheckCallingConvAttr(attr, CC))
2736    return true;
2737
2738  // Delay if the type didn't work out to a function.
2739  if (!unwrapped.isFunctionType()) return false;
2740
2741  const FunctionType *fn = unwrapped.get();
2742  CallingConv CCOld = fn->getCallConv();
2743  if (S.Context.getCanonicalCallConv(CC) ==
2744      S.Context.getCanonicalCallConv(CCOld)) {
2745    FunctionType::ExtInfo EI= unwrapped.get()->getExtInfo().withCallingConv(CC);
2746    type = unwrapped.wrap(S, S.Context.adjustFunctionType(unwrapped.get(), EI));
2747    return true;
2748  }
2749
2750  if (CCOld != CC_Default) {
2751    // Should we diagnose reapplications of the same convention?
2752    S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
2753      << FunctionType::getNameForCallConv(CC)
2754      << FunctionType::getNameForCallConv(CCOld);
2755    attr.setInvalid();
2756    return true;
2757  }
2758
2759  // Diagnose the use of X86 fastcall on varargs or unprototyped functions.
2760  if (CC == CC_X86FastCall) {
2761    if (isa<FunctionNoProtoType>(fn)) {
2762      S.Diag(attr.getLoc(), diag::err_cconv_knr)
2763        << FunctionType::getNameForCallConv(CC);
2764      attr.setInvalid();
2765      return true;
2766    }
2767
2768    const FunctionProtoType *FnP = cast<FunctionProtoType>(fn);
2769    if (FnP->isVariadic()) {
2770      S.Diag(attr.getLoc(), diag::err_cconv_varargs)
2771        << FunctionType::getNameForCallConv(CC);
2772      attr.setInvalid();
2773      return true;
2774    }
2775
2776    // Also diagnose fastcall with regparm.
2777    if (fn->getRegParmType()) {
2778      S.Diag(attr.getLoc(), diag::err_attributes_are_not_compatible)
2779        << "regparm"
2780        << FunctionType::getNameForCallConv(CC);
2781      attr.setInvalid();
2782      return true;
2783    }
2784  }
2785
2786  FunctionType::ExtInfo EI = unwrapped.get()->getExtInfo().withCallingConv(CC);
2787  type = unwrapped.wrap(S, S.Context.adjustFunctionType(unwrapped.get(), EI));
2788  return true;
2789}
2790
2791/// HandleVectorSizeAttribute - this attribute is only applicable to integral
2792/// and float scalars, although arrays, pointers, and function return values are
2793/// allowed in conjunction with this construct. Aggregates with this attribute
2794/// are invalid, even if they are of the same size as a corresponding scalar.
2795/// The raw attribute should contain precisely 1 argument, the vector size for
2796/// the variable, measured in bytes. If curType and rawAttr are well formed,
2797/// this routine will return a new vector type.
2798static void HandleVectorSizeAttr(QualType& CurType, const AttributeList &Attr,
2799                                 Sema &S) {
2800  // Check the attribute arguments.
2801  if (Attr.getNumArgs() != 1) {
2802    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
2803    Attr.setInvalid();
2804    return;
2805  }
2806  Expr *sizeExpr = static_cast<Expr *>(Attr.getArg(0));
2807  llvm::APSInt vecSize(32);
2808  if (sizeExpr->isTypeDependent() || sizeExpr->isValueDependent() ||
2809      !sizeExpr->isIntegerConstantExpr(vecSize, S.Context)) {
2810    S.Diag(Attr.getLoc(), diag::err_attribute_argument_not_int)
2811      << "vector_size" << sizeExpr->getSourceRange();
2812    Attr.setInvalid();
2813    return;
2814  }
2815  // the base type must be integer or float, and can't already be a vector.
2816  if (!CurType->isIntegerType() && !CurType->isRealFloatingType()) {
2817    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) << CurType;
2818    Attr.setInvalid();
2819    return;
2820  }
2821  unsigned typeSize = static_cast<unsigned>(S.Context.getTypeSize(CurType));
2822  // vecSize is specified in bytes - convert to bits.
2823  unsigned vectorSize = static_cast<unsigned>(vecSize.getZExtValue() * 8);
2824
2825  // the vector size needs to be an integral multiple of the type size.
2826  if (vectorSize % typeSize) {
2827    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_size)
2828      << sizeExpr->getSourceRange();
2829    Attr.setInvalid();
2830    return;
2831  }
2832  if (vectorSize == 0) {
2833    S.Diag(Attr.getLoc(), diag::err_attribute_zero_size)
2834      << sizeExpr->getSourceRange();
2835    Attr.setInvalid();
2836    return;
2837  }
2838
2839  // Success! Instantiate the vector type, the number of elements is > 0, and
2840  // not required to be a power of 2, unlike GCC.
2841  CurType = S.Context.getVectorType(CurType, vectorSize/typeSize,
2842                                    VectorType::GenericVector);
2843}
2844
2845/// HandleNeonVectorTypeAttr - The "neon_vector_type" and
2846/// "neon_polyvector_type" attributes are used to create vector types that
2847/// are mangled according to ARM's ABI.  Otherwise, these types are identical
2848/// to those created with the "vector_size" attribute.  Unlike "vector_size"
2849/// the argument to these Neon attributes is the number of vector elements,
2850/// not the vector size in bytes.  The vector width and element type must
2851/// match one of the standard Neon vector types.
2852static void HandleNeonVectorTypeAttr(QualType& CurType,
2853                                     const AttributeList &Attr, Sema &S,
2854                                     VectorType::VectorKind VecKind,
2855                                     const char *AttrName) {
2856  // Check the attribute arguments.
2857  if (Attr.getNumArgs() != 1) {
2858    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 1;
2859    Attr.setInvalid();
2860    return;
2861  }
2862  // The number of elements must be an ICE.
2863  Expr *numEltsExpr = static_cast<Expr *>(Attr.getArg(0));
2864  llvm::APSInt numEltsInt(32);
2865  if (numEltsExpr->isTypeDependent() || numEltsExpr->isValueDependent() ||
2866      !numEltsExpr->isIntegerConstantExpr(numEltsInt, S.Context)) {
2867    S.Diag(Attr.getLoc(), diag::err_attribute_argument_not_int)
2868      << AttrName << numEltsExpr->getSourceRange();
2869    Attr.setInvalid();
2870    return;
2871  }
2872  // Only certain element types are supported for Neon vectors.
2873  const BuiltinType* BTy = CurType->getAs<BuiltinType>();
2874  if (!BTy ||
2875      (VecKind == VectorType::NeonPolyVector &&
2876       BTy->getKind() != BuiltinType::SChar &&
2877       BTy->getKind() != BuiltinType::Short) ||
2878      (BTy->getKind() != BuiltinType::SChar &&
2879       BTy->getKind() != BuiltinType::UChar &&
2880       BTy->getKind() != BuiltinType::Short &&
2881       BTy->getKind() != BuiltinType::UShort &&
2882       BTy->getKind() != BuiltinType::Int &&
2883       BTy->getKind() != BuiltinType::UInt &&
2884       BTy->getKind() != BuiltinType::LongLong &&
2885       BTy->getKind() != BuiltinType::ULongLong &&
2886       BTy->getKind() != BuiltinType::Float)) {
2887    S.Diag(Attr.getLoc(), diag::err_attribute_invalid_vector_type) <<CurType;
2888    Attr.setInvalid();
2889    return;
2890  }
2891  // The total size of the vector must be 64 or 128 bits.
2892  unsigned typeSize = static_cast<unsigned>(S.Context.getTypeSize(CurType));
2893  unsigned numElts = static_cast<unsigned>(numEltsInt.getZExtValue());
2894  unsigned vecSize = typeSize * numElts;
2895  if (vecSize != 64 && vecSize != 128) {
2896    S.Diag(Attr.getLoc(), diag::err_attribute_bad_neon_vector_size) << CurType;
2897    Attr.setInvalid();
2898    return;
2899  }
2900
2901  CurType = S.Context.getVectorType(CurType, numElts, VecKind);
2902}
2903
2904static void processTypeAttrs(TypeProcessingState &state, QualType &type,
2905                             bool isDeclSpec, AttributeList *attrs) {
2906  // Scan through and apply attributes to this type where it makes sense.  Some
2907  // attributes (such as __address_space__, __vector_size__, etc) apply to the
2908  // type, but others can be present in the type specifiers even though they
2909  // apply to the decl.  Here we apply type attributes and ignore the rest.
2910
2911  AttributeList *next;
2912  do {
2913    AttributeList &attr = *attrs;
2914    next = attr.getNext();
2915
2916    // Skip attributes that were marked to be invalid.
2917    if (attr.isInvalid())
2918      continue;
2919
2920    // If this is an attribute we can handle, do so now,
2921    // otherwise, add it to the FnAttrs list for rechaining.
2922    switch (attr.getKind()) {
2923    default: break;
2924
2925    case AttributeList::AT_address_space:
2926      HandleAddressSpaceTypeAttribute(type, attr, state.getSema());
2927      break;
2928    OBJC_POINTER_TYPE_ATTRS_CASELIST:
2929      if (!handleObjCPointerTypeAttr(state, attr, type))
2930        distributeObjCPointerTypeAttr(state, attr, type);
2931      break;
2932    case AttributeList::AT_vector_size:
2933      HandleVectorSizeAttr(type, attr, state.getSema());
2934      break;
2935    case AttributeList::AT_neon_vector_type:
2936      HandleNeonVectorTypeAttr(type, attr, state.getSema(),
2937                               VectorType::NeonVector, "neon_vector_type");
2938      break;
2939    case AttributeList::AT_neon_polyvector_type:
2940      HandleNeonVectorTypeAttr(type, attr, state.getSema(),
2941                               VectorType::NeonPolyVector,
2942                               "neon_polyvector_type");
2943      break;
2944
2945    FUNCTION_TYPE_ATTRS_CASELIST:
2946      // Never process function type attributes as part of the
2947      // declaration-specifiers.
2948      if (isDeclSpec)
2949        distributeFunctionTypeAttrFromDeclSpec(state, attr, type);
2950
2951      // Otherwise, handle the possible delays.
2952      else if (!handleFunctionTypeAttr(state, attr, type))
2953        distributeFunctionTypeAttr(state, attr, type);
2954      break;
2955    }
2956  } while ((attrs = next));
2957}
2958
2959/// @brief Ensure that the type T is a complete type.
2960///
2961/// This routine checks whether the type @p T is complete in any
2962/// context where a complete type is required. If @p T is a complete
2963/// type, returns false. If @p T is a class template specialization,
2964/// this routine then attempts to perform class template
2965/// instantiation. If instantiation fails, or if @p T is incomplete
2966/// and cannot be completed, issues the diagnostic @p diag (giving it
2967/// the type @p T) and returns true.
2968///
2969/// @param Loc  The location in the source that the incomplete type
2970/// diagnostic should refer to.
2971///
2972/// @param T  The type that this routine is examining for completeness.
2973///
2974/// @param PD The partial diagnostic that will be printed out if T is not a
2975/// complete type.
2976///
2977/// @returns @c true if @p T is incomplete and a diagnostic was emitted,
2978/// @c false otherwise.
2979bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
2980                               const PartialDiagnostic &PD,
2981                               std::pair<SourceLocation,
2982                                         PartialDiagnostic> Note) {
2983  unsigned diag = PD.getDiagID();
2984
2985  // FIXME: Add this assertion to make sure we always get instantiation points.
2986  //  assert(!Loc.isInvalid() && "Invalid location in RequireCompleteType");
2987  // FIXME: Add this assertion to help us flush out problems with
2988  // checking for dependent types and type-dependent expressions.
2989  //
2990  //  assert(!T->isDependentType() &&
2991  //         "Can't ask whether a dependent type is complete");
2992
2993  // If we have a complete type, we're done.
2994  if (!T->isIncompleteType())
2995    return false;
2996
2997  // If we have a class template specialization or a class member of a
2998  // class template specialization, or an array with known size of such,
2999  // try to instantiate it.
3000  QualType MaybeTemplate = T;
3001  if (const ConstantArrayType *Array = Context.getAsConstantArrayType(T))
3002    MaybeTemplate = Array->getElementType();
3003  if (const RecordType *Record = MaybeTemplate->getAs<RecordType>()) {
3004    if (ClassTemplateSpecializationDecl *ClassTemplateSpec
3005          = dyn_cast<ClassTemplateSpecializationDecl>(Record->getDecl())) {
3006      if (ClassTemplateSpec->getSpecializationKind() == TSK_Undeclared)
3007        return InstantiateClassTemplateSpecialization(Loc, ClassTemplateSpec,
3008                                                      TSK_ImplicitInstantiation,
3009                                                      /*Complain=*/diag != 0);
3010    } else if (CXXRecordDecl *Rec
3011                 = dyn_cast<CXXRecordDecl>(Record->getDecl())) {
3012      if (CXXRecordDecl *Pattern = Rec->getInstantiatedFromMemberClass()) {
3013        MemberSpecializationInfo *MSInfo = Rec->getMemberSpecializationInfo();
3014        assert(MSInfo && "Missing member specialization information?");
3015        // This record was instantiated from a class within a template.
3016        if (MSInfo->getTemplateSpecializationKind()
3017                                               != TSK_ExplicitSpecialization)
3018          return InstantiateClass(Loc, Rec, Pattern,
3019                                  getTemplateInstantiationArgs(Rec),
3020                                  TSK_ImplicitInstantiation,
3021                                  /*Complain=*/diag != 0);
3022      }
3023    }
3024  }
3025
3026  if (diag == 0)
3027    return true;
3028
3029  const TagType *Tag = T->getAs<TagType>();
3030
3031  // Avoid diagnosing invalid decls as incomplete.
3032  if (Tag && Tag->getDecl()->isInvalidDecl())
3033    return true;
3034
3035  // Give the external AST source a chance to complete the type.
3036  if (Tag && Tag->getDecl()->hasExternalLexicalStorage()) {
3037    Context.getExternalSource()->CompleteType(Tag->getDecl());
3038    if (!Tag->isIncompleteType())
3039      return false;
3040  }
3041
3042  // We have an incomplete type. Produce a diagnostic.
3043  Diag(Loc, PD) << T;
3044
3045  // If we have a note, produce it.
3046  if (!Note.first.isInvalid())
3047    Diag(Note.first, Note.second);
3048
3049  // If the type was a forward declaration of a class/struct/union
3050  // type, produce a note.
3051  if (Tag && !Tag->getDecl()->isInvalidDecl())
3052    Diag(Tag->getDecl()->getLocation(),
3053         Tag->isBeingDefined() ? diag::note_type_being_defined
3054                               : diag::note_forward_declaration)
3055        << QualType(Tag, 0);
3056
3057  return true;
3058}
3059
3060bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
3061                               const PartialDiagnostic &PD) {
3062  return RequireCompleteType(Loc, T, PD,
3063                             std::make_pair(SourceLocation(), PDiag(0)));
3064}
3065
3066bool Sema::RequireCompleteType(SourceLocation Loc, QualType T,
3067                               unsigned DiagID) {
3068  return RequireCompleteType(Loc, T, PDiag(DiagID),
3069                             std::make_pair(SourceLocation(), PDiag(0)));
3070}
3071
3072/// \brief Retrieve a version of the type 'T' that is elaborated by Keyword
3073/// and qualified by the nested-name-specifier contained in SS.
3074QualType Sema::getElaboratedType(ElaboratedTypeKeyword Keyword,
3075                                 const CXXScopeSpec &SS, QualType T) {
3076  if (T.isNull())
3077    return T;
3078  NestedNameSpecifier *NNS;
3079  if (SS.isValid())
3080    NNS = static_cast<NestedNameSpecifier *>(SS.getScopeRep());
3081  else {
3082    if (Keyword == ETK_None)
3083      return T;
3084    NNS = 0;
3085  }
3086  return Context.getElaboratedType(Keyword, NNS, T);
3087}
3088
3089QualType Sema::BuildTypeofExprType(Expr *E, SourceLocation Loc) {
3090  ExprResult ER = CheckPlaceholderExpr(E, Loc);
3091  if (ER.isInvalid()) return QualType();
3092  E = ER.take();
3093
3094  if (!E->isTypeDependent()) {
3095    QualType T = E->getType();
3096    if (const TagType *TT = T->getAs<TagType>())
3097      DiagnoseUseOfDecl(TT->getDecl(), E->getExprLoc());
3098  }
3099  return Context.getTypeOfExprType(E);
3100}
3101
3102QualType Sema::BuildDecltypeType(Expr *E, SourceLocation Loc) {
3103  ExprResult ER = CheckPlaceholderExpr(E, Loc);
3104  if (ER.isInvalid()) return QualType();
3105  E = ER.take();
3106
3107  return Context.getDecltypeType(E);
3108}
3109