diff options
author | Chris Lattner <sabre@nondot.org> | 2009-04-05 15:49:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-04-05 15:49:53 +0000 |
commit | 0d20b8a6d8af041edeb27cc4c68392454297e308 (patch) | |
tree | 7546343a73e10d8696f3120266bb2b627ba6be1a | |
parent | f076339c679a889f751873a9cf8e5ad4a8686a03 (diff) | |
download | clang-0d20b8a6d8af041edeb27cc4c68392454297e308.tar.gz |
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
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 9 | ||||
-rw-r--r-- | 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*>(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*>(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}} } |