From 0d20b8a6d8af041edeb27cc4c68392454297e308 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 5 Apr 2009 15:49:53 +0000 Subject: [PATCH] in va_arg diagnostics, print out the unpromoted type. This makes the diagnostic use the va_list typedef more often, see the difference in the changed testcase. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68441 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 9 +++++---- test/Sema/varargs-x86-64.c | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index a4335eaf62..99afd32f10 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -4710,7 +4710,9 @@ Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc, ExprArg expr, TypeTy *type, SourceLocation RPLoc) { QualType T = QualType::getFromOpaquePtr(type); - + Expr *E = static_cast(expr.get()); + Expr *OrigExpr = E; + InitBuiltinVaListType(); // Get the va_list type @@ -4721,7 +4723,6 @@ Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc, if (VaListType->isArrayType()) VaListType = Context.getArrayDecayedType(VaListType); // Make sure the input expression also decays appropriately. - Expr *E = static_cast(expr.get()); UsualUnaryConversions(E); AssignConvertType ConvResult = @@ -4730,13 +4731,13 @@ Sema::OwningExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc, case Compatible: break; // Everything good. case CompatiblePointerDiscardsQualifiers: Diag(E->getLocStart(), diag::warn_va_arg_with_qualified_va_list) - << E->getType() << E->getSourceRange(); + << OrigExpr->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()); + << OrigExpr->getType() << E->getSourceRange()); } // FIXME: Check that type is complete/non-abstract diff --git a/test/Sema/varargs-x86-64.c b/test/Sema/varargs-x86-64.c index 7953eada49..5afcda2471 100644 --- a/test/Sema/varargs-x86-64.c +++ b/test/Sema/varargs-x86-64.c @@ -3,6 +3,6 @@ // rdar://6726818 void f1() { const __builtin_va_list args2; - (void)__builtin_va_arg(args2, int); // expected-warning {{va_arg applied to va_list type 'struct __va_list_tag const *' with unexpected qualifiers}} + (void)__builtin_va_arg(args2, int); // expected-warning {{va_arg applied to va_list type '__builtin_va_list const' with unexpected qualifiers}} } -- 2.40.0