summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2018-11-13 22:30:35 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2018-11-13 22:30:35 +0000
commite19dc6137fadf44aac0385357e3169350a2061c0 (patch)
tree9bee21c25e6b6cf0d64b179c8bd9d99ee2ed77c2 /clang/lib
parentf54aeed6f40ddea8c368f8c0661ea96b0c34f342 (diff)
downloadbcm5719-llvm-e19dc6137fadf44aac0385357e3169350a2061c0.tar.gz
bcm5719-llvm-e19dc6137fadf44aac0385357e3169350a2061c0.zip
OpenCL: Don't warn on v printf modifier
This avoids spurious warnings, but could use a lot of work. For example the number of vector elements is not verified, and the passed value type is not checked. Fixes bug 39486 llvm-svn: 346806
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/AST/FormatString.cpp5
-rw-r--r--clang/lib/AST/PrintfFormatString.cpp7
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/AST/FormatString.cpp b/clang/lib/AST/FormatString.cpp
index 5e2137c7088..565bd03a7bb 100644
--- a/clang/lib/AST/FormatString.cpp
+++ b/clang/lib/AST/FormatString.cpp
@@ -618,6 +618,9 @@ const char *ConversionSpecifier::toString() const {
// MS specific specifiers.
case ZArg: return "Z";
+
+ // OpenCL specific specifiers.
+ case VArg: return "v";
}
return nullptr;
}
@@ -875,6 +878,8 @@ bool FormatSpecifier::hasStandardConversionSpecifier(
case ConversionSpecifier::CArg:
case ConversionSpecifier::SArg:
return LangOpt.ObjC;
+ case ConversionSpecifier::VArg:
+ return LangOpt.OpenCL;
case ConversionSpecifier::InvalidSpecifier:
case ConversionSpecifier::FreeBSDbArg:
case ConversionSpecifier::FreeBSDDArg:
diff --git a/clang/lib/AST/PrintfFormatString.cpp b/clang/lib/AST/PrintfFormatString.cpp
index f22c4f8f644..877f89055ab 100644
--- a/clang/lib/AST/PrintfFormatString.cpp
+++ b/clang/lib/AST/PrintfFormatString.cpp
@@ -362,6 +362,12 @@ static PrintfSpecifierResult ParsePrintfSpecifier(FormatStringHandler &H,
case 'Z':
if (Target.getTriple().isOSMSVCRT())
k = ConversionSpecifier::ZArg;
+ break;
+ // OpenCL specific.
+ case 'v':
+ if (LO.OpenCL)
+ k = ConversionSpecifier::VArg;
+ break;
}
// Check to see if we used the Objective-C modifier flags with
@@ -1026,6 +1032,7 @@ bool PrintfSpecifier::hasValidPrecision() const {
case ConversionSpecifier::FreeBSDrArg:
case ConversionSpecifier::FreeBSDyArg:
case ConversionSpecifier::PArg:
+ case ConversionSpecifier::VArg:
return true;
default:
OpenPOWER on IntegriCloud