SemaDecl.cpp revision c4a1dea2dc56bd1357ec91b829a0b9e68229a13e
1//===--- SemaDecl.cpp - Semantic Analysis for Declarations ----------------===//
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 semantic analysis for declarations.
11//
12//===----------------------------------------------------------------------===//
13
14#include "Sema.h"
15#include "clang/AST/APValue.h"
16#include "clang/AST/ASTConsumer.h"
17#include "clang/AST/ASTContext.h"
18#include "clang/AST/Attr.h"
19#include "clang/AST/Builtins.h"
20#include "clang/AST/Decl.h"
21#include "clang/AST/DeclCXX.h"
22#include "clang/AST/DeclObjC.h"
23#include "clang/AST/Expr.h"
24#include "clang/AST/ExprCXX.h"
25#include "clang/AST/Type.h"
26#include "clang/Parse/DeclSpec.h"
27#include "clang/Parse/Scope.h"
28#include "clang/Basic/Diagnostic.h"
29#include "clang/Basic/LangOptions.h"
30#include "clang/Basic/TargetInfo.h"
31#include "clang/Basic/SourceManager.h"
32// FIXME: layering (ideally, Sema shouldn't be dependent on Lex API's)
33#include "clang/Lex/Preprocessor.h"
34#include "clang/Lex/HeaderSearch.h"
35#include "llvm/ADT/SmallString.h"
36#include "llvm/ADT/SmallSet.h"
37#include "llvm/ADT/DenseSet.h"
38using namespace clang;
39
40Sema::TypeTy *Sema::isTypeName(const IdentifierInfo &II, Scope *S) {
41  Decl *IIDecl = LookupDecl(&II, Decl::IDNS_Ordinary, S, false);
42
43  if (IIDecl && (isa<TypedefDecl>(IIDecl) ||
44                 isa<ObjCInterfaceDecl>(IIDecl) ||
45                 isa<TagDecl>(IIDecl)))
46    return IIDecl;
47  return 0;
48}
49
50DeclContext *Sema::getDCParent(DeclContext *DC) {
51  // If CurContext is a ObjC method, getParent() will return NULL.
52  if (isa<ObjCMethodDecl>(DC))
53    return Context.getTranslationUnitDecl();
54
55  // A C++ inline method is parsed *after* the topmost class it was declared in
56  // is fully parsed (it's "complete").
57  // The parsing of a C++ inline method happens at the declaration context of
58  // the topmost (non-nested) class it is declared in.
59  if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {
60    assert(isa<CXXRecordDecl>(MD->getParent()) && "C++ method not in Record.");
61    DC = MD->getParent();
62    while (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC->getParent()))
63      DC = RD;
64
65    // Return the declaration context of the topmost class the inline method is
66    // declared in.
67    return DC;
68  }
69
70  return DC->getParent();
71}
72
73void Sema::PushDeclContext(DeclContext *DC) {
74  assert(getDCParent(DC) == CurContext &&
75       "The next DeclContext should be directly contained in the current one.");
76  CurContext = DC;
77}
78
79void Sema::PopDeclContext() {
80  assert(CurContext && "DeclContext imbalance!");
81  CurContext = getDCParent(CurContext);
82}
83
84/// Add this decl to the scope shadowed decl chains.
85void Sema::PushOnScopeChains(NamedDecl *D, Scope *S) {
86  S->AddDecl(D);
87
88  // C++ [basic.scope]p4:
89  //   -- exactly one declaration shall declare a class name or
90  //   enumeration name that is not a typedef name and the other
91  //   declarations shall all refer to the same object or
92  //   enumerator, or all refer to functions and function templates;
93  //   in this case the class name or enumeration name is hidden.
94  if (TagDecl *TD = dyn_cast<TagDecl>(D)) {
95    // We are pushing the name of a tag (enum or class).
96    IdentifierResolver::iterator
97        I = IdResolver.begin(TD->getIdentifier(),
98                             TD->getDeclContext(), false/*LookInParentCtx*/);
99    if (I != IdResolver.end() &&
100        IdResolver.isDeclInScope(*I, TD->getDeclContext(), S)) {
101      // There is already a declaration with the same name in the same
102      // scope. It must be found before we find the new declaration,
103      // so swap the order on the shadowed declaration chain.
104
105      IdResolver.AddShadowedDecl(TD, *I);
106      return;
107    }
108  }
109  IdResolver.AddDecl(D);
110}
111
112void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
113  if (S->decl_empty()) return;
114  assert((S->getFlags() & Scope::DeclScope) &&"Scope shouldn't contain decls!");
115
116  for (Scope::decl_iterator I = S->decl_begin(), E = S->decl_end();
117       I != E; ++I) {
118    Decl *TmpD = static_cast<Decl*>(*I);
119    assert(TmpD && "This decl didn't get pushed??");
120
121    if (isa<CXXFieldDecl>(TmpD)) continue;
122
123    assert(isa<ScopedDecl>(TmpD) && "Decl isn't ScopedDecl?");
124    ScopedDecl *D = cast<ScopedDecl>(TmpD);
125
126    IdentifierInfo *II = D->getIdentifier();
127    if (!II) continue;
128
129    // We only want to remove the decls from the identifier decl chains for local
130    // scopes, when inside a function/method.
131    if (S->getFnParent() != 0)
132      IdResolver.RemoveDecl(D);
133
134    // Chain this decl to the containing DeclContext.
135    D->setNext(CurContext->getDeclChain());
136    CurContext->setDeclChain(D);
137  }
138}
139
140/// getObjCInterfaceDecl - Look up a for a class declaration in the scope.
141/// return 0 if one not found.
142ObjCInterfaceDecl *Sema::getObjCInterfaceDecl(IdentifierInfo *Id) {
143  // The third "scope" argument is 0 since we aren't enabling lazy built-in
144  // creation from this context.
145  Decl *IDecl = LookupDecl(Id, Decl::IDNS_Ordinary, 0, false);
146
147  return dyn_cast_or_null<ObjCInterfaceDecl>(IDecl);
148}
149
150/// LookupDecl - Look up the inner-most declaration in the specified
151/// namespace.
152Decl *Sema::LookupDecl(const IdentifierInfo *II, unsigned NSI,
153                       Scope *S, bool enableLazyBuiltinCreation) {
154  if (II == 0) return 0;
155  unsigned NS = NSI;
156  if (getLangOptions().CPlusPlus && (NS & Decl::IDNS_Ordinary))
157    NS |= Decl::IDNS_Tag;
158
159  // Scan up the scope chain looking for a decl that matches this identifier
160  // that is in the appropriate namespace.  This search should not take long, as
161  // shadowing of names is uncommon, and deep shadowing is extremely uncommon.
162  for (IdentifierResolver::iterator
163       I = IdResolver.begin(II, CurContext), E = IdResolver.end(); I != E; ++I)
164    if ((*I)->getIdentifierNamespace() & NS)
165      return *I;
166
167  // If we didn't find a use of this identifier, and if the identifier
168  // corresponds to a compiler builtin, create the decl object for the builtin
169  // now, injecting it into translation unit scope, and return it.
170  if (NS & Decl::IDNS_Ordinary) {
171    if (enableLazyBuiltinCreation) {
172      // If this is a builtin on this (or all) targets, create the decl.
173      if (unsigned BuiltinID = II->getBuiltinID())
174        return LazilyCreateBuiltin((IdentifierInfo *)II, BuiltinID, S);
175    }
176    if (getLangOptions().ObjC1) {
177      // @interface and @compatibility_alias introduce typedef-like names.
178      // Unlike typedef's, they can only be introduced at file-scope (and are
179      // therefore not scoped decls). They can, however, be shadowed by
180      // other names in IDNS_Ordinary.
181      ObjCInterfaceDeclsTy::iterator IDI = ObjCInterfaceDecls.find(II);
182      if (IDI != ObjCInterfaceDecls.end())
183        return IDI->second;
184      ObjCAliasTy::iterator I = ObjCAliasDecls.find(II);
185      if (I != ObjCAliasDecls.end())
186        return I->second->getClassInterface();
187    }
188  }
189  return 0;
190}
191
192void Sema::InitBuiltinVaListType() {
193  if (!Context.getBuiltinVaListType().isNull())
194    return;
195
196  IdentifierInfo *VaIdent = &Context.Idents.get("__builtin_va_list");
197  Decl *VaDecl = LookupDecl(VaIdent, Decl::IDNS_Ordinary, TUScope);
198  TypedefDecl *VaTypedef = cast<TypedefDecl>(VaDecl);
199  Context.setBuiltinVaListType(Context.getTypedefType(VaTypedef));
200}
201
202/// LazilyCreateBuiltin - The specified Builtin-ID was first used at file scope.
203/// lazily create a decl for it.
204ScopedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid,
205                                      Scope *S) {
206  Builtin::ID BID = (Builtin::ID)bid;
207
208  if (BID == Builtin::BI__builtin_va_start ||
209      BID == Builtin::BI__builtin_va_copy ||
210      BID == Builtin::BI__builtin_va_end ||
211      BID == Builtin::BI__builtin_stdarg_start)
212    InitBuiltinVaListType();
213
214  QualType R = Context.BuiltinInfo.GetBuiltinType(BID, Context);
215  FunctionDecl *New = FunctionDecl::Create(Context,
216                                           Context.getTranslationUnitDecl(),
217                                           SourceLocation(), II, R,
218                                           FunctionDecl::Extern, false, 0);
219
220  // Create Decl objects for each parameter, adding them to the
221  // FunctionDecl.
222  if (FunctionTypeProto *FT = dyn_cast<FunctionTypeProto>(R)) {
223    llvm::SmallVector<ParmVarDecl*, 16> Params;
224    for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i)
225      Params.push_back(ParmVarDecl::Create(Context, New, SourceLocation(), 0,
226                                           FT->getArgType(i), VarDecl::None, 0,
227                                           0));
228    New->setParams(&Params[0], Params.size());
229  }
230
231
232
233  // TUScope is the translation-unit scope to insert this function into.
234  PushOnScopeChains(New, TUScope);
235  return New;
236}
237
238/// MergeTypeDefDecl - We just parsed a typedef 'New' which has the same name
239/// and scope as a previous declaration 'Old'.  Figure out how to resolve this
240/// situation, merging decls or emitting diagnostics as appropriate.
241///
242TypedefDecl *Sema::MergeTypeDefDecl(TypedefDecl *New, Decl *OldD) {
243  // Verify the old decl was also a typedef.
244  TypedefDecl *Old = dyn_cast<TypedefDecl>(OldD);
245  if (!Old) {
246    Diag(New->getLocation(), diag::err_redefinition_different_kind,
247         New->getName());
248    Diag(OldD->getLocation(), diag::err_previous_definition);
249    return New;
250  }
251
252  // If the typedef types are not identical, reject them in all languages and
253  // with any extensions enabled.
254  if (Old->getUnderlyingType() != New->getUnderlyingType() &&
255      Context.getCanonicalType(Old->getUnderlyingType()) !=
256      Context.getCanonicalType(New->getUnderlyingType())) {
257    Diag(New->getLocation(), diag::err_redefinition_different_typedef,
258         New->getUnderlyingType().getAsString(),
259         Old->getUnderlyingType().getAsString());
260    Diag(Old->getLocation(), diag::err_previous_definition);
261    return Old;
262  }
263
264  // Allow multiple definitions for ObjC built-in typedefs.
265  // FIXME: Verify the underlying types are equivalent!
266  if (getLangOptions().ObjC1 && isBuiltinObjCType(New))
267    return Old;
268
269  if (getLangOptions().Microsoft) return New;
270
271  // Redeclaration of a type is a constraint violation (6.7.2.3p1).
272  // Apparently GCC, Intel, and Sun all silently ignore the redeclaration if
273  // *either* declaration is in a system header. The code below implements
274  // this adhoc compatibility rule. FIXME: The following code will not
275  // work properly when compiling ".i" files (containing preprocessed output).
276  SourceManager &SrcMgr = Context.getSourceManager();
277  HeaderSearch &HdrInfo = PP.getHeaderSearchInfo();
278  const FileEntry *OldDeclFile = SrcMgr.getFileEntryForLoc(Old->getLocation());
279  if (OldDeclFile) {
280    DirectoryLookup::DirType OldDirType = HdrInfo.getFileDirFlavor(OldDeclFile);
281    // Allow reclarations in both SystemHeaderDir and ExternCSystemHeaderDir.
282    if (OldDirType != DirectoryLookup::NormalHeaderDir)
283      return New;
284  }
285  const FileEntry *NewDeclFile = SrcMgr.getFileEntryForLoc(New->getLocation());
286  if (NewDeclFile) {
287    DirectoryLookup::DirType NewDirType = HdrInfo.getFileDirFlavor(NewDeclFile);
288    // Allow reclarations in both SystemHeaderDir and ExternCSystemHeaderDir.
289    if (NewDirType != DirectoryLookup::NormalHeaderDir)
290      return New;
291  }
292
293  Diag(New->getLocation(), diag::err_redefinition, New->getName());
294  Diag(Old->getLocation(), diag::err_previous_definition);
295  return New;
296}
297
298/// DeclhasAttr - returns true if decl Declaration already has the target
299/// attribute.
300static bool DeclHasAttr(const Decl *decl, const Attr *target) {
301  for (const Attr *attr = decl->getAttrs(); attr; attr = attr->getNext())
302    if (attr->getKind() == target->getKind())
303      return true;
304
305  return false;
306}
307
308/// MergeAttributes - append attributes from the Old decl to the New one.
309static void MergeAttributes(Decl *New, Decl *Old) {
310  Attr *attr = const_cast<Attr*>(Old->getAttrs()), *tmp;
311
312  while (attr) {
313     tmp = attr;
314     attr = attr->getNext();
315
316    if (!DeclHasAttr(New, tmp)) {
317       New->addAttr(tmp);
318    } else {
319       tmp->setNext(0);
320       delete(tmp);
321    }
322  }
323
324  Old->invalidateAttrs();
325}
326
327/// MergeFunctionDecl - We just parsed a function 'New' from
328/// declarator D which has the same name and scope as a previous
329/// declaration 'Old'.  Figure out how to resolve this situation,
330/// merging decls or emitting diagnostics as appropriate.
331/// Redeclaration will be set true if thisNew is a redeclaration OldD.
332FunctionDecl *
333Sema::MergeFunctionDecl(FunctionDecl *New, Decl *OldD, bool &Redeclaration) {
334  Redeclaration = false;
335  // Verify the old decl was also a function.
336  FunctionDecl *Old = dyn_cast<FunctionDecl>(OldD);
337  if (!Old) {
338    Diag(New->getLocation(), diag::err_redefinition_different_kind,
339         New->getName());
340    Diag(OldD->getLocation(), diag::err_previous_definition);
341    return New;
342  }
343
344  QualType OldQType = Context.getCanonicalType(Old->getType());
345  QualType NewQType = Context.getCanonicalType(New->getType());
346
347  // C++ [dcl.fct]p3:
348  //   All declarations for a function shall agree exactly in both the
349  //   return type and the parameter-type-list.
350  if (getLangOptions().CPlusPlus && OldQType == NewQType) {
351    MergeAttributes(New, Old);
352    Redeclaration = true;
353    return MergeCXXFunctionDecl(New, Old);
354  }
355
356  // C: Function types need to be compatible, not identical. This handles
357  // duplicate function decls like "void f(int); void f(enum X);" properly.
358  if (!getLangOptions().CPlusPlus &&
359      Context.functionTypesAreCompatible(OldQType, NewQType)) {
360    MergeAttributes(New, Old);
361    Redeclaration = true;
362    return New;
363  }
364
365  // A function that has already been declared has been redeclared or defined
366  // with a different type- show appropriate diagnostic
367  diag::kind PrevDiag;
368  if (Old->isThisDeclarationADefinition())
369    PrevDiag = diag::err_previous_definition;
370  else if (Old->isImplicit())
371    PrevDiag = diag::err_previous_implicit_declaration;
372  else
373    PrevDiag = diag::err_previous_declaration;
374
375  // TODO: CHECK FOR CONFLICTS, multiple decls with same name in one scope.
376  // TODO: This is totally simplistic.  It should handle merging functions
377  // together etc, merging extern int X; int X; ...
378  Diag(New->getLocation(), diag::err_conflicting_types, New->getName());
379  Diag(Old->getLocation(), PrevDiag);
380  return New;
381}
382
383/// Predicate for C "tentative" external object definitions (C99 6.9.2).
384static bool isTentativeDefinition(VarDecl *VD) {
385  if (VD->isFileVarDecl())
386    return (!VD->getInit() &&
387            (VD->getStorageClass() == VarDecl::None ||
388             VD->getStorageClass() == VarDecl::Static));
389  return false;
390}
391
392/// CheckForFileScopedRedefinitions - Make sure we forgo redefinition errors
393/// when dealing with C "tentative" external object definitions (C99 6.9.2).
394void Sema::CheckForFileScopedRedefinitions(Scope *S, VarDecl *VD) {
395  bool VDIsTentative = isTentativeDefinition(VD);
396  bool VDIsIncompleteArray = VD->getType()->isIncompleteArrayType();
397
398  for (IdentifierResolver::iterator
399       I = IdResolver.begin(VD->getIdentifier(),
400                            VD->getDeclContext(), false/*LookInParentCtx*/),
401       E = IdResolver.end(); I != E; ++I) {
402    if (*I != VD && IdResolver.isDeclInScope(*I, VD->getDeclContext(), S)) {
403      VarDecl *OldDecl = dyn_cast<VarDecl>(*I);
404
405      // Handle the following case:
406      //   int a[10];
407      //   int a[];   - the code below makes sure we set the correct type.
408      //   int a[11]; - this is an error, size isn't 10.
409      if (OldDecl && VDIsTentative && VDIsIncompleteArray &&
410          OldDecl->getType()->isConstantArrayType())
411        VD->setType(OldDecl->getType());
412
413      // Check for "tentative" definitions. We can't accomplish this in
414      // MergeVarDecl since the initializer hasn't been attached.
415      if (!OldDecl || isTentativeDefinition(OldDecl) || VDIsTentative)
416        continue;
417
418      // Handle __private_extern__ just like extern.
419      if (OldDecl->getStorageClass() != VarDecl::Extern &&
420          OldDecl->getStorageClass() != VarDecl::PrivateExtern &&
421          VD->getStorageClass() != VarDecl::Extern &&
422          VD->getStorageClass() != VarDecl::PrivateExtern) {
423        Diag(VD->getLocation(), diag::err_redefinition, VD->getName());
424        Diag(OldDecl->getLocation(), diag::err_previous_definition);
425      }
426    }
427  }
428}
429
430/// MergeVarDecl - We just parsed a variable 'New' which has the same name
431/// and scope as a previous declaration 'Old'.  Figure out how to resolve this
432/// situation, merging decls or emitting diagnostics as appropriate.
433///
434/// Tentative definition rules (C99 6.9.2p2) are checked by
435/// FinalizeDeclaratorGroup. Unfortunately, we can't analyze tentative
436/// definitions here, since the initializer hasn't been attached.
437///
438VarDecl *Sema::MergeVarDecl(VarDecl *New, Decl *OldD) {
439  // Verify the old decl was also a variable.
440  VarDecl *Old = dyn_cast<VarDecl>(OldD);
441  if (!Old) {
442    Diag(New->getLocation(), diag::err_redefinition_different_kind,
443         New->getName());
444    Diag(OldD->getLocation(), diag::err_previous_definition);
445    return New;
446  }
447
448  MergeAttributes(New, Old);
449
450  // Verify the types match.
451  QualType OldCType = Context.getCanonicalType(Old->getType());
452  QualType NewCType = Context.getCanonicalType(New->getType());
453  if (OldCType != NewCType && !Context.typesAreCompatible(OldCType, NewCType)) {
454    Diag(New->getLocation(), diag::err_redefinition, New->getName());
455    Diag(Old->getLocation(), diag::err_previous_definition);
456    return New;
457  }
458  // C99 6.2.2p4: Check if we have a static decl followed by a non-static.
459  if (New->getStorageClass() == VarDecl::Static &&
460      (Old->getStorageClass() == VarDecl::None ||
461       Old->getStorageClass() == VarDecl::Extern)) {
462    Diag(New->getLocation(), diag::err_static_non_static, New->getName());
463    Diag(Old->getLocation(), diag::err_previous_definition);
464    return New;
465  }
466  // C99 6.2.2p4: Check if we have a non-static decl followed by a static.
467  if (New->getStorageClass() != VarDecl::Static &&
468      Old->getStorageClass() == VarDecl::Static) {
469    Diag(New->getLocation(), diag::err_non_static_static, New->getName());
470    Diag(Old->getLocation(), diag::err_previous_definition);
471    return New;
472  }
473  // File scoped variables are analyzed in FinalizeDeclaratorGroup.
474  if (!New->isFileVarDecl()) {
475    Diag(New->getLocation(), diag::err_redefinition, New->getName());
476    Diag(Old->getLocation(), diag::err_previous_definition);
477  }
478  return New;
479}
480
481/// CheckParmsForFunctionDef - Check that the parameters of the given
482/// function are appropriate for the definition of a function. This
483/// takes care of any checks that cannot be performed on the
484/// declaration itself, e.g., that the types of each of the function
485/// parameters are complete.
486bool Sema::CheckParmsForFunctionDef(FunctionDecl *FD) {
487  bool HasInvalidParm = false;
488  for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
489    ParmVarDecl *Param = FD->getParamDecl(p);
490
491    // C99 6.7.5.3p4: the parameters in a parameter type list in a
492    // function declarator that is part of a function definition of
493    // that function shall not have incomplete type.
494    if (Param->getType()->isIncompleteType() &&
495        !Param->isInvalidDecl()) {
496      Diag(Param->getLocation(), diag::err_typecheck_decl_incomplete_type,
497           Param->getType().getAsString());
498      Param->setInvalidDecl();
499      HasInvalidParm = true;
500    }
501  }
502
503  return HasInvalidParm;
504}
505
506/// CreateImplicitParameter - Creates an implicit function parameter
507/// in the scope S and with the given type. This routine is used, for
508/// example, to create the implicit "self" parameter in an Objective-C
509/// method.
510ImplicitParamDecl *
511Sema::CreateImplicitParameter(Scope *S, IdentifierInfo *Id,
512                              SourceLocation IdLoc, QualType Type) {
513  ImplicitParamDecl *New = ImplicitParamDecl::Create(Context, CurContext,
514      IdLoc, Id, Type, 0);
515  if (Id)
516    PushOnScopeChains(New, S);
517
518  return New;
519}
520
521/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with
522/// no declarator (e.g. "struct foo;") is parsed.
523Sema::DeclTy *Sema::ParsedFreeStandingDeclSpec(Scope *S, DeclSpec &DS) {
524  // TODO: emit error on 'int;' or 'const enum foo;'.
525  // TODO: emit error on 'typedef int;'
526  // if (!DS.isMissingDeclaratorOk()) Diag(...);
527
528  return dyn_cast_or_null<TagDecl>(static_cast<Decl *>(DS.getTypeRep()));
529}
530
531bool Sema::CheckSingleInitializer(Expr *&Init, QualType DeclType) {
532  // Get the type before calling CheckSingleAssignmentConstraints(), since
533  // it can promote the expression.
534  QualType InitType = Init->getType();
535
536  AssignConvertType ConvTy = CheckSingleAssignmentConstraints(DeclType, Init);
537  return DiagnoseAssignmentResult(ConvTy, Init->getLocStart(), DeclType,
538                                  InitType, Init, "initializing");
539}
540
541bool Sema::CheckStringLiteralInit(StringLiteral *strLiteral, QualType &DeclT) {
542  const ArrayType *AT = Context.getAsArrayType(DeclT);
543
544  if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
545    // C99 6.7.8p14. We have an array of character type with unknown size
546    // being initialized to a string literal.
547    llvm::APSInt ConstVal(32);
548    ConstVal = strLiteral->getByteLength() + 1;
549    // Return a new array type (C99 6.7.8p22).
550    DeclT = Context.getConstantArrayType(IAT->getElementType(), ConstVal,
551                                         ArrayType::Normal, 0);
552  } else {
553    const ConstantArrayType *CAT = cast<ConstantArrayType>(AT);
554    // C99 6.7.8p14. We have an array of character type with known size.
555    // FIXME: Avoid truncation for 64-bit length strings.
556    if (strLiteral->getByteLength() > (unsigned)CAT->getSize().getZExtValue())
557      Diag(strLiteral->getSourceRange().getBegin(),
558           diag::warn_initializer_string_for_char_array_too_long,
559           strLiteral->getSourceRange());
560  }
561  // Set type from "char *" to "constant array of char".
562  strLiteral->setType(DeclT);
563  // For now, we always return false (meaning success).
564  return false;
565}
566
567StringLiteral *Sema::IsStringLiteralInit(Expr *Init, QualType DeclType) {
568  const ArrayType *AT = Context.getAsArrayType(DeclType);
569  if (AT && AT->getElementType()->isCharType()) {
570    return dyn_cast<StringLiteral>(Init);
571  }
572  return 0;
573}
574
575bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType) {
576  // C99 6.7.8p3: The type of the entity to be initialized shall be an array
577  // of unknown size ("[]") or an object type that is not a variable array type.
578  if (const VariableArrayType *VAT = Context.getAsVariableArrayType(DeclType))
579    return Diag(VAT->getSizeExpr()->getLocStart(),
580                diag::err_variable_object_no_init,
581                VAT->getSizeExpr()->getSourceRange());
582
583  InitListExpr *InitList = dyn_cast<InitListExpr>(Init);
584  if (!InitList) {
585    // FIXME: Handle wide strings
586    if (StringLiteral *strLiteral = IsStringLiteralInit(Init, DeclType))
587      return CheckStringLiteralInit(strLiteral, DeclType);
588
589    if (DeclType->isArrayType())
590      return Diag(Init->getLocStart(),
591                  diag::err_array_init_list_required,
592                  Init->getSourceRange());
593
594    return CheckSingleInitializer(Init, DeclType);
595  }
596
597  InitListChecker CheckInitList(this, InitList, DeclType);
598  return CheckInitList.HadError();
599}
600
601Sema::DeclTy *
602Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
603  ScopedDecl *LastDeclarator = dyn_cast_or_null<ScopedDecl>((Decl *)lastDecl);
604  IdentifierInfo *II = D.getIdentifier();
605
606  // All of these full declarators require an identifier.  If it doesn't have
607  // one, the ParsedFreeStandingDeclSpec action should be used.
608  if (II == 0) {
609    Diag(D.getDeclSpec().getSourceRange().getBegin(),
610         diag::err_declarator_need_ident,
611         D.getDeclSpec().getSourceRange(), D.getSourceRange());
612    return 0;
613  }
614
615  // The scope passed in may not be a decl scope.  Zip up the scope tree until
616  // we find one that is.
617  while ((S->getFlags() & Scope::DeclScope) == 0)
618    S = S->getParent();
619
620  // See if this is a redefinition of a variable in the same scope.
621  Decl *PrevDecl = LookupDecl(II, Decl::IDNS_Ordinary, S);
622  ScopedDecl *New;
623  bool InvalidDecl = false;
624
625  // In C++, the previous declaration we find might be a tag type
626  // (class or enum). In this case, the new declaration will hide the
627  // tag type.
628  if (PrevDecl && PrevDecl->getIdentifierNamespace() == Decl::IDNS_Tag)
629    PrevDecl = 0;
630
631  QualType R = GetTypeForDeclarator(D, S);
632  assert(!R.isNull() && "GetTypeForDeclarator() returned null type");
633
634  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {
635    // Check that there are no default arguments (C++ only).
636    if (getLangOptions().CPlusPlus)
637      CheckExtraCXXDefaultArguments(D);
638
639    TypedefDecl *NewTD = ParseTypedefDecl(S, D, R, LastDeclarator);
640    if (!NewTD) return 0;
641
642    // Handle attributes prior to checking for duplicates in MergeVarDecl
643    ProcessDeclAttributes(NewTD, D);
644    // Merge the decl with the existing one if appropriate. If the decl is
645    // in an outer scope, it isn't the same thing.
646    if (PrevDecl && IdResolver.isDeclInScope(PrevDecl, CurContext, S)) {
647      NewTD = MergeTypeDefDecl(NewTD, PrevDecl);
648      if (NewTD == 0) return 0;
649    }
650    New = NewTD;
651    if (S->getFnParent() == 0) {
652      // C99 6.7.7p2: If a typedef name specifies a variably modified type
653      // then it shall have block scope.
654      if (NewTD->getUnderlyingType()->isVariablyModifiedType()) {
655        // FIXME: Diagnostic needs to be fixed.
656        Diag(D.getIdentifierLoc(), diag::err_typecheck_illegal_vla);
657        InvalidDecl = true;
658      }
659    }
660  } else if (R.getTypePtr()->isFunctionType()) {
661    FunctionDecl::StorageClass SC = FunctionDecl::None;
662    switch (D.getDeclSpec().getStorageClassSpec()) {
663      default: assert(0 && "Unknown storage class!");
664      case DeclSpec::SCS_auto:
665      case DeclSpec::SCS_register:
666        Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_func,
667             R.getAsString());
668        InvalidDecl = true;
669        break;
670      case DeclSpec::SCS_unspecified: SC = FunctionDecl::None; break;
671      case DeclSpec::SCS_extern:      SC = FunctionDecl::Extern; break;
672      case DeclSpec::SCS_static:      SC = FunctionDecl::Static; break;
673      case DeclSpec::SCS_private_extern: SC = FunctionDecl::PrivateExtern;break;
674    }
675
676    bool isInline = D.getDeclSpec().isInlineSpecified();
677    FunctionDecl *NewFD;
678    if (D.getContext() == Declarator::MemberContext) {
679      // This is a C++ method declaration.
680      NewFD = CXXMethodDecl::Create(Context, cast<CXXRecordDecl>(CurContext),
681                                    D.getIdentifierLoc(), II, R,
682                                    (SC == FunctionDecl::Static), isInline,
683                                    LastDeclarator);
684    } else {
685      NewFD = FunctionDecl::Create(Context, CurContext,
686                                   D.getIdentifierLoc(),
687                                   II, R, SC, isInline,
688                                   LastDeclarator);
689    }
690    // Handle attributes.
691    ProcessDeclAttributes(NewFD, D);
692
693    // Handle GNU asm-label extension (encoded as an attribute).
694    if (Expr *E = (Expr*) D.getAsmLabel()) {
695      // The parser guarantees this is a string.
696      StringLiteral *SE = cast<StringLiteral>(E);
697      NewFD->addAttr(new AsmLabelAttr(std::string(SE->getStrData(),
698                                                  SE->getByteLength())));
699    }
700
701    // Copy the parameter declarations from the declarator D to
702    // the function declaration NewFD, if they are available.
703    if (D.getNumTypeObjects() > 0 &&
704        D.getTypeObject(0).Fun.hasPrototype) {
705      DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
706
707      // Create Decl objects for each parameter, adding them to the
708      // FunctionDecl.
709      llvm::SmallVector<ParmVarDecl*, 16> Params;
710
711      // Check for C99 6.7.5.3p10 - foo(void) is a non-varargs
712      // function that takes no arguments, not a function that takes a
713      // single void argument.
714      // We let through "const void" here because Sema::GetTypeForDeclarator
715      // already checks for that case.
716      if (FTI.NumArgs == 1 && !FTI.isVariadic && FTI.ArgInfo[0].Ident == 0 &&
717          FTI.ArgInfo[0].Param &&
718          ((ParmVarDecl*)FTI.ArgInfo[0].Param)->getType()->isVoidType()) {
719        // empty arg list, don't push any params.
720        ParmVarDecl *Param = (ParmVarDecl*)FTI.ArgInfo[0].Param;
721
722        // In C++, the empty parameter-type-list must be spelled "void"; a
723        // typedef of void is not permitted.
724        if (getLangOptions().CPlusPlus &&
725            Param->getType().getUnqualifiedType() != Context.VoidTy) {
726          Diag(Param->getLocation(), diag::ext_param_typedef_of_void);
727        }
728
729      } else {
730        for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i)
731          Params.push_back((ParmVarDecl *)FTI.ArgInfo[i].Param);
732      }
733
734      NewFD->setParams(&Params[0], Params.size());
735    }
736
737    // Merge the decl with the existing one if appropriate. Since C functions
738    // are in a flat namespace, make sure we consider decls in outer scopes.
739    if (PrevDecl &&
740        (!getLangOptions().CPlusPlus ||
741         IdResolver.isDeclInScope(PrevDecl, CurContext, S)) ) {
742      bool Redeclaration = false;
743      NewFD = MergeFunctionDecl(NewFD, PrevDecl, Redeclaration);
744      if (NewFD == 0) return 0;
745      if (Redeclaration) {
746        NewFD->setPreviousDeclaration(cast<FunctionDecl>(PrevDecl));
747      }
748    }
749    New = NewFD;
750
751    // In C++, check default arguments now that we have merged decls.
752    if (getLangOptions().CPlusPlus)
753      CheckCXXDefaultArguments(NewFD);
754  } else {
755    // Check that there are no default arguments (C++ only).
756    if (getLangOptions().CPlusPlus)
757      CheckExtraCXXDefaultArguments(D);
758
759    if (R.getTypePtr()->isObjCInterfaceType()) {
760      Diag(D.getIdentifierLoc(), diag::err_statically_allocated_object,
761           D.getIdentifier()->getName());
762      InvalidDecl = true;
763    }
764
765    VarDecl *NewVD;
766    VarDecl::StorageClass SC;
767    switch (D.getDeclSpec().getStorageClassSpec()) {
768    default: assert(0 && "Unknown storage class!");
769    case DeclSpec::SCS_unspecified:    SC = VarDecl::None; break;
770    case DeclSpec::SCS_extern:         SC = VarDecl::Extern; break;
771    case DeclSpec::SCS_static:         SC = VarDecl::Static; break;
772    case DeclSpec::SCS_auto:           SC = VarDecl::Auto; break;
773    case DeclSpec::SCS_register:       SC = VarDecl::Register; break;
774    case DeclSpec::SCS_private_extern: SC = VarDecl::PrivateExtern; break;
775    }
776    if (D.getContext() == Declarator::MemberContext) {
777      assert(SC == VarDecl::Static && "Invalid storage class for member!");
778      // This is a static data member for a C++ class.
779      NewVD = CXXClassVarDecl::Create(Context, cast<CXXRecordDecl>(CurContext),
780                                      D.getIdentifierLoc(), II,
781                                      R, LastDeclarator);
782    } else {
783      if (S->getFnParent() == 0) {
784        // C99 6.9p2: The storage-class specifiers auto and register shall not
785        // appear in the declaration specifiers in an external declaration.
786        if (SC == VarDecl::Auto || SC == VarDecl::Register) {
787          Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope,
788               R.getAsString());
789          InvalidDecl = true;
790        }
791        NewVD = VarDecl::Create(Context, CurContext, D.getIdentifierLoc(),
792                                II, R, SC, LastDeclarator);
793      } else {
794        NewVD = VarDecl::Create(Context, CurContext, D.getIdentifierLoc(),
795                                II, R, SC, LastDeclarator);
796      }
797    }
798    // Handle attributes prior to checking for duplicates in MergeVarDecl
799    ProcessDeclAttributes(NewVD, D);
800
801    // Handle GNU asm-label extension (encoded as an attribute).
802    if (Expr *E = (Expr*) D.getAsmLabel()) {
803      // The parser guarantees this is a string.
804      StringLiteral *SE = cast<StringLiteral>(E);
805      NewVD->addAttr(new AsmLabelAttr(std::string(SE->getStrData(),
806                                                  SE->getByteLength())));
807    }
808
809    // Emit an error if an address space was applied to decl with local storage.
810    // This includes arrays of objects with address space qualifiers, but not
811    // automatic variables that point to other address spaces.
812    // ISO/IEC TR 18037 S5.1.2
813    if (NewVD->hasLocalStorage() && (NewVD->getType().getAddressSpace() != 0)) {
814      Diag(D.getIdentifierLoc(), diag::err_as_qualified_auto_decl);
815      InvalidDecl = true;
816    }
817    // Merge the decl with the existing one if appropriate. If the decl is
818    // in an outer scope, it isn't the same thing.
819    if (PrevDecl && IdResolver.isDeclInScope(PrevDecl, CurContext, S)) {
820      NewVD = MergeVarDecl(NewVD, PrevDecl);
821      if (NewVD == 0) return 0;
822    }
823    New = NewVD;
824  }
825
826  // If this has an identifier, add it to the scope stack.
827  if (II)
828    PushOnScopeChains(New, S);
829  // If any semantic error occurred, mark the decl as invalid.
830  if (D.getInvalidType() || InvalidDecl)
831    New->setInvalidDecl();
832
833  return New;
834}
835
836bool Sema::CheckAddressConstantExpressionLValue(const Expr* Init) {
837  switch (Init->getStmtClass()) {
838  default:
839    Diag(Init->getExprLoc(),
840         diag::err_init_element_not_constant, Init->getSourceRange());
841    return true;
842  case Expr::ParenExprClass: {
843    const ParenExpr* PE = cast<ParenExpr>(Init);
844    return CheckAddressConstantExpressionLValue(PE->getSubExpr());
845  }
846  case Expr::CompoundLiteralExprClass:
847    return cast<CompoundLiteralExpr>(Init)->isFileScope();
848  case Expr::DeclRefExprClass: {
849    const Decl *D = cast<DeclRefExpr>(Init)->getDecl();
850    if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
851      if (VD->hasGlobalStorage())
852        return false;
853      Diag(Init->getExprLoc(),
854           diag::err_init_element_not_constant, Init->getSourceRange());
855      return true;
856    }
857    if (isa<FunctionDecl>(D))
858      return false;
859    Diag(Init->getExprLoc(),
860         diag::err_init_element_not_constant, Init->getSourceRange());
861    return true;
862  }
863  case Expr::MemberExprClass: {
864    const MemberExpr *M = cast<MemberExpr>(Init);
865    if (M->isArrow())
866      return CheckAddressConstantExpression(M->getBase());
867    return CheckAddressConstantExpressionLValue(M->getBase());
868  }
869  case Expr::ArraySubscriptExprClass: {
870    // FIXME: Should we pedwarn for "x[0+0]" (where x is a pointer)?
871    const ArraySubscriptExpr *ASE = cast<ArraySubscriptExpr>(Init);
872    return CheckAddressConstantExpression(ASE->getBase()) ||
873           CheckArithmeticConstantExpression(ASE->getIdx());
874  }
875  case Expr::StringLiteralClass:
876  case Expr::PredefinedExprClass:
877    return false;
878  case Expr::UnaryOperatorClass: {
879    const UnaryOperator *Exp = cast<UnaryOperator>(Init);
880
881    // C99 6.6p9
882    if (Exp->getOpcode() == UnaryOperator::Deref)
883      return CheckAddressConstantExpression(Exp->getSubExpr());
884
885    Diag(Init->getExprLoc(),
886         diag::err_init_element_not_constant, Init->getSourceRange());
887    return true;
888  }
889  }
890}
891
892bool Sema::CheckAddressConstantExpression(const Expr* Init) {
893  switch (Init->getStmtClass()) {
894  default:
895    Diag(Init->getExprLoc(),
896         diag::err_init_element_not_constant, Init->getSourceRange());
897    return true;
898  case Expr::ParenExprClass: {
899    const ParenExpr* PE = cast<ParenExpr>(Init);
900    return CheckAddressConstantExpression(PE->getSubExpr());
901  }
902  case Expr::StringLiteralClass:
903  case Expr::ObjCStringLiteralClass:
904    return false;
905  case Expr::CallExprClass: {
906    const CallExpr *CE = cast<CallExpr>(Init);
907    if (CE->isBuiltinConstantExpr())
908      return false;
909    Diag(Init->getExprLoc(),
910         diag::err_init_element_not_constant, Init->getSourceRange());
911    return true;
912  }
913  case Expr::UnaryOperatorClass: {
914    const UnaryOperator *Exp = cast<UnaryOperator>(Init);
915
916    // C99 6.6p9
917    if (Exp->getOpcode() == UnaryOperator::AddrOf)
918      return CheckAddressConstantExpressionLValue(Exp->getSubExpr());
919
920    if (Exp->getOpcode() == UnaryOperator::Extension)
921      return CheckAddressConstantExpression(Exp->getSubExpr());
922
923    Diag(Init->getExprLoc(),
924         diag::err_init_element_not_constant, Init->getSourceRange());
925    return true;
926  }
927  case Expr::BinaryOperatorClass: {
928    // FIXME: Should we pedwarn for expressions like "a + 1 + 2"?
929    const BinaryOperator *Exp = cast<BinaryOperator>(Init);
930
931    Expr *PExp = Exp->getLHS();
932    Expr *IExp = Exp->getRHS();
933    if (IExp->getType()->isPointerType())
934      std::swap(PExp, IExp);
935
936    // FIXME: Should we pedwarn if IExp isn't an integer constant expression?
937    return CheckAddressConstantExpression(PExp) ||
938           CheckArithmeticConstantExpression(IExp);
939  }
940  case Expr::ImplicitCastExprClass: {
941    const Expr* SubExpr = cast<ImplicitCastExpr>(Init)->getSubExpr();
942
943    // Check for implicit promotion
944    if (SubExpr->getType()->isFunctionType() ||
945        SubExpr->getType()->isArrayType())
946      return CheckAddressConstantExpressionLValue(SubExpr);
947
948    // Check for pointer->pointer cast
949    if (SubExpr->getType()->isPointerType())
950      return CheckAddressConstantExpression(SubExpr);
951
952    if (SubExpr->getType()->isArithmeticType())
953      return CheckArithmeticConstantExpression(SubExpr);
954
955    Diag(Init->getExprLoc(),
956         diag::err_init_element_not_constant, Init->getSourceRange());
957    return true;
958  }
959  case Expr::CastExprClass: {
960    const Expr* SubExpr = cast<CastExpr>(Init)->getSubExpr();
961
962    // Check for pointer->pointer cast
963    if (SubExpr->getType()->isPointerType())
964      return CheckAddressConstantExpression(SubExpr);
965
966    // FIXME: Should we pedwarn for (int*)(0+0)?
967    if (SubExpr->getType()->isArithmeticType())
968      return CheckArithmeticConstantExpression(SubExpr);
969
970    Diag(Init->getExprLoc(),
971         diag::err_init_element_not_constant, Init->getSourceRange());
972    return true;
973  }
974  case Expr::ConditionalOperatorClass: {
975    // FIXME: Should we pedwarn here?
976    const ConditionalOperator *Exp = cast<ConditionalOperator>(Init);
977    if (!Exp->getCond()->getType()->isArithmeticType()) {
978      Diag(Init->getExprLoc(),
979           diag::err_init_element_not_constant, Init->getSourceRange());
980      return true;
981    }
982    if (CheckArithmeticConstantExpression(Exp->getCond()))
983      return true;
984    if (Exp->getLHS() &&
985        CheckAddressConstantExpression(Exp->getLHS()))
986      return true;
987    return CheckAddressConstantExpression(Exp->getRHS());
988  }
989  case Expr::AddrLabelExprClass:
990    return false;
991  }
992}
993
994static const Expr* FindExpressionBaseAddress(const Expr* E);
995
996static const Expr* FindExpressionBaseAddressLValue(const Expr* E) {
997  switch (E->getStmtClass()) {
998  default:
999    return E;
1000  case Expr::ParenExprClass: {
1001    const ParenExpr* PE = cast<ParenExpr>(E);
1002    return FindExpressionBaseAddressLValue(PE->getSubExpr());
1003  }
1004  case Expr::MemberExprClass: {
1005    const MemberExpr *M = cast<MemberExpr>(E);
1006    if (M->isArrow())
1007      return FindExpressionBaseAddress(M->getBase());
1008    return FindExpressionBaseAddressLValue(M->getBase());
1009  }
1010  case Expr::ArraySubscriptExprClass: {
1011    const ArraySubscriptExpr *ASE = cast<ArraySubscriptExpr>(E);
1012    return FindExpressionBaseAddress(ASE->getBase());
1013  }
1014  case Expr::UnaryOperatorClass: {
1015    const UnaryOperator *Exp = cast<UnaryOperator>(E);
1016
1017    if (Exp->getOpcode() == UnaryOperator::Deref)
1018      return FindExpressionBaseAddress(Exp->getSubExpr());
1019
1020    return E;
1021  }
1022  }
1023}
1024
1025static const Expr* FindExpressionBaseAddress(const Expr* E) {
1026  switch (E->getStmtClass()) {
1027  default:
1028    return E;
1029  case Expr::ParenExprClass: {
1030    const ParenExpr* PE = cast<ParenExpr>(E);
1031    return FindExpressionBaseAddress(PE->getSubExpr());
1032  }
1033  case Expr::UnaryOperatorClass: {
1034    const UnaryOperator *Exp = cast<UnaryOperator>(E);
1035
1036    // C99 6.6p9
1037    if (Exp->getOpcode() == UnaryOperator::AddrOf)
1038      return FindExpressionBaseAddressLValue(Exp->getSubExpr());
1039
1040    if (Exp->getOpcode() == UnaryOperator::Extension)
1041      return FindExpressionBaseAddress(Exp->getSubExpr());
1042
1043    return E;
1044  }
1045  case Expr::BinaryOperatorClass: {
1046    const BinaryOperator *Exp = cast<BinaryOperator>(E);
1047
1048    Expr *PExp = Exp->getLHS();
1049    Expr *IExp = Exp->getRHS();
1050    if (IExp->getType()->isPointerType())
1051      std::swap(PExp, IExp);
1052
1053    return FindExpressionBaseAddress(PExp);
1054  }
1055  case Expr::ImplicitCastExprClass: {
1056    const Expr* SubExpr = cast<ImplicitCastExpr>(E)->getSubExpr();
1057
1058    // Check for implicit promotion
1059    if (SubExpr->getType()->isFunctionType() ||
1060        SubExpr->getType()->isArrayType())
1061      return FindExpressionBaseAddressLValue(SubExpr);
1062
1063    // Check for pointer->pointer cast
1064    if (SubExpr->getType()->isPointerType())
1065      return FindExpressionBaseAddress(SubExpr);
1066
1067    // We assume that we have an arithmetic expression here;
1068    // if we don't, we'll figure it out later
1069    return 0;
1070  }
1071  case Expr::CastExprClass: {
1072    const Expr* SubExpr = cast<CastExpr>(E)->getSubExpr();
1073
1074    // Check for pointer->pointer cast
1075    if (SubExpr->getType()->isPointerType())
1076      return FindExpressionBaseAddress(SubExpr);
1077
1078    // We assume that we have an arithmetic expression here;
1079    // if we don't, we'll figure it out later
1080    return 0;
1081  }
1082  }
1083}
1084
1085bool Sema::CheckArithmeticConstantExpression(const Expr* Init) {
1086  switch (Init->getStmtClass()) {
1087  default:
1088    Diag(Init->getExprLoc(),
1089         diag::err_init_element_not_constant, Init->getSourceRange());
1090    return true;
1091  case Expr::ParenExprClass: {
1092    const ParenExpr* PE = cast<ParenExpr>(Init);
1093    return CheckArithmeticConstantExpression(PE->getSubExpr());
1094  }
1095  case Expr::FloatingLiteralClass:
1096  case Expr::IntegerLiteralClass:
1097  case Expr::CharacterLiteralClass:
1098  case Expr::ImaginaryLiteralClass:
1099  case Expr::TypesCompatibleExprClass:
1100  case Expr::CXXBoolLiteralExprClass:
1101    return false;
1102  case Expr::CallExprClass: {
1103    const CallExpr *CE = cast<CallExpr>(Init);
1104    if (CE->isBuiltinConstantExpr())
1105      return false;
1106    Diag(Init->getExprLoc(),
1107         diag::err_init_element_not_constant, Init->getSourceRange());
1108    return true;
1109  }
1110  case Expr::DeclRefExprClass: {
1111    const Decl *D = cast<DeclRefExpr>(Init)->getDecl();
1112    if (isa<EnumConstantDecl>(D))
1113      return false;
1114    Diag(Init->getExprLoc(),
1115         diag::err_init_element_not_constant, Init->getSourceRange());
1116    return true;
1117  }
1118  case Expr::CompoundLiteralExprClass:
1119    // Allow "(vector type){2,4}"; normal C constraints don't allow this,
1120    // but vectors are allowed to be magic.
1121    if (Init->getType()->isVectorType())
1122      return false;
1123    Diag(Init->getExprLoc(),
1124         diag::err_init_element_not_constant, Init->getSourceRange());
1125    return true;
1126  case Expr::UnaryOperatorClass: {
1127    const UnaryOperator *Exp = cast<UnaryOperator>(Init);
1128
1129    switch (Exp->getOpcode()) {
1130    // Address, indirect, pre/post inc/dec, etc are not valid constant exprs.
1131    // See C99 6.6p3.
1132    default:
1133      Diag(Init->getExprLoc(),
1134           diag::err_init_element_not_constant, Init->getSourceRange());
1135      return true;
1136    case UnaryOperator::SizeOf:
1137    case UnaryOperator::AlignOf:
1138    case UnaryOperator::OffsetOf:
1139      // sizeof(E) is a constantexpr if and only if E is not evaluted.
1140      // See C99 6.5.3.4p2 and 6.6p3.
1141      if (Exp->getSubExpr()->getType()->isConstantSizeType())
1142        return false;
1143      Diag(Init->getExprLoc(),
1144           diag::err_init_element_not_constant, Init->getSourceRange());
1145      return true;
1146    case UnaryOperator::Extension:
1147    case UnaryOperator::LNot:
1148    case UnaryOperator::Plus:
1149    case UnaryOperator::Minus:
1150    case UnaryOperator::Not:
1151      return CheckArithmeticConstantExpression(Exp->getSubExpr());
1152    }
1153  }
1154  case Expr::SizeOfAlignOfTypeExprClass: {
1155    const SizeOfAlignOfTypeExpr *Exp = cast<SizeOfAlignOfTypeExpr>(Init);
1156    // Special check for void types, which are allowed as an extension
1157    if (Exp->getArgumentType()->isVoidType())
1158      return false;
1159    // alignof always evaluates to a constant.
1160    // FIXME: is sizeof(int[3.0]) a constant expression?
1161    if (Exp->isSizeOf() && !Exp->getArgumentType()->isConstantSizeType()) {
1162      Diag(Init->getExprLoc(),
1163           diag::err_init_element_not_constant, Init->getSourceRange());
1164      return true;
1165    }
1166    return false;
1167  }
1168  case Expr::BinaryOperatorClass: {
1169    const BinaryOperator *Exp = cast<BinaryOperator>(Init);
1170
1171    if (Exp->getLHS()->getType()->isArithmeticType() &&
1172        Exp->getRHS()->getType()->isArithmeticType()) {
1173      return CheckArithmeticConstantExpression(Exp->getLHS()) ||
1174             CheckArithmeticConstantExpression(Exp->getRHS());
1175    }
1176
1177    if (Exp->getLHS()->getType()->isPointerType() &&
1178        Exp->getRHS()->getType()->isPointerType()) {
1179      const Expr* LHSBase = FindExpressionBaseAddress(Exp->getLHS());
1180      const Expr* RHSBase = FindExpressionBaseAddress(Exp->getRHS());
1181
1182      // Only allow a null (constant integer) base; we could
1183      // allow some additional cases if necessary, but this
1184      // is sufficient to cover offsetof-like constructs.
1185      if (!LHSBase && !RHSBase) {
1186        return CheckAddressConstantExpression(Exp->getLHS()) ||
1187               CheckAddressConstantExpression(Exp->getRHS());
1188      }
1189    }
1190
1191    Diag(Init->getExprLoc(),
1192         diag::err_init_element_not_constant, Init->getSourceRange());
1193    return true;
1194  }
1195  case Expr::ImplicitCastExprClass:
1196  case Expr::CastExprClass: {
1197    const Expr *SubExpr;
1198    if (const CastExpr *C = dyn_cast<CastExpr>(Init)) {
1199      SubExpr = C->getSubExpr();
1200    } else {
1201      SubExpr = cast<ImplicitCastExpr>(Init)->getSubExpr();
1202    }
1203
1204    if (SubExpr->getType()->isArithmeticType())
1205      return CheckArithmeticConstantExpression(SubExpr);
1206
1207    Diag(Init->getExprLoc(),
1208         diag::err_init_element_not_constant, Init->getSourceRange());
1209    return true;
1210  }
1211  case Expr::ConditionalOperatorClass: {
1212    const ConditionalOperator *Exp = cast<ConditionalOperator>(Init);
1213    if (CheckArithmeticConstantExpression(Exp->getCond()))
1214      return true;
1215    if (Exp->getLHS() &&
1216        CheckArithmeticConstantExpression(Exp->getLHS()))
1217      return true;
1218    return CheckArithmeticConstantExpression(Exp->getRHS());
1219  }
1220  }
1221}
1222
1223bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {
1224  Init = Init->IgnoreParens();
1225
1226  // Look through CXXDefaultArgExprs; they have no meaning in this context.
1227  if (CXXDefaultArgExpr* DAE = dyn_cast<CXXDefaultArgExpr>(Init))
1228    return CheckForConstantInitializer(DAE->getExpr(), DclT);
1229
1230  if (CompoundLiteralExpr *e = dyn_cast<CompoundLiteralExpr>(Init))
1231    return CheckForConstantInitializer(e->getInitializer(), DclT);
1232
1233  if (Init->getType()->isReferenceType()) {
1234    // FIXME: Work out how the heck reference types work
1235    return false;
1236#if 0
1237    // A reference is constant if the address of the expression
1238    // is constant
1239    // We look through initlists here to simplify
1240    // CheckAddressConstantExpressionLValue.
1241    if (InitListExpr *Exp = dyn_cast<InitListExpr>(Init)) {
1242      assert(Exp->getNumInits() > 0 &&
1243             "Refernce initializer cannot be empty");
1244      Init = Exp->getInit(0);
1245    }
1246    return CheckAddressConstantExpressionLValue(Init);
1247#endif
1248  }
1249
1250  if (InitListExpr *Exp = dyn_cast<InitListExpr>(Init)) {
1251    unsigned numInits = Exp->getNumInits();
1252    for (unsigned i = 0; i < numInits; i++) {
1253      // FIXME: Need to get the type of the declaration for C++,
1254      // because it could be a reference?
1255      if (CheckForConstantInitializer(Exp->getInit(i),
1256                                      Exp->getInit(i)->getType()))
1257        return true;
1258    }
1259    return false;
1260  }
1261
1262  if (Init->isNullPointerConstant(Context))
1263    return false;
1264  if (Init->getType()->isArithmeticType()) {
1265    QualType InitTy = Context.getCanonicalType(Init->getType())
1266                             .getUnqualifiedType();
1267    if (InitTy == Context.BoolTy) {
1268      // Special handling for pointers implicitly cast to bool;
1269      // (e.g. "_Bool rr = &rr;"). This is only legal at the top level.
1270      if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Init)) {
1271        Expr* SubE = ICE->getSubExpr();
1272        if (SubE->getType()->isPointerType() ||
1273            SubE->getType()->isArrayType() ||
1274            SubE->getType()->isFunctionType()) {
1275          return CheckAddressConstantExpression(Init);
1276        }
1277      }
1278    } else if (InitTy->isIntegralType()) {
1279      Expr* SubE = 0;
1280      if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Init))
1281        SubE = ICE->getSubExpr();
1282      else if (CastExpr* CE = dyn_cast<CastExpr>(Init))
1283        SubE = CE->getSubExpr();
1284      // Special check for pointer cast to int; we allow as an extension
1285      // an address constant cast to an integer if the integer
1286      // is of an appropriate width (this sort of code is apparently used
1287      // in some places).
1288      // FIXME: Add pedwarn?
1289      // FIXME: Don't allow bitfields here!  Need the FieldDecl for that.
1290      if (SubE && (SubE->getType()->isPointerType() ||
1291                   SubE->getType()->isArrayType() ||
1292                   SubE->getType()->isFunctionType())) {
1293        unsigned IntWidth = Context.getTypeSize(Init->getType());
1294        unsigned PointerWidth = Context.getTypeSize(Context.VoidPtrTy);
1295        if (IntWidth >= PointerWidth)
1296          return CheckAddressConstantExpression(Init);
1297      }
1298    }
1299
1300    return CheckArithmeticConstantExpression(Init);
1301  }
1302
1303  if (Init->getType()->isPointerType())
1304    return CheckAddressConstantExpression(Init);
1305
1306  // An array type at the top level that isn't an init-list must
1307  // be a string literal
1308  if (Init->getType()->isArrayType())
1309    return false;
1310
1311  Diag(Init->getExprLoc(), diag::err_init_element_not_constant,
1312       Init->getSourceRange());
1313  return true;
1314}
1315
1316void Sema::AddInitializerToDecl(DeclTy *dcl, ExprTy *init) {
1317  Decl *RealDecl = static_cast<Decl *>(dcl);
1318  Expr *Init = static_cast<Expr *>(init);
1319  assert(Init && "missing initializer");
1320
1321  // If there is no declaration, there was an error parsing it.  Just ignore
1322  // the initializer.
1323  if (RealDecl == 0) {
1324    delete Init;
1325    return;
1326  }
1327
1328  VarDecl *VDecl = dyn_cast<VarDecl>(RealDecl);
1329  if (!VDecl) {
1330    Diag(dyn_cast<ScopedDecl>(RealDecl)->getLocation(),
1331         diag::err_illegal_initializer);
1332    RealDecl->setInvalidDecl();
1333    return;
1334  }
1335  // Get the decls type and save a reference for later, since
1336  // CheckInitializerTypes may change it.
1337  QualType DclT = VDecl->getType(), SavT = DclT;
1338  if (VDecl->isBlockVarDecl()) {
1339    VarDecl::StorageClass SC = VDecl->getStorageClass();
1340    if (SC == VarDecl::Extern) { // C99 6.7.8p5
1341      Diag(VDecl->getLocation(), diag::err_block_extern_cant_init);
1342      VDecl->setInvalidDecl();
1343    } else if (!VDecl->isInvalidDecl()) {
1344      if (CheckInitializerTypes(Init, DclT))
1345        VDecl->setInvalidDecl();
1346      if (SC == VarDecl::Static) // C99 6.7.8p4.
1347        CheckForConstantInitializer(Init, DclT);
1348    }
1349  } else if (VDecl->isFileVarDecl()) {
1350    if (VDecl->getStorageClass() == VarDecl::Extern)
1351      Diag(VDecl->getLocation(), diag::warn_extern_init);
1352    if (!VDecl->isInvalidDecl())
1353      if (CheckInitializerTypes(Init, DclT))
1354        VDecl->setInvalidDecl();
1355
1356    // C99 6.7.8p4. All file scoped initializers need to be constant.
1357    CheckForConstantInitializer(Init, DclT);
1358  }
1359  // If the type changed, it means we had an incomplete type that was
1360  // completed by the initializer. For example:
1361  //   int ary[] = { 1, 3, 5 };
1362  // "ary" transitions from a VariableArrayType to a ConstantArrayType.
1363  if (!VDecl->isInvalidDecl() && (DclT != SavT)) {
1364    VDecl->setType(DclT);
1365    Init->setType(DclT);
1366  }
1367
1368  // Attach the initializer to the decl.
1369  VDecl->setInit(Init);
1370  return;
1371}
1372
1373/// The declarators are chained together backwards, reverse the list.
1374Sema::DeclTy *Sema::FinalizeDeclaratorGroup(Scope *S, DeclTy *group) {
1375  // Often we have single declarators, handle them quickly.
1376  Decl *GroupDecl = static_cast<Decl*>(group);
1377  if (GroupDecl == 0)
1378    return 0;
1379
1380  ScopedDecl *Group = dyn_cast<ScopedDecl>(GroupDecl);
1381  ScopedDecl *NewGroup = 0;
1382  if (Group->getNextDeclarator() == 0)
1383    NewGroup = Group;
1384  else { // reverse the list.
1385    while (Group) {
1386      ScopedDecl *Next = Group->getNextDeclarator();
1387      Group->setNextDeclarator(NewGroup);
1388      NewGroup = Group;
1389      Group = Next;
1390    }
1391  }
1392  // Perform semantic analysis that depends on having fully processed both
1393  // the declarator and initializer.
1394  for (ScopedDecl *ID = NewGroup; ID; ID = ID->getNextDeclarator()) {
1395    VarDecl *IDecl = dyn_cast<VarDecl>(ID);
1396    if (!IDecl)
1397      continue;
1398    QualType T = IDecl->getType();
1399
1400    // C99 6.7.5.2p2: If an identifier is declared to be an object with
1401    // static storage duration, it shall not have a variable length array.
1402    if ((IDecl->isFileVarDecl() || IDecl->isBlockVarDecl()) &&
1403        IDecl->getStorageClass() == VarDecl::Static) {
1404      if (T->isVariableArrayType()) {
1405        Diag(IDecl->getLocation(), diag::err_typecheck_illegal_vla);
1406        IDecl->setInvalidDecl();
1407      }
1408    }
1409    // Block scope. C99 6.7p7: If an identifier for an object is declared with
1410    // no linkage (C99 6.2.2p6), the type for the object shall be complete...
1411    if (IDecl->isBlockVarDecl() &&
1412        IDecl->getStorageClass() != VarDecl::Extern) {
1413      if (T->isIncompleteType() && !IDecl->isInvalidDecl()) {
1414        Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type,
1415             T.getAsString());
1416        IDecl->setInvalidDecl();
1417      }
1418    }
1419    // File scope. C99 6.9.2p2: A declaration of an identifier for and
1420    // object that has file scope without an initializer, and without a
1421    // storage-class specifier or with the storage-class specifier "static",
1422    // constitutes a tentative definition. Note: A tentative definition with
1423    // external linkage is valid (C99 6.2.2p5).
1424    if (isTentativeDefinition(IDecl)) {
1425      if (T->isIncompleteArrayType()) {
1426        // C99 6.9.2 (p2, p5): Implicit initialization causes an incomplete
1427        // array to be completed. Don't issue a diagnostic.
1428      } else if (T->isIncompleteType() && !IDecl->isInvalidDecl()) {
1429        // C99 6.9.2p3: If the declaration of an identifier for an object is
1430        // a tentative definition and has internal linkage (C99 6.2.2p3), the
1431        // declared type shall not be an incomplete type.
1432        Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type,
1433             T.getAsString());
1434        IDecl->setInvalidDecl();
1435      }
1436    }
1437    if (IDecl->isFileVarDecl())
1438      CheckForFileScopedRedefinitions(S, IDecl);
1439  }
1440  return NewGroup;
1441}
1442
1443/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()
1444/// to introduce parameters into function prototype scope.
1445Sema::DeclTy *
1446Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
1447  const DeclSpec &DS = D.getDeclSpec();
1448
1449  // Verify C99 6.7.5.3p2: The only SCS allowed is 'register'.
1450  if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified &&
1451      DS.getStorageClassSpec() != DeclSpec::SCS_register) {
1452    Diag(DS.getStorageClassSpecLoc(),
1453         diag::err_invalid_storage_class_in_func_decl);
1454    D.getMutableDeclSpec().ClearStorageClassSpecs();
1455  }
1456  if (DS.isThreadSpecified()) {
1457    Diag(DS.getThreadSpecLoc(),
1458         diag::err_invalid_storage_class_in_func_decl);
1459    D.getMutableDeclSpec().ClearStorageClassSpecs();
1460  }
1461
1462  // Check that there are no default arguments inside the type of this
1463  // parameter (C++ only).
1464  if (getLangOptions().CPlusPlus)
1465    CheckExtraCXXDefaultArguments(D);
1466
1467  // In this context, we *do not* check D.getInvalidType(). If the declarator
1468  // type was invalid, GetTypeForDeclarator() still returns a "valid" type,
1469  // though it will not reflect the user specified type.
1470  QualType parmDeclType = GetTypeForDeclarator(D, S);
1471
1472  assert(!parmDeclType.isNull() && "GetTypeForDeclarator() returned null type");
1473
1474  // TODO: CHECK FOR CONFLICTS, multiple decls with same name in one scope.
1475  // Can this happen for params?  We already checked that they don't conflict
1476  // among each other.  Here they can only shadow globals, which is ok.
1477  IdentifierInfo *II = D.getIdentifier();
1478  if (Decl *PrevDecl = LookupDecl(II, Decl::IDNS_Ordinary, S)) {
1479    if (S->isDeclScope(PrevDecl)) {
1480      Diag(D.getIdentifierLoc(), diag::err_param_redefinition,
1481           dyn_cast<NamedDecl>(PrevDecl)->getName());
1482
1483      // Recover by removing the name
1484      II = 0;
1485      D.SetIdentifier(0, D.getIdentifierLoc());
1486    }
1487  }
1488
1489  // Perform the default function/array conversion (C99 6.7.5.3p[7,8]).
1490  // Doing the promotion here has a win and a loss. The win is the type for
1491  // both Decl's and DeclRefExpr's will match (a convenient invariant for the
1492  // code generator). The loss is the orginal type isn't preserved. For example:
1493  //
1494  // void func(int parmvardecl[5]) { // convert "int [5]" to "int *"
1495  //    int blockvardecl[5];
1496  //    sizeof(parmvardecl);  // size == 4
1497  //    sizeof(blockvardecl); // size == 20
1498  // }
1499  //
1500  // For expressions, all implicit conversions are captured using the
1501  // ImplicitCastExpr AST node (we have no such mechanism for Decl's).
1502  //
1503  // FIXME: If a source translation tool needs to see the original type, then
1504  // we need to consider storing both types (in ParmVarDecl)...
1505  //
1506  if (parmDeclType->isArrayType()) {
1507    // int x[restrict 4] ->  int *restrict
1508    parmDeclType = Context.getArrayDecayedType(parmDeclType);
1509  } else if (parmDeclType->isFunctionType())
1510    parmDeclType = Context.getPointerType(parmDeclType);
1511
1512  ParmVarDecl *New = ParmVarDecl::Create(Context, CurContext,
1513                                         D.getIdentifierLoc(), II,
1514                                         parmDeclType, VarDecl::None,
1515                                         0, 0);
1516
1517  if (D.getInvalidType())
1518    New->setInvalidDecl();
1519
1520  if (II)
1521    PushOnScopeChains(New, S);
1522
1523  ProcessDeclAttributes(New, D);
1524  return New;
1525
1526}
1527
1528Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Declarator &D) {
1529  assert(getCurFunctionDecl() == 0 && "Function parsing confused");
1530  assert(D.getTypeObject(0).Kind == DeclaratorChunk::Function &&
1531         "Not a function declarator!");
1532  DeclaratorChunk::FunctionTypeInfo &FTI = D.getTypeObject(0).Fun;
1533
1534  // Verify 6.9.1p6: 'every identifier in the identifier list shall be declared'
1535  // for a K&R function.
1536  if (!FTI.hasPrototype) {
1537    for (unsigned i = 0, e = FTI.NumArgs; i != e; ++i) {
1538      if (FTI.ArgInfo[i].Param == 0) {
1539        Diag(FTI.ArgInfo[i].IdentLoc, diag::ext_param_not_declared,
1540             FTI.ArgInfo[i].Ident->getName());
1541        // Implicitly declare the argument as type 'int' for lack of a better
1542        // type.
1543        DeclSpec DS;
1544        const char* PrevSpec; // unused
1545        DS.SetTypeSpecType(DeclSpec::TST_int, FTI.ArgInfo[i].IdentLoc,
1546                           PrevSpec);
1547        Declarator ParamD(DS, Declarator::KNRTypeListContext);
1548        ParamD.SetIdentifier(FTI.ArgInfo[i].Ident, FTI.ArgInfo[i].IdentLoc);
1549        FTI.ArgInfo[i].Param = ActOnParamDeclarator(FnBodyScope, ParamD);
1550      }
1551    }
1552
1553    // Since this is a function definition, act as though we have information
1554    // about the arguments.
1555    if (FTI.NumArgs)
1556      FTI.hasPrototype = true;
1557  } else {
1558    // FIXME: Diagnose arguments without names in C.
1559  }
1560
1561  Scope *GlobalScope = FnBodyScope->getParent();
1562
1563  // See if this is a redefinition.
1564  Decl *PrevDcl = LookupDecl(D.getIdentifier(), Decl::IDNS_Ordinary,
1565                             GlobalScope);
1566  if (PrevDcl && IdResolver.isDeclInScope(PrevDcl, CurContext)) {
1567    if (FunctionDecl *FD = dyn_cast<FunctionDecl>(PrevDcl)) {
1568      const FunctionDecl *Definition;
1569      if (FD->getBody(Definition)) {
1570        Diag(D.getIdentifierLoc(), diag::err_redefinition,
1571             D.getIdentifier()->getName());
1572        Diag(Definition->getLocation(), diag::err_previous_definition);
1573      }
1574    }
1575  }
1576
1577  return ActOnStartOfFunctionDef(FnBodyScope,
1578                                 ActOnDeclarator(GlobalScope, D, 0));
1579}
1580
1581Sema::DeclTy *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, DeclTy *D) {
1582  Decl *decl = static_cast<Decl*>(D);
1583  FunctionDecl *FD = cast<FunctionDecl>(decl);
1584  PushDeclContext(FD);
1585
1586  // Check the validity of our function parameters
1587  CheckParmsForFunctionDef(FD);
1588
1589  // Introduce our parameters into the function scope
1590  for (unsigned p = 0, NumParams = FD->getNumParams(); p < NumParams; ++p) {
1591    ParmVarDecl *Param = FD->getParamDecl(p);
1592    // If this has an identifier, add it to the scope stack.
1593    if (Param->getIdentifier())
1594      PushOnScopeChains(Param, FnBodyScope);
1595  }
1596
1597  return FD;
1598}
1599
1600Sema::DeclTy *Sema::ActOnFinishFunctionBody(DeclTy *D, StmtTy *Body) {
1601  Decl *dcl = static_cast<Decl *>(D);
1602  if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(dcl)) {
1603    FD->setBody((Stmt*)Body);
1604    assert(FD == getCurFunctionDecl() && "Function parsing confused");
1605  } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {
1606    MD->setBody((Stmt*)Body);
1607  } else
1608    return 0;
1609  PopDeclContext();
1610  // Verify and clean out per-function state.
1611
1612  // Check goto/label use.
1613  for (llvm::DenseMap<IdentifierInfo*, LabelStmt*>::iterator
1614       I = LabelMap.begin(), E = LabelMap.end(); I != E; ++I) {
1615    // Verify that we have no forward references left.  If so, there was a goto
1616    // or address of a label taken, but no definition of it.  Label fwd
1617    // definitions are indicated with a null substmt.
1618    if (I->second->getSubStmt() == 0) {
1619      LabelStmt *L = I->second;
1620      // Emit error.
1621      Diag(L->getIdentLoc(), diag::err_undeclared_label_use, L->getName());
1622
1623      // At this point, we have gotos that use the bogus label.  Stitch it into
1624      // the function body so that they aren't leaked and that the AST is well
1625      // formed.
1626      if (Body) {
1627        L->setSubStmt(new NullStmt(L->getIdentLoc()));
1628        cast<CompoundStmt>((Stmt*)Body)->push_back(L);
1629      } else {
1630        // The whole function wasn't parsed correctly, just delete this.
1631        delete L;
1632      }
1633    }
1634  }
1635  LabelMap.clear();
1636
1637  return D;
1638}
1639
1640/// ImplicitlyDefineFunction - An undeclared identifier was used in a function
1641/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).
1642ScopedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc,
1643                                           IdentifierInfo &II, Scope *S) {
1644  // Extension in C99.  Legal in C90, but warn about it.
1645  if (getLangOptions().C99)
1646    Diag(Loc, diag::ext_implicit_function_decl, II.getName());
1647  else
1648    Diag(Loc, diag::warn_implicit_function_decl, II.getName());
1649
1650  // FIXME: handle stuff like:
1651  // void foo() { extern float X(); }
1652  // void bar() { X(); }  <-- implicit decl for X in another scope.
1653
1654  // Set a Declarator for the implicit definition: int foo();
1655  const char *Dummy;
1656  DeclSpec DS;
1657  bool Error = DS.SetTypeSpecType(DeclSpec::TST_int, Loc, Dummy);
1658  Error = Error; // Silence warning.
1659  assert(!Error && "Error setting up implicit decl!");
1660  Declarator D(DS, Declarator::BlockContext);
1661  D.AddTypeInfo(DeclaratorChunk::getFunction(false, false, 0, 0, Loc));
1662  D.SetIdentifier(&II, Loc);
1663
1664  // Insert this function into translation-unit scope.
1665
1666  DeclContext *PrevDC = CurContext;
1667  CurContext = Context.getTranslationUnitDecl();
1668
1669  FunctionDecl *FD =
1670    dyn_cast<FunctionDecl>(static_cast<Decl*>(ActOnDeclarator(TUScope, D, 0)));
1671  FD->setImplicit();
1672
1673  CurContext = PrevDC;
1674
1675  return FD;
1676}
1677
1678
1679TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T,
1680                                    ScopedDecl *LastDeclarator) {
1681  assert(D.getIdentifier() && "Wrong callback for declspec without declarator");
1682  assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
1683
1684  // Scope manipulation handled by caller.
1685  TypedefDecl *NewTD = TypedefDecl::Create(Context, CurContext,
1686                                           D.getIdentifierLoc(),
1687                                           D.getIdentifier(),
1688                                           T, LastDeclarator);
1689  if (D.getInvalidType())
1690    NewTD->setInvalidDecl();
1691  return NewTD;
1692}
1693
1694/// ActOnTag - This is invoked when we see 'struct foo' or 'struct {'.  In the
1695/// former case, Name will be non-null.  In the later case, Name will be null.
1696/// TagType indicates what kind of tag this is. TK indicates whether this is a
1697/// reference/declaration/definition of a tag.
1698Sema::DeclTy *Sema::ActOnTag(Scope *S, unsigned TagType, TagKind TK,
1699                             SourceLocation KWLoc, IdentifierInfo *Name,
1700                             SourceLocation NameLoc, AttributeList *Attr) {
1701  // If this is a use of an existing tag, it must have a name.
1702  assert((Name != 0 || TK == TK_Definition) &&
1703         "Nameless record must be a definition!");
1704
1705  TagDecl::TagKind Kind;
1706  switch (TagType) {
1707  default: assert(0 && "Unknown tag type!");
1708  case DeclSpec::TST_struct: Kind = TagDecl::TK_struct; break;
1709  case DeclSpec::TST_union:  Kind = TagDecl::TK_union; break;
1710  case DeclSpec::TST_class:  Kind = TagDecl::TK_class; break;
1711  case DeclSpec::TST_enum:   Kind = TagDecl::TK_enum; break;
1712  }
1713
1714  // If this is a named struct, check to see if there was a previous forward
1715  // declaration or definition.
1716  // Use ScopedDecl instead of TagDecl, because a NamespaceDecl may come up.
1717  if (ScopedDecl *PrevDecl =
1718          dyn_cast_or_null<ScopedDecl>(LookupDecl(Name, Decl::IDNS_Tag, S))) {
1719
1720    assert((isa<TagDecl>(PrevDecl) || isa<NamespaceDecl>(PrevDecl)) &&
1721            "unexpected Decl type");
1722    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {
1723      // If this is a use of a previous tag, or if the tag is already declared
1724      // in the same scope (so that the definition/declaration completes or
1725      // rementions the tag), reuse the decl.
1726      if (TK == TK_Reference ||
1727          IdResolver.isDeclInScope(PrevDecl, CurContext, S)) {
1728        // Make sure that this wasn't declared as an enum and now used as a
1729        // struct or something similar.
1730        if (PrevTagDecl->getTagKind() != Kind) {
1731          Diag(KWLoc, diag::err_use_with_wrong_tag, Name->getName());
1732          Diag(PrevDecl->getLocation(), diag::err_previous_use);
1733          // Recover by making this an anonymous redefinition.
1734          Name = 0;
1735          PrevDecl = 0;
1736        } else {
1737          // If this is a use or a forward declaration, we're good.
1738          if (TK != TK_Definition)
1739            return PrevDecl;
1740
1741          // Diagnose attempts to redefine a tag.
1742          if (PrevTagDecl->isDefinition()) {
1743            Diag(NameLoc, diag::err_redefinition, Name->getName());
1744            Diag(PrevDecl->getLocation(), diag::err_previous_definition);
1745            // If this is a redefinition, recover by making this struct be
1746            // anonymous, which will make any later references get the previous
1747            // definition.
1748            Name = 0;
1749          } else {
1750            // Okay, this is definition of a previously declared or referenced
1751            // tag. Move the location of the decl to be the definition site.
1752            PrevDecl->setLocation(NameLoc);
1753            return PrevDecl;
1754          }
1755        }
1756      }
1757      // If we get here, this is a definition of a new struct type in a nested
1758      // scope, e.g. "struct foo; void bar() { struct foo; }", just create a new
1759      // type.
1760    } else {
1761      // PrevDecl is a namespace.
1762      if (IdResolver.isDeclInScope(PrevDecl, CurContext, S)) {
1763        // The tag name clashes with a namespace name, issue an error and recover
1764        // by making this tag be anonymous.
1765        Diag(NameLoc, diag::err_redefinition_different_kind, Name->getName());
1766        Diag(PrevDecl->getLocation(), diag::err_previous_definition);
1767        Name = 0;
1768      }
1769    }
1770  }
1771
1772  // If there is an identifier, use the location of the identifier as the
1773  // location of the decl, otherwise use the location of the struct/union
1774  // keyword.
1775  SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc;
1776
1777  // Otherwise, if this is the first time we've seen this tag, create the decl.
1778  TagDecl *New;
1779  if (Kind == TagDecl::TK_enum) {
1780    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
1781    // enum X { A, B, C } D;    D should chain to X.
1782    New = EnumDecl::Create(Context, CurContext, Loc, Name, 0);
1783    // If this is an undefined enum, warn.
1784    if (TK != TK_Definition) Diag(Loc, diag::ext_forward_ref_enum);
1785  } else {
1786    // struct/union/class
1787
1788    // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.:
1789    // struct X { int A; } D;    D should chain to X.
1790    if (getLangOptions().CPlusPlus)
1791      // FIXME: Look for a way to use RecordDecl for simple structs.
1792      New = CXXRecordDecl::Create(Context, Kind, CurContext, Loc, Name, 0);
1793    else
1794      New = RecordDecl::Create(Context, Kind, CurContext, Loc, Name, 0);
1795  }
1796
1797  // If this has an identifier, add it to the scope stack.
1798  if (Name) {
1799    // The scope passed in may not be a decl scope.  Zip up the scope tree until
1800    // we find one that is.
1801    while ((S->getFlags() & Scope::DeclScope) == 0)
1802      S = S->getParent();
1803
1804    // Add it to the decl chain.
1805    PushOnScopeChains(New, S);
1806  }
1807
1808  if (Attr)
1809    ProcessDeclAttributeList(New, Attr);
1810  return New;
1811}
1812
1813/// Collect the instance variables declared in an Objective-C object.  Used in
1814/// the creation of structures from objects using the @defs directive.
1815static void CollectIvars(ObjCInterfaceDecl *Class,
1816                         llvm::SmallVectorImpl<Sema::DeclTy*> &ivars) {
1817  if (Class->getSuperClass())
1818    CollectIvars(Class->getSuperClass(), ivars);
1819  ivars.append(Class->ivar_begin(), Class->ivar_end());
1820}
1821
1822/// Called whenever @defs(ClassName) is encountered in the source.  Inserts the
1823/// instance variables of ClassName into Decls.
1824void Sema::ActOnDefs(Scope *S, SourceLocation DeclStart,
1825                     IdentifierInfo *ClassName,
1826                     llvm::SmallVectorImpl<DeclTy*> &Decls) {
1827  // Check that ClassName is a valid class
1828  ObjCInterfaceDecl *Class = getObjCInterfaceDecl(ClassName);
1829  if (!Class) {
1830    Diag(DeclStart, diag::err_undef_interface, ClassName->getName());
1831    return;
1832  }
1833  // Collect the instance variables
1834  CollectIvars(Class, Decls);
1835}
1836
1837QualType Sema::TryFixInvalidVariablyModifiedType(QualType T) {
1838  // This method tries to turn a variable array into a constant
1839  // array even when the size isn't an ICE.  This is necessary
1840  // for compatibility with code that depends on gcc's buggy
1841  // constant expression folding, like struct {char x[(int)(char*)2];}
1842  if (const VariableArrayType* VLATy = dyn_cast<VariableArrayType>(T)) {
1843    APValue Result;
1844    if (VLATy->getSizeExpr() &&
1845        VLATy->getSizeExpr()->tryEvaluate(Result, Context) && Result.isInt()) {
1846      llvm::APSInt &Res = Result.getInt();
1847      if (Res > llvm::APSInt(Res.getBitWidth(), Res.isUnsigned()))
1848        return Context.getConstantArrayType(VLATy->getElementType(),
1849                                            Res, ArrayType::Normal, 0);
1850    }
1851  }
1852  return QualType();
1853}
1854
1855/// ActOnField - Each field of a struct/union/class is passed into this in order
1856/// to create a FieldDecl object for it.
1857Sema::DeclTy *Sema::ActOnField(Scope *S,
1858                               SourceLocation DeclStart,
1859                               Declarator &D, ExprTy *BitfieldWidth) {
1860  IdentifierInfo *II = D.getIdentifier();
1861  Expr *BitWidth = (Expr*)BitfieldWidth;
1862  SourceLocation Loc = DeclStart;
1863  if (II) Loc = D.getIdentifierLoc();
1864
1865  // FIXME: Unnamed fields can be handled in various different ways, for
1866  // example, unnamed unions inject all members into the struct namespace!
1867
1868
1869  if (BitWidth) {
1870    // TODO: Validate.
1871    //printf("WARNING: BITFIELDS IGNORED!\n");
1872
1873    // 6.7.2.1p3
1874    // 6.7.2.1p4
1875
1876  } else {
1877    // Not a bitfield.
1878
1879    // validate II.
1880
1881  }
1882
1883  QualType T = GetTypeForDeclarator(D, S);
1884  assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
1885  bool InvalidDecl = false;
1886
1887  // C99 6.7.2.1p8: A member of a structure or union may have any type other
1888  // than a variably modified type.
1889  if (T->isVariablyModifiedType()) {
1890    QualType FixedTy = TryFixInvalidVariablyModifiedType(T);
1891    if (!FixedTy.isNull()) {
1892      Diag(Loc, diag::warn_illegal_constant_array_size, Loc);
1893      T = FixedTy;
1894    } else {
1895      // FIXME: This diagnostic needs work
1896      Diag(Loc, diag::err_typecheck_illegal_vla, Loc);
1897      InvalidDecl = true;
1898    }
1899  }
1900  // FIXME: Chain fielddecls together.
1901  FieldDecl *NewFD;
1902
1903  if (getLangOptions().CPlusPlus) {
1904    // FIXME: Replace CXXFieldDecls with FieldDecls for simple structs.
1905    NewFD = CXXFieldDecl::Create(Context, cast<CXXRecordDecl>(CurContext),
1906                                 Loc, II, T, BitWidth);
1907    if (II)
1908      PushOnScopeChains(NewFD, S);
1909  }
1910  else
1911    NewFD = FieldDecl::Create(Context, Loc, II, T, BitWidth);
1912
1913  ProcessDeclAttributes(NewFD, D);
1914
1915  if (D.getInvalidType() || InvalidDecl)
1916    NewFD->setInvalidDecl();
1917  return NewFD;
1918}
1919
1920/// TranslateIvarVisibility - Translate visibility from a token ID to an
1921///  AST enum value.
1922static ObjCIvarDecl::AccessControl
1923TranslateIvarVisibility(tok::ObjCKeywordKind ivarVisibility) {
1924  switch (ivarVisibility) {
1925    case tok::objc_private: return ObjCIvarDecl::Private;
1926    case tok::objc_public: return ObjCIvarDecl::Public;
1927    case tok::objc_protected: return ObjCIvarDecl::Protected;
1928    case tok::objc_package: return ObjCIvarDecl::Package;
1929    default: assert(false && "Unknown visitibility kind");
1930  }
1931}
1932
1933/// ActOnIvar - Each ivar field of an objective-c class is passed into this
1934/// in order to create an IvarDecl object for it.
1935Sema::DeclTy *Sema::ActOnIvar(Scope *S,
1936                              SourceLocation DeclStart,
1937                              Declarator &D, ExprTy *BitfieldWidth,
1938                              tok::ObjCKeywordKind Visibility) {
1939  IdentifierInfo *II = D.getIdentifier();
1940  Expr *BitWidth = (Expr*)BitfieldWidth;
1941  SourceLocation Loc = DeclStart;
1942  if (II) Loc = D.getIdentifierLoc();
1943
1944  // FIXME: Unnamed fields can be handled in various different ways, for
1945  // example, unnamed unions inject all members into the struct namespace!
1946
1947
1948  if (BitWidth) {
1949    // TODO: Validate.
1950    //printf("WARNING: BITFIELDS IGNORED!\n");
1951
1952    // 6.7.2.1p3
1953    // 6.7.2.1p4
1954
1955  } else {
1956    // Not a bitfield.
1957
1958    // validate II.
1959
1960  }
1961
1962  QualType T = GetTypeForDeclarator(D, S);
1963  assert(!T.isNull() && "GetTypeForDeclarator() returned null type");
1964  bool InvalidDecl = false;
1965
1966  // C99 6.7.2.1p8: A member of a structure or union may have any type other
1967  // than a variably modified type.
1968  if (T->isVariablyModifiedType()) {
1969    // FIXME: This diagnostic needs work
1970    Diag(Loc, diag::err_typecheck_illegal_vla, Loc);
1971    InvalidDecl = true;
1972  }
1973
1974  // Get the visibility (access control) for this ivar.
1975  ObjCIvarDecl::AccessControl ac =
1976    Visibility != tok::objc_not_keyword ? TranslateIvarVisibility(Visibility)
1977                                        : ObjCIvarDecl::None;
1978
1979  // Construct the decl.
1980  ObjCIvarDecl *NewID = ObjCIvarDecl::Create(Context, Loc, II, T, ac,
1981                                             (Expr *)BitfieldWidth);
1982
1983  // Process attributes attached to the ivar.
1984  ProcessDeclAttributes(NewID, D);
1985
1986  if (D.getInvalidType() || InvalidDecl)
1987    NewID->setInvalidDecl();
1988
1989  return NewID;
1990}
1991
1992void Sema::ActOnFields(Scope* S,
1993                       SourceLocation RecLoc, DeclTy *RecDecl,
1994                       DeclTy **Fields, unsigned NumFields,
1995                       SourceLocation LBrac, SourceLocation RBrac) {
1996  Decl *EnclosingDecl = static_cast<Decl*>(RecDecl);
1997  assert(EnclosingDecl && "missing record or interface decl");
1998  RecordDecl *Record = dyn_cast<RecordDecl>(EnclosingDecl);
1999
2000  if (Record && Record->isDefinition()) {
2001    // Diagnose code like:
2002    //     struct S { struct S {} X; };
2003    // We discover this when we complete the outer S.  Reject and ignore the
2004    // outer S.
2005    Diag(Record->getLocation(), diag::err_nested_redefinition,
2006         Record->getKindName());
2007    Diag(RecLoc, diag::err_previous_definition);
2008    Record->setInvalidDecl();
2009    return;
2010  }
2011  // Verify that all the fields are okay.
2012  unsigned NumNamedMembers = 0;
2013  llvm::SmallVector<FieldDecl*, 32> RecFields;
2014  llvm::SmallSet<const IdentifierInfo*, 32> FieldIDs;
2015
2016  for (unsigned i = 0; i != NumFields; ++i) {
2017
2018    FieldDecl *FD = cast_or_null<FieldDecl>(static_cast<Decl*>(Fields[i]));
2019    assert(FD && "missing field decl");
2020
2021    // Remember all fields.
2022    RecFields.push_back(FD);
2023
2024    // Get the type for the field.
2025    Type *FDTy = FD->getType().getTypePtr();
2026
2027    // C99 6.7.2.1p2 - A field may not be a function type.
2028    if (FDTy->isFunctionType()) {
2029      Diag(FD->getLocation(), diag::err_field_declared_as_function,
2030           FD->getName());
2031      FD->setInvalidDecl();
2032      EnclosingDecl->setInvalidDecl();
2033      continue;
2034    }
2035    // C99 6.7.2.1p2 - A field may not be an incomplete type except...
2036    if (FDTy->isIncompleteType()) {
2037      if (!Record) {  // Incomplete ivar type is always an error.
2038        Diag(FD->getLocation(), diag::err_field_incomplete, FD->getName());
2039        FD->setInvalidDecl();
2040        EnclosingDecl->setInvalidDecl();
2041        continue;
2042      }
2043      if (i != NumFields-1 ||                   // ... that the last member ...
2044          !Record->isStruct() ||  // ... of a structure ...
2045          !FDTy->isArrayType()) {         //... may have incomplete array type.
2046        Diag(FD->getLocation(), diag::err_field_incomplete, FD->getName());
2047        FD->setInvalidDecl();
2048        EnclosingDecl->setInvalidDecl();
2049        continue;
2050      }
2051      if (NumNamedMembers < 1) {  //... must have more than named member ...
2052        Diag(FD->getLocation(), diag::err_flexible_array_empty_struct,
2053             FD->getName());
2054        FD->setInvalidDecl();
2055        EnclosingDecl->setInvalidDecl();
2056        continue;
2057      }
2058      // Okay, we have a legal flexible array member at the end of the struct.
2059      if (Record)
2060        Record->setHasFlexibleArrayMember(true);
2061    }
2062    /// C99 6.7.2.1p2 - a struct ending in a flexible array member cannot be the
2063    /// field of another structure or the element of an array.
2064    if (const RecordType *FDTTy = FDTy->getAsRecordType()) {
2065      if (FDTTy->getDecl()->hasFlexibleArrayMember()) {
2066        // If this is a member of a union, then entire union becomes "flexible".
2067        if (Record && Record->isUnion()) {
2068          Record->setHasFlexibleArrayMember(true);
2069        } else {
2070          // If this is a struct/class and this is not the last element, reject
2071          // it.  Note that GCC supports variable sized arrays in the middle of
2072          // structures.
2073          if (i != NumFields-1) {
2074            Diag(FD->getLocation(), diag::err_variable_sized_type_in_struct,
2075                 FD->getName());
2076            FD->setInvalidDecl();
2077            EnclosingDecl->setInvalidDecl();
2078            continue;
2079          }
2080          // We support flexible arrays at the end of structs in other structs
2081          // as an extension.
2082          Diag(FD->getLocation(), diag::ext_flexible_array_in_struct,
2083               FD->getName());
2084          if (Record)
2085            Record->setHasFlexibleArrayMember(true);
2086        }
2087      }
2088    }
2089    /// A field cannot be an Objective-c object
2090    if (FDTy->isObjCInterfaceType()) {
2091      Diag(FD->getLocation(), diag::err_statically_allocated_object,
2092           FD->getName());
2093      FD->setInvalidDecl();
2094      EnclosingDecl->setInvalidDecl();
2095      continue;
2096    }
2097    // Keep track of the number of named members.
2098    if (IdentifierInfo *II = FD->getIdentifier()) {
2099      // Detect duplicate member names.
2100      if (!FieldIDs.insert(II)) {
2101        Diag(FD->getLocation(), diag::err_duplicate_member, II->getName());
2102        // Find the previous decl.
2103        SourceLocation PrevLoc;
2104        for (unsigned i = 0, e = RecFields.size(); ; ++i) {
2105          assert(i != e && "Didn't find previous def!");
2106          if (RecFields[i]->getIdentifier() == II) {
2107            PrevLoc = RecFields[i]->getLocation();
2108            break;
2109          }
2110        }
2111        Diag(PrevLoc, diag::err_previous_definition);
2112        FD->setInvalidDecl();
2113        EnclosingDecl->setInvalidDecl();
2114        continue;
2115      }
2116      ++NumNamedMembers;
2117    }
2118  }
2119
2120  // Okay, we successfully defined 'Record'.
2121  if (Record) {
2122    Record->defineBody(&RecFields[0], RecFields.size());
2123    // If this is a C++ record, HandleTagDeclDefinition will be invoked in
2124    // Sema::ActOnFinishCXXClassDef.
2125    if (!isa<CXXRecordDecl>(Record))
2126      Consumer.HandleTagDeclDefinition(Record);
2127  } else {
2128    ObjCIvarDecl **ClsFields = reinterpret_cast<ObjCIvarDecl**>(&RecFields[0]);
2129    if (ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(EnclosingDecl))
2130      ID->addInstanceVariablesToClass(ClsFields, RecFields.size(), RBrac);
2131    else if (ObjCImplementationDecl *IMPDecl =
2132               dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {
2133      assert(IMPDecl && "ActOnFields - missing ObjCImplementationDecl");
2134      IMPDecl->ObjCAddInstanceVariablesToClassImpl(ClsFields, RecFields.size());
2135      CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size(), RBrac);
2136    }
2137  }
2138}
2139
2140Sema::DeclTy *Sema::ActOnEnumConstant(Scope *S, DeclTy *theEnumDecl,
2141                                      DeclTy *lastEnumConst,
2142                                      SourceLocation IdLoc, IdentifierInfo *Id,
2143                                      SourceLocation EqualLoc, ExprTy *val) {
2144  EnumDecl *TheEnumDecl = cast<EnumDecl>(static_cast<Decl*>(theEnumDecl));
2145  EnumConstantDecl *LastEnumConst =
2146    cast_or_null<EnumConstantDecl>(static_cast<Decl*>(lastEnumConst));
2147  Expr *Val = static_cast<Expr*>(val);
2148
2149  // The scope passed in may not be a decl scope.  Zip up the scope tree until
2150  // we find one that is.
2151  while ((S->getFlags() & Scope::DeclScope) == 0)
2152    S = S->getParent();
2153
2154  // Verify that there isn't already something declared with this name in this
2155  // scope.
2156  if (Decl *PrevDecl = LookupDecl(Id, Decl::IDNS_Ordinary, S)) {
2157    // When in C++, we may get a TagDecl with the same name; in this case the
2158    // enum constant will 'hide' the tag.
2159    assert((getLangOptions().CPlusPlus || !isa<TagDecl>(PrevDecl)) &&
2160           "Received TagDecl when not in C++!");
2161    if (!isa<TagDecl>(PrevDecl) &&
2162        IdResolver.isDeclInScope(PrevDecl, CurContext, S)) {
2163      if (isa<EnumConstantDecl>(PrevDecl))
2164        Diag(IdLoc, diag::err_redefinition_of_enumerator, Id->getName());
2165      else
2166        Diag(IdLoc, diag::err_redefinition, Id->getName());
2167      Diag(PrevDecl->getLocation(), diag::err_previous_definition);
2168      delete Val;
2169      return 0;
2170    }
2171  }
2172
2173  llvm::APSInt EnumVal(32);
2174  QualType EltTy;
2175  if (Val) {
2176    // Make sure to promote the operand type to int.
2177    UsualUnaryConversions(Val);
2178
2179    // C99 6.7.2.2p2: Make sure we have an integer constant expression.
2180    SourceLocation ExpLoc;
2181    if (!Val->isIntegerConstantExpr(EnumVal, Context, &ExpLoc)) {
2182      Diag(ExpLoc, diag::err_enum_value_not_integer_constant_expr,
2183           Id->getName());
2184      delete Val;
2185      Val = 0;  // Just forget about it.
2186    } else {
2187      EltTy = Val->getType();
2188    }
2189  }
2190
2191  if (!Val) {
2192    if (LastEnumConst) {
2193      // Assign the last value + 1.
2194      EnumVal = LastEnumConst->getInitVal();
2195      ++EnumVal;
2196
2197      // Check for overflow on increment.
2198      if (EnumVal < LastEnumConst->getInitVal())
2199        Diag(IdLoc, diag::warn_enum_value_overflow);
2200
2201      EltTy = LastEnumConst->getType();
2202    } else {
2203      // First value, set to zero.
2204      EltTy = Context.IntTy;
2205      EnumVal.zextOrTrunc(static_cast<uint32_t>(Context.getTypeSize(EltTy)));
2206    }
2207  }
2208
2209  EnumConstantDecl *New =
2210    EnumConstantDecl::Create(Context, TheEnumDecl, IdLoc, Id, EltTy,
2211                             Val, EnumVal,
2212                             LastEnumConst);
2213
2214  // Register this decl in the current scope stack.
2215  PushOnScopeChains(New, S);
2216  return New;
2217}
2218
2219// FIXME: For consistency with ActOnFields(), we should have the parser
2220// pass in the source location for the left/right braces.
2221void Sema::ActOnEnumBody(SourceLocation EnumLoc, DeclTy *EnumDeclX,
2222                         DeclTy **Elements, unsigned NumElements) {
2223  EnumDecl *Enum = cast<EnumDecl>(static_cast<Decl*>(EnumDeclX));
2224
2225  if (Enum && Enum->isDefinition()) {
2226    // Diagnose code like:
2227    //   enum e0 {
2228    //     E0 = sizeof(enum e0 { E1 })
2229    //   };
2230    Diag(Enum->getLocation(), diag::err_nested_redefinition,
2231         Enum->getName());
2232    Diag(EnumLoc, diag::err_previous_definition);
2233    Enum->setInvalidDecl();
2234    return;
2235  }
2236  // TODO: If the result value doesn't fit in an int, it must be a long or long
2237  // long value.  ISO C does not support this, but GCC does as an extension,
2238  // emit a warning.
2239  unsigned IntWidth = Context.Target.getIntWidth();
2240
2241  // Verify that all the values are okay, compute the size of the values, and
2242  // reverse the list.
2243  unsigned NumNegativeBits = 0;
2244  unsigned NumPositiveBits = 0;
2245
2246  // Keep track of whether all elements have type int.
2247  bool AllElementsInt = true;
2248
2249  EnumConstantDecl *EltList = 0;
2250  for (unsigned i = 0; i != NumElements; ++i) {
2251    EnumConstantDecl *ECD =
2252      cast_or_null<EnumConstantDecl>(static_cast<Decl*>(Elements[i]));
2253    if (!ECD) continue;  // Already issued a diagnostic.
2254
2255    // If the enum value doesn't fit in an int, emit an extension warning.
2256    const llvm::APSInt &InitVal = ECD->getInitVal();
2257    assert(InitVal.getBitWidth() >= IntWidth &&
2258           "Should have promoted value to int");
2259    if (InitVal.getBitWidth() > IntWidth) {
2260      llvm::APSInt V(InitVal);
2261      V.trunc(IntWidth);
2262      V.extend(InitVal.getBitWidth());
2263      if (V != InitVal)
2264        Diag(ECD->getLocation(), diag::ext_enum_value_not_int,
2265             InitVal.toString());
2266    }
2267
2268    // Keep track of the size of positive and negative values.
2269    if (InitVal.isUnsigned() || InitVal.isNonNegative())
2270      NumPositiveBits = std::max(NumPositiveBits,
2271                                 (unsigned)InitVal.getActiveBits());
2272    else
2273      NumNegativeBits = std::max(NumNegativeBits,
2274                                 (unsigned)InitVal.getMinSignedBits());
2275
2276    // Keep track of whether every enum element has type int (very commmon).
2277    if (AllElementsInt)
2278      AllElementsInt = ECD->getType() == Context.IntTy;
2279
2280    ECD->setNextDeclarator(EltList);
2281    EltList = ECD;
2282  }
2283
2284  // Figure out the type that should be used for this enum.
2285  // FIXME: Support attribute(packed) on enums and -fshort-enums.
2286  QualType BestType;
2287  unsigned BestWidth;
2288
2289  if (NumNegativeBits) {
2290    // If there is a negative value, figure out the smallest integer type (of
2291    // int/long/longlong) that fits.
2292    if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {
2293      BestType = Context.IntTy;
2294      BestWidth = IntWidth;
2295    } else {
2296      BestWidth = Context.Target.getLongWidth();
2297
2298      if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth)
2299        BestType = Context.LongTy;
2300      else {
2301        BestWidth = Context.Target.getLongLongWidth();
2302
2303        if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)
2304          Diag(Enum->getLocation(), diag::warn_enum_too_large);
2305        BestType = Context.LongLongTy;
2306      }
2307    }
2308  } else {
2309    // If there is no negative value, figure out which of uint, ulong, ulonglong
2310    // fits.
2311    if (NumPositiveBits <= IntWidth) {
2312      BestType = Context.UnsignedIntTy;
2313      BestWidth = IntWidth;
2314    } else if (NumPositiveBits <=
2315               (BestWidth = Context.Target.getLongWidth())) {
2316      BestType = Context.UnsignedLongTy;
2317    } else {
2318      BestWidth = Context.Target.getLongLongWidth();
2319      assert(NumPositiveBits <= BestWidth &&
2320             "How could an initializer get larger than ULL?");
2321      BestType = Context.UnsignedLongLongTy;
2322    }
2323  }
2324
2325  // Loop over all of the enumerator constants, changing their types to match
2326  // the type of the enum if needed.
2327  for (unsigned i = 0; i != NumElements; ++i) {
2328    EnumConstantDecl *ECD =
2329      cast_or_null<EnumConstantDecl>(static_cast<Decl*>(Elements[i]));
2330    if (!ECD) continue;  // Already issued a diagnostic.
2331
2332    // Standard C says the enumerators have int type, but we allow, as an
2333    // extension, the enumerators to be larger than int size.  If each
2334    // enumerator value fits in an int, type it as an int, otherwise type it the
2335    // same as the enumerator decl itself.  This means that in "enum { X = 1U }"
2336    // that X has type 'int', not 'unsigned'.
2337    if (ECD->getType() == Context.IntTy) {
2338      // Make sure the init value is signed.
2339      llvm::APSInt IV = ECD->getInitVal();
2340      IV.setIsSigned(true);
2341      ECD->setInitVal(IV);
2342      continue;  // Already int type.
2343    }
2344
2345    // Determine whether the value fits into an int.
2346    llvm::APSInt InitVal = ECD->getInitVal();
2347    bool FitsInInt;
2348    if (InitVal.isUnsigned() || !InitVal.isNegative())
2349      FitsInInt = InitVal.getActiveBits() < IntWidth;
2350    else
2351      FitsInInt = InitVal.getMinSignedBits() <= IntWidth;
2352
2353    // If it fits into an integer type, force it.  Otherwise force it to match
2354    // the enum decl type.
2355    QualType NewTy;
2356    unsigned NewWidth;
2357    bool NewSign;
2358    if (FitsInInt) {
2359      NewTy = Context.IntTy;
2360      NewWidth = IntWidth;
2361      NewSign = true;
2362    } else if (ECD->getType() == BestType) {
2363      // Already the right type!
2364      continue;
2365    } else {
2366      NewTy = BestType;
2367      NewWidth = BestWidth;
2368      NewSign = BestType->isSignedIntegerType();
2369    }
2370
2371    // Adjust the APSInt value.
2372    InitVal.extOrTrunc(NewWidth);
2373    InitVal.setIsSigned(NewSign);
2374    ECD->setInitVal(InitVal);
2375
2376    // Adjust the Expr initializer and type.
2377    ECD->setInitExpr(new ImplicitCastExpr(NewTy, ECD->getInitExpr()));
2378    ECD->setType(NewTy);
2379  }
2380
2381  Enum->defineElements(EltList, BestType);
2382  Consumer.HandleTagDeclDefinition(Enum);
2383}
2384
2385Sema::DeclTy *Sema::ActOnFileScopeAsmDecl(SourceLocation Loc,
2386                                          ExprTy *expr) {
2387  StringLiteral *AsmString = cast<StringLiteral>((Expr*)expr);
2388
2389  return FileScopeAsmDecl::Create(Context, Loc, AsmString);
2390}
2391
2392Sema::DeclTy* Sema::ActOnLinkageSpec(SourceLocation Loc,
2393                                     SourceLocation LBrace,
2394                                     SourceLocation RBrace,
2395                                     const char *Lang,
2396                                     unsigned StrSize,
2397                                     DeclTy *D) {
2398  LinkageSpecDecl::LanguageIDs Language;
2399  Decl *dcl = static_cast<Decl *>(D);
2400  if (strncmp(Lang, "\"C\"", StrSize) == 0)
2401    Language = LinkageSpecDecl::lang_c;
2402  else if (strncmp(Lang, "\"C++\"", StrSize) == 0)
2403    Language = LinkageSpecDecl::lang_cxx;
2404  else {
2405    Diag(Loc, diag::err_bad_language);
2406    return 0;
2407  }
2408
2409  // FIXME: Add all the various semantics of linkage specifications
2410  return LinkageSpecDecl::Create(Context, Loc, Language, dcl);
2411}
2412