summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReader.cpp
diff options
context:
space:
mode:
authorDario Domizioli <dario.domizioli@gmail.com>2014-05-23 12:13:25 +0000
committerDario Domizioli <dario.domizioli@gmail.com>2014-05-23 12:13:25 +0000
commit13a0a38fe087a0d10f8038ed647c673da6d14370 (patch)
tree7ac71143fed5dd7d8d1f7b8e3d327bf2053c805a /clang/lib/Serialization/ASTReader.cpp
parente1e9a4e2eca7d78f3bb1f100454e4c8e661cbfef (diff)
downloadbcm5719-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.cpp13
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) {
OpenPOWER on IntegriCloud