diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-06-22 00:03:40 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-06-22 00:03:40 +0000 |
| commit | 3c77a355e0850ba09c868850870663d6e1a3bc3c (patch) | |
| tree | b187bba6508fa661db2f1a57ec53fdeaa58c6223 /clang/lib/Sema/SemaDeclAttr.cpp | |
| parent | b2c4a99d522bd8851b36b13809ce67be16a81bdb (diff) | |
| download | bcm5719-llvm-3c77a355e0850ba09c868850870663d6e1a3bc3c.tar.gz bcm5719-llvm-3c77a355e0850ba09c868850870663d6e1a3bc3c.zip | |
implement support for -finstrument-functions, patch by Nelson
Elhage!
llvm-svn: 106507
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 5858de06698..dee10fb608a 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -1698,6 +1698,23 @@ static void HandleNoInlineAttr(Decl *d, const AttributeList &Attr, Sema &S) { d->addAttr(::new (S.Context) NoInlineAttr()); } +static void HandleNoInstrumentFunctionAttr(Decl *d, const AttributeList &Attr, + Sema &S) { + // check the attribute arguments. + if (Attr.getNumArgs() != 0) { + S.Diag(Attr.getLoc(), diag::err_attribute_wrong_number_arguments) << 0; + return; + } + + if (!isa<FunctionDecl>(d)) { + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) + << Attr.getName() << 0 /*function*/; + return; + } + + d->addAttr(::new (S.Context) NoInstrumentFunctionAttr()); +} + static void HandleGNUInlineAttr(Decl *d, const AttributeList &Attr, Sema &S) { // check the attribute arguments. if (Attr.getNumArgs() != 0) { @@ -2030,9 +2047,11 @@ static void ProcessDeclAttribute(Scope *scope, Decl *D, case AttributeList::AT_noinline: HandleNoInlineAttr (D, Attr, S); break; case AttributeList::AT_regparm: HandleRegparmAttr (D, Attr, S); break; case AttributeList::IgnoredAttribute: - case AttributeList::AT_no_instrument_function: // Interacts with -pg. // Just ignore break; + case AttributeList::AT_no_instrument_function: // Interacts with -pg. + HandleNoInstrumentFunctionAttr(D, Attr, S); + break; case AttributeList::AT_stdcall: case AttributeList::AT_cdecl: case AttributeList::AT_fastcall: |

