svn commit: r229041 - in stable/9/contrib/llvm/tools/clang:
include/clang/AST include/clang/Basic
include/clang/Serialization lib/AST lib/Sema lib/Serialization
Dimitry Andric
dim at FreeBSD.org
Fri Dec 30 22:30:22 UTC 2011
Author: dim
Date: Fri Dec 30 22:30:21 2011
New Revision: 229041
URL: http://svn.freebsd.org/changeset/base/229041
Log:
MFC r227737:
Pull in r144505 from upstream clang trunk:
Fix the signature of the getcontext builtin, eliminating incorrect
warnings about its prototype.
This also adds a -W(no-)builtin-requires-header option, which can be
used to enable or disable warnings of this kind.
Modified:
stable/9/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h
stable/9/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def
stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td
stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
stable/9/contrib/llvm/tools/clang/include/clang/Serialization/ASTBitCodes.h
stable/9/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp
stable/9/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp
stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp
Directory Properties:
stable/9/contrib/llvm/ (props changed)
stable/9/contrib/llvm/tools/clang/ (props changed)
Modified: stable/9/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h
==============================================================================
--- stable/9/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h Fri Dec 30 22:30:21 2011 (r229041)
@@ -229,6 +229,9 @@ class ASTContext : public llvm::RefCount
/// \brief The type for the C sigjmp_buf type.
TypeDecl *sigjmp_bufDecl;
+ /// \brief The type for the C ucontext_t type.
+ TypeDecl *ucontext_tDecl;
+
/// \brief Type for the Block descriptor for Blocks CodeGen.
///
/// Since this is only used for generation of debug info, it is not
@@ -955,6 +958,18 @@ public:
return QualType();
}
+ /// \brief Set the type for the C ucontext_t type.
+ void setucontext_tDecl(TypeDecl *ucontext_tDecl) {
+ this->ucontext_tDecl = ucontext_tDecl;
+ }
+
+ /// \brief Retrieve the C ucontext_t type.
+ QualType getucontext_tType() const {
+ if (ucontext_tDecl)
+ return getTypeDeclType(ucontext_tDecl);
+ return QualType();
+ }
+
/// \brief The result type of logical operations, '<', '>', '!=', etc.
QualType getLogicalOperationType() const {
return getLangOptions().CPlusPlus ? BoolTy : IntTy;
@@ -1099,7 +1114,8 @@ public:
enum GetBuiltinTypeError {
GE_None, //< No error
GE_Missing_stdio, //< Missing a type from <stdio.h>
- GE_Missing_setjmp //< Missing a type from <setjmp.h>
+ GE_Missing_setjmp, //< Missing a type from <setjmp.h>
+ GE_Missing_ucontext //< Missing a type from <ucontext.h>
};
/// GetBuiltinType - Return the type for the specified builtin. If
Modified: stable/9/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def
==============================================================================
--- stable/9/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def Fri Dec 30 22:30:21 2011 (r229041)
@@ -39,6 +39,7 @@
// P -> FILE
// J -> jmp_buf
// SJ -> sigjmp_buf
+// K -> ucontext_t
// . -> "...". This may only occur at the end of the function list.
//
// Types may be prefixed with the following modifiers:
@@ -685,7 +686,7 @@ LIBBUILTIN(sigsetjmp, "iSJi", "fj",
LIBBUILTIN(setjmp_syscall, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
LIBBUILTIN(savectx, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
LIBBUILTIN(qsetjmp, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
-LIBBUILTIN(getcontext, "iJ", "fj", "setjmp.h", ALL_LANGUAGES)
+LIBBUILTIN(getcontext, "iK*", "fj", "setjmp.h", ALL_LANGUAGES)
LIBBUILTIN(_longjmp, "vJi", "fr", "setjmp.h", ALL_LANGUAGES)
LIBBUILTIN(siglongjmp, "vSJi", "fr", "setjmp.h", ALL_LANGUAGES)
Modified: stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td
==============================================================================
--- stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td Fri Dec 30 22:30:21 2011 (r229041)
@@ -26,6 +26,7 @@ def : DiagGroup<"attributes">;
def : DiagGroup<"bad-function-cast">;
def Availability : DiagGroup<"availability">;
def BoolConversions : DiagGroup<"bool-conversions">;
+def BuiltinRequiresHeader : DiagGroup<"builtin-requires-header">;
def CXXCompat: DiagGroup<"c++-compat">;
def CastAlign : DiagGroup<"cast-align">;
def : DiagGroup<"cast-qual">;
Modified: stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td Fri Dec 30 22:30:21 2011 (r229041)
@@ -254,10 +254,16 @@ def note_please_include_header : Note<
def note_previous_builtin_declaration : Note<"%0 is a builtin with type %1">;
def warn_implicit_decl_requires_stdio : Warning<
"declaration of built-in function '%0' requires inclusion of the header "
- "<stdio.h>">;
+ "<stdio.h>">,
+ InGroup<BuiltinRequiresHeader>;
def warn_implicit_decl_requires_setjmp : Warning<
"declaration of built-in function '%0' requires inclusion of the header "
- "<setjmp.h>">;
+ "<setjmp.h>">,
+ InGroup<BuiltinRequiresHeader>;
+def warn_implicit_decl_requires_ucontext : Warning<
+ "declaration of built-in function '%0' requires inclusion of the header "
+ "<ucontext.h>">,
+ InGroup<BuiltinRequiresHeader>;
def warn_redecl_library_builtin : Warning<
"incompatible redeclaration of library function %0">;
def err_builtin_definition : Error<"definition of builtin function %0">;
Modified: stable/9/contrib/llvm/tools/clang/include/clang/Serialization/ASTBitCodes.h
==============================================================================
--- stable/9/contrib/llvm/tools/clang/include/clang/Serialization/ASTBitCodes.h Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/include/clang/Serialization/ASTBitCodes.h Fri Dec 30 22:30:21 2011 (r229041)
@@ -677,7 +677,9 @@ namespace clang {
/// \brief Objective-C "Class" redefinition type
SPECIAL_TYPE_OBJC_CLASS_REDEFINITION = 7,
/// \brief Objective-C "SEL" redefinition type
- SPECIAL_TYPE_OBJC_SEL_REDEFINITION = 8
+ SPECIAL_TYPE_OBJC_SEL_REDEFINITION = 8,
+ /// \brief C ucontext_t typedef type
+ SPECIAL_TYPE_UCONTEXT_T = 9
};
/// \brief The number of special type IDs.
Modified: stable/9/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp
==============================================================================
--- stable/9/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp Fri Dec 30 22:30:21 2011 (r229041)
@@ -227,8 +227,9 @@ ASTContext::ASTContext(LangOptions& LOpt
ObjCIdDecl(0), ObjCSelDecl(0), ObjCClassDecl(0),
CFConstantStringTypeDecl(0), ObjCInstanceTypeDecl(0),
FILEDecl(0),
- jmp_bufDecl(0), sigjmp_bufDecl(0), BlockDescriptorType(0),
- BlockDescriptorExtendedType(0), cudaConfigureCallDecl(0),
+ jmp_bufDecl(0), sigjmp_bufDecl(0), ucontext_tDecl(0),
+ BlockDescriptorType(0), BlockDescriptorExtendedType(0),
+ cudaConfigureCallDecl(0),
NullTypeSourceInfo(QualType()),
SourceMgr(SM), LangOpts(LOpts),
AddrSpaceMap(0), Target(t), PrintingPolicy(LOpts),
@@ -6293,6 +6294,15 @@ static QualType DecodeTypeFromStr(const
return QualType();
}
break;
+ case 'K':
+ assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'K'!");
+ Type = Context.getucontext_tType();
+
+ if (Type.isNull()) {
+ Error = ASTContext::GE_Missing_ucontext;
+ return QualType();
+ }
+ break;
}
// If there are modifiers and if we're allowed to parse them, go for it.
Modified: stable/9/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
==============================================================================
--- stable/9/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp Fri Dec 30 22:30:21 2011 (r229041)
@@ -1305,6 +1305,12 @@ NamedDecl *Sema::LazilyCreateBuiltin(Ide
Diag(Loc, diag::warn_implicit_decl_requires_setjmp)
<< Context.BuiltinInfo.GetName(BID);
return 0;
+
+ case ASTContext::GE_Missing_ucontext:
+ if (ForRedeclaration)
+ Diag(Loc, diag::warn_implicit_decl_requires_ucontext)
+ << Context.BuiltinInfo.GetName(BID);
+ return 0;
}
if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(BID)) {
@@ -3635,6 +3641,8 @@ Sema::ActOnTypedefNameDecl(Scope *S, Dec
Context.setjmp_bufDecl(NewTD);
else if (II->isStr("sigjmp_buf"))
Context.setsigjmp_bufDecl(NewTD);
+ else if (II->isStr("ucontext_t"))
+ Context.setucontext_tDecl(NewTD);
else if (II->isStr("__builtin_va_list"))
Context.setBuiltinVaListType(Context.getTypedefType(NewTD));
}
Modified: stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp
==============================================================================
--- stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTReader.cpp Fri Dec 30 22:30:21 2011 (r229041)
@@ -2659,6 +2659,24 @@ void ASTReader::InitializeContext() {
if (Context.ObjCSelRedefinitionType.isNull())
Context.ObjCSelRedefinitionType = GetType(ObjCSelRedef);
}
+
+ if (unsigned Ucontext_t = SpecialTypes[SPECIAL_TYPE_UCONTEXT_T]) {
+ QualType Ucontext_tType = GetType(Ucontext_t);
+ if (Ucontext_tType.isNull()) {
+ Error("ucontext_t type is NULL");
+ return;
+ }
+
+ if (!Context.ucontext_tDecl) {
+ if (const TypedefType *Typedef = Ucontext_tType->getAs<TypedefType>())
+ Context.setucontext_tDecl(Typedef->getDecl());
+ else {
+ const TagType *Tag = Ucontext_tType->getAs<TagType>();
+ assert(Tag && "Invalid ucontext_t type in AST file");
+ Context.setucontext_tDecl(Tag->getDecl());
+ }
+ }
+ }
}
ReadPragmaDiagnosticMappings(Context.getDiagnostics());
Modified: stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp
==============================================================================
--- stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp Fri Dec 30 22:27:26 2011 (r229040)
+++ stable/9/contrib/llvm/tools/clang/lib/Serialization/ASTWriter.cpp Fri Dec 30 22:30:21 2011 (r229041)
@@ -2994,6 +2994,7 @@ void ASTWriter::WriteASTCore(Sema &SemaR
AddTypeRef(Context.ObjCIdRedefinitionType, SpecialTypes);
AddTypeRef(Context.ObjCClassRedefinitionType, SpecialTypes);
AddTypeRef(Context.ObjCSelRedefinitionType, SpecialTypes);
+ AddTypeRef(Context.getucontext_tType(), SpecialTypes);
// Keep writing types and declarations until all types and
// declarations have been written.
More information about the svn-src-stable-9
mailing list