diff options
author | Francois Pichet <pichet2000@gmail.com> | 2011-05-06 20:48:22 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2011-05-06 20:48:22 +0000 |
commit | 4a7de3eb2cbd7b55fabe440d255ab1f0242cdde6 (patch) | |
tree | c470fabb65471f59bda2ecaaebd974b13bdffb5b /clang/lib/Sema/SemaExprCXX.cpp | |
parent | 4a8ea1092abe14eb8e837e2a080b74c958213cd4 (diff) | |
download | bcm5719-llvm-4a7de3eb2cbd7b55fabe440d255ab1f0242cdde6.tar.gz bcm5719-llvm-4a7de3eb2cbd7b55fabe440d255ab1f0242cdde6.zip |
Add support for Microsoft __if_exists and __if_not_exists construct inside function definition.
Allow to include or exclude code depending on if a symbol exists or not. Just like a #ifdef but for C/C++ symbols.
More doc: http://msdn.microsoft.com/en-us/library/x7wy9xh3(v=VS.100).aspx
Support at class and namespace scopes will be added later.
llvm-svn: 131014
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 7f1bf596a23..e9aa1d3bcf8 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -4295,3 +4295,18 @@ StmtResult Sema::ActOnFinishFullStmt(Stmt *FullStmt) { return MaybeCreateStmtWithCleanups(FullStmt); } + +bool Sema::CheckMicrosoftIfExistsSymbol(CXXScopeSpec &SS, + UnqualifiedId &Name) { + DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name); + DeclarationName TargetName = TargetNameInfo.getName(); + if (!TargetName) + return false; + + // Do the redeclaration lookup in the current scope. + LookupResult R(*this, TargetNameInfo, Sema::LookupAnyName, + Sema::NotForRedeclaration); + R.suppressDiagnostics(); + LookupParsedName(R, getCurScope(), &SS); + return !R.empty(); +} |