diff options
author | Dario Domizioli <dario.domizioli@gmail.com> | 2014-05-23 12:13:25 +0000 |
---|---|---|
committer | Dario Domizioli <dario.domizioli@gmail.com> | 2014-05-23 12:13:25 +0000 |
commit | 13a0a38fe087a0d10f8038ed647c673da6d14370 (patch) | |
tree | 7ac71143fed5dd7d8d1f7b8e3d327bf2053c805a /clang/lib/Serialization/ASTReader.cpp | |
parent | e1e9a4e2eca7d78f3bb1f100454e4c8e661cbfef (diff) | |
download | bcm5719-llvm-13a0a38fe087a0d10f8038ed647c673da6d14370.tar.gz bcm5719-llvm-13a0a38fe087a0d10f8038ed647c673da6d14370.zip |
Implemented support for "pragma clang optimize on/off", based on attribute 'optnone'.
This patch implements support for selectively disabling optimizations on a
range of function definitions through a pragma. The implementation is that
all function definitions in the range are decorated with attribute
'optnone'.
#pragma clang optimize off
// All function definitions in here are decorated with 'optnone'.
#pragma clang optimize on
// Compilation resumes as normal.
llvm-svn: 209510
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 143a7386ff2..4ea95d07120 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3281,6 +3281,14 @@ ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) { LateParsedTemplates.append(Record.begin(), Record.end()); break; } + + case OPTIMIZE_PRAGMA_OPTIONS: + if (Record.size() != 1) { + Error("invalid pragma optimize record"); + return Failure; + } + OptimizeOffPragmaLocation = ReadSourceLocation(F, Record[0]); + break; } } } @@ -6808,6 +6816,11 @@ void ASTReader::UpdateSema() { } SemaDeclRefs.clear(); } + + // Update the state of 'pragma clang optimize'. Use the same API as if we had + // encountered the pragma in the source. + if(OptimizeOffPragmaLocation.isValid()) + SemaObj->ActOnPragmaOptimize(/* IsOn = */ false, OptimizeOffPragmaLocation); } IdentifierInfo* ASTReader::get(const char *NameStart, const char *NameEnd) { |