Add a warning for questionable va_args usage.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68435 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index a43c2c3..a4335ea 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -4726,11 +4726,18 @@
AssignConvertType ConvResult =
CheckAssignmentConstraints(VaListType, E->getType());
- if (ConvResult != Compatible &&
- ConvResult != CompatiblePointerDiscardsQualifiers)
+ switch (ConvResult) {
+ case Compatible: break; // Everything good.
+ case CompatiblePointerDiscardsQualifiers:
+ Diag(E->getLocStart(), diag::warn_va_arg_with_qualified_va_list)
+ << E->getType() << E->getSourceRange();
+ break;
+
+ default:
return ExprError(Diag(E->getLocStart(),
diag::err_first_argument_to_va_arg_not_of_type_va_list)
<< E->getType() << E->getSourceRange());
+ }
// FIXME: Check that type is complete/non-abstract
// FIXME: Warn if a non-POD type is passed in.