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
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 =
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
// 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}}
}