[PATCH] Support for #pragma detect_mismatch

Reid Kleckner rnk at google.com
Wed May 29 13:15:34 PDT 2013


On Wed, May 29, 2013 at 3:55 PM, Aaron Ballman <aaron at aaronballman.com>wrote:

> On Wed, May 29, 2013 at 3:31 PM, Reid Kleckner <rnk at google.com> wrote:
> > --- include/clang/AST/ASTConsumer.h (revision 182601)
> > +++ include/clang/AST/ASTConsumer.h (working copy)
> > @@ -92,6 +92,12 @@
> >    /// only exists to support Microsoft's #pragma comment(linker,
> "/foo").
> >    virtual void HandleLinkerOptionPragma(llvm::StringRef Opts) {}
> >
> > +  /// \brief Handle a pragma that emits a mismatch identifier and value
> to
> > the
> > +  /// object file for the linker to work with.  Currently, this only
> exists
> > to
> > +  /// support Microsoft's #pragma detect_mismatch.
> > +  virtual void HandleDetectMismatch(llvm::StringRef Name,
> > +                                    llvm::StringRef Value) {}
> > +
> >
> > Should we avoid broadening the ASTConsumer interface?  If we lowered the
> > option in Sema, then we could reuse HandleLinkerOptionPragma() without
> too
> > much fuss.  But then we're doing codegen-like work in Sema.  I'd like a
> > second opinion on this.  If we can do this in Sema, we can eliminate a
> lot
> > of the plumbing for this and for #pragma comment(lib).
>
> I had originally done it that way, but wasn't overly keen on it.  We
> could reuse the TargetInfo behavior for getting the proper linker
> options, but it seemed like a layering violation.


Yeah, we'd have to use some Target interface outside of CodeGen, but I
don't see anything obvious.

Perhaps we should continue full steam ahead on this route and refactor at a
later date.


> > +/// \brief Handle the Microsoft \#pragma detect_mismatch extension.
> > +///
> > +/// The syntax is:
> > +/// \code
> > +///   #pragma detect_mismatch("name", "value")
> > +/// \endcode
> > +/// Where 'name' and 'value' are quoted strings.  The values are
> embedded
> > in
> > +/// the object file and passed along to the linker.  If the linker
> detects
> > a
> > +/// mismatch in the object file's values for the given name, a LNK2038
> > error
> > +/// is emitted.  See MSDN for more details.
> >
> > Seems reasonable to link to MSDN here.
>
> I left it out for consistency, but can add it in easily enough.
>
> Thanks!
>
> ~Aaron
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130529/02313d4d/attachment.html>


More information about the cfe-commits mailing list