[cfe-dev] [cfe-commits] r68413 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td include/clang/Basic/TargetInfo.h lib/Basic/Targets.cpp lib/Sema/SemaDeclAttr.cpp
Anton Korobeynikov
asl at math.spbu.ru
Sat Apr 4 03:27:02 PDT 2009
Hi, Eli
> Is this documented somewhere?
Well. Yes. It defaults to gcc's REGPARM_MAX, which is 3 on x86-32 and 6
on x86-64.
> As far as I can tell, it has no effect on the calling convention in LLVM.
That's correct. Actually regparm is among features which do not have
properly documented semantics.
So far (gcc's behaviour):
1. Hard error on non-x86 platforms
2. Ignore on x86-64 (warning is emitted with apple gcc / llvm-gcc, not
not with fsf gcc). However it's perfectly allowed to use regparm there.
3. Honour on x86-32
I decided to make clang's implementation as flexible as possible to allow theoretical
regparm(N) support for non-x86 targets, if needed.
> > + if (NumParams.getLimitedValue(4) > S.Context.Target.getRegParmMax()) {
> > + S.Diag(Attr.getLoc(), diag::err_attribute_regparm_invalid_number)
> > + << S.Context.Target.getRegParmMax() << NumParamsExpr->getSourceRange();
> > return;
> > }
>
> This check doesn't work correctly with getRegParmMax > 3.
Fixed, thanks
--
With best regards, Anton Korobeynikov.
Faculty of Mathematics & Mechanics, Saint Petersburg State University.
More information about the cfe-dev
mailing list