forked from OSchip/llvm-project
Fix a failing assertion with the pointer_with_type_tag attribute when the function the attribute appertains to is variadic.
Patch by Joel Denny. llvm-svn: 326057
This commit is contained in:
parent
46d02dee65
commit
bd0f656631
|
@ -4567,11 +4567,10 @@ static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D,
|
|||
bool IsPointer = AL.getName()->getName() == "pointer_with_type_tag";
|
||||
if (IsPointer) {
|
||||
// Ensure that buffer has a pointer type.
|
||||
QualType BufferTy = getFunctionOrMethodParamType(D, ArgumentIdx);
|
||||
if (!BufferTy->isPointerType()) {
|
||||
if (ArgumentIdx >= getFunctionOrMethodNumParams(D) ||
|
||||
!getFunctionOrMethodParamType(D, ArgumentIdx)->isPointerType())
|
||||
S.Diag(AL.getLoc(), diag::err_attribute_pointers_only)
|
||||
<< AL.getName() << 0;
|
||||
}
|
||||
<< AL.getName() << 0;
|
||||
}
|
||||
|
||||
D->addAttr(::new (S.Context) ArgumentWithTypeTagAttr(
|
||||
|
|
|
@ -37,6 +37,10 @@ int wrong9 __attribute__(( pointer_with_type_tag(mpi,1,2) )); // expected-error
|
|||
int wrong10(double buf, MPI_Datatype type)
|
||||
__attribute__(( pointer_with_type_tag(mpi,1,2) )); // expected-error {{'pointer_with_type_tag' attribute only applies to pointer arguments}}
|
||||
|
||||
int ok11(void *, ...)
|
||||
__attribute__(( pointer_with_type_tag(mpi,1,2) ));
|
||||
int wrong11(void *, ...)
|
||||
__attribute__(( pointer_with_type_tag(mpi,2,3) )); // expected-error {{'pointer_with_type_tag' attribute only applies to pointer arguments}}
|
||||
|
||||
extern struct A datatype_wrong1
|
||||
__attribute__(( type_tag_for_datatype )); // expected-error {{'type_tag_for_datatype' attribute requires parameter 1 to be an identifier}}
|
||||
|
|
Loading…
Reference in New Issue