diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-06-05 02:44:36 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-06-05 02:44:36 +0000 |
commit | 5ed5198a5a2fd630e5fc7ee6d5eaf63b8476e61d (patch) | |
tree | 8d42f2c27e9d9b8a92e9bd1f09dce609791c509e /clang/lib/Sema/SemaDecl.cpp | |
parent | dd096d888b04c192b3bd8e0fd6ba7966c667f2d8 (diff) | |
download | bcm5719-llvm-5ed5198a5a2fd630e5fc7ee6d5eaf63b8476e61d.tar.gz bcm5719-llvm-5ed5198a5a2fd630e5fc7ee6d5eaf63b8476e61d.zip |
Start of a Sema implementation for #pragma weak. This isn't really the
right approach, but I'm still not sure what the best way to go about this is.
llvm-svn: 72912
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index a39ff47cdbe..18636a4ab1b 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4414,3 +4414,33 @@ Sema::DeclPtrTy Sema::ActOnFileScopeAsmDecl(SourceLocation Loc, CurContext->addDecl(Context, New); return DeclPtrTy::make(New); } + +void Sema::ActOnPragmaWeakID(IdentifierInfo* Name, + SourceLocation PragmaLoc, + SourceLocation NameLoc) { + Decl *PrevDecl = LookupName(TUScope, Name, LookupOrdinaryName); + + // FIXME: This implementation is an ugly hack! + if (PrevDecl) { + PrevDecl->addAttr(::new (Context) WeakAttr()); + return; + } + Diag(PragmaLoc, diag::err_unsupported_pragma_weak); + return; +} + +void Sema::ActOnPragmaWeakAlias(IdentifierInfo* Name, + IdentifierInfo* AliasName, + SourceLocation PragmaLoc, + SourceLocation NameLoc, + SourceLocation AliasNameLoc) { + Decl *PrevDecl = LookupName(TUScope, Name, LookupOrdinaryName); + + // FIXME: This implementation is an ugly hack! + if (PrevDecl) { + PrevDecl->addAttr(::new (Context) AliasAttr(AliasName->getName())); + return; + } + Diag(PragmaLoc, diag::err_unsupported_pragma_weak); + return; +} |