forked from OSchip/llvm-project
Two fixes related to force_align_arg_pointer:
- Also recognize __force_align_arg_pointer__. - Don't warn if it's used on a function pointer typedef. llvm-svn: 96568
This commit is contained in:
parent
44272ca356
commit
cb9572e7b3
|
@ -82,9 +82,13 @@ static void HandleX86ForceAlignArgPointerAttr(Decl *D,
|
|||
// If we try to apply it to a function pointer, don't warn, but don't
|
||||
// do anything, either. It doesn't matter anyway, because there's nothing
|
||||
// special about calling a force_align_arg_pointer function.
|
||||
ValueDecl* VD = dyn_cast<ValueDecl>(D);
|
||||
ValueDecl *VD = dyn_cast<ValueDecl>(D);
|
||||
if (VD && VD->getType()->isFunctionPointerType())
|
||||
return;
|
||||
// Also don't warn on function pointer typedefs.
|
||||
TypedefDecl *TD = dyn_cast<TypedefDecl>(D);
|
||||
if (TD && TD->getUnderlyingType()->isFunctionPointerType())
|
||||
return;
|
||||
// Attribute can only be applied to function types.
|
||||
if (!isa<FunctionDecl>(D)) {
|
||||
S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
|
||||
|
@ -189,7 +193,8 @@ namespace {
|
|||
default: break;
|
||||
}
|
||||
}
|
||||
if (Attr.getName()->getName() == "force_align_arg_pointer") {
|
||||
if (Attr.getName()->getName() == "force_align_arg_pointer" ||
|
||||
Attr.getName()->getName() == "__force_align_arg_pointer__") {
|
||||
HandleX86ForceAlignArgPointerAttr(D, Attr, S);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -15,4 +15,5 @@ void __attribute__((force_align_arg_pointer)) d(void) {}
|
|||
|
||||
// Attribute is ignored on function pointer types.
|
||||
void (__attribute__((force_align_arg_pointer)) *p)();
|
||||
typedef void (__attribute__((__force_align_arg_pointer__)) *p2)();
|
||||
|
||||
|
|
Loading…
Reference in New Issue