From: Ted Kremenek Date: Fri, 20 Jan 2012 21:40:12 +0000 (+0000) Subject: Add ability to specifiy 'restrict' on parameters of builtins, and correct this oversi... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=18932a0f2a94a7813ec461d1118c39ecf8aa936f;p=clang Add ability to specifiy 'restrict' on parameters of builtins, and correct this oversight for scanf functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148573 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index ed2e83763f..a026961b20 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -639,6 +639,14 @@ public: QualType withVolatile() const { return withFastQualifiers(Qualifiers::Volatile); } + + /// Add the restrict qualifier to this QualType. + void addRestrict() { + addFastQualifiers(Qualifiers::Restrict); + } + QualType withRestrict() const { + return withFastQualifiers(Qualifiers::Restrict); + } QualType withCVRQualifiers(unsigned CVR) const { return withFastQualifiers(CVR); diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index 0a16f9eb02..3ceb687b03 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -662,12 +662,12 @@ LIBBUILTIN(vprintf, "icC*a", "fP:0:", "stdio.h", ALL_LANGUAGES) LIBBUILTIN(vfprintf, "i.", "fP:1:", "stdio.h", ALL_LANGUAGES) LIBBUILTIN(vsnprintf, "ic*zcC*a", "fP:2:", "stdio.h", ALL_LANGUAGES) LIBBUILTIN(vsprintf, "ic*cC*a", "fP:1:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(scanf, "icC*.", "fs:0:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(fscanf, "iP*cC*.", "fs:1:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(sscanf, "icC*cC*.", "fs:1:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(vscanf, "icC*a", "fS:0:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(vfscanf, "iP*cC*a", "fS:1:", "stdio.h", ALL_LANGUAGES) -LIBBUILTIN(vsscanf, "icC*cC*a", "fS:1:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(scanf, "icC*R.", "fs:0:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(fscanf, "iP*RcC*R.", "fs:1:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(sscanf, "icC*RcC*R.", "fs:1:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(vscanf, "icC*Ra", "fS:0:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(vfscanf, "iP*RcC*Ra", "fS:1:", "stdio.h", ALL_LANGUAGES) +LIBBUILTIN(vsscanf, "icC*RcC*Ra", "fS:1:", "stdio.h", ALL_LANGUAGES) // C99 LIBBUILTIN(longjmp, "vJi", "fr", "setjmp.h", ALL_LANGUAGES) diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 476d221fdf..27bbc72e88 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -6468,6 +6468,9 @@ static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context, case 'D': Type = Context.getVolatileType(Type); break; + case 'R': + Type = Type.withRestrict(); + break; } }