summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-01-14 20:54:07 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-01-14 20:54:07 +0000
commit243aedb6ece5e3a4c354d81f9a34c528938241bf (patch)
treef58a30d28c2f8cfc3a13c24b5136c809ce4c5217 /clang/lib/Basic
parentd43e208bb489391e922fcf28d7ff40cb71eb4ae6 (diff)
downloadbcm5719-llvm-243aedb6ece5e3a4c354d81f9a34c528938241bf.tar.gz
bcm5719-llvm-243aedb6ece5e3a4c354d81f9a34c528938241bf.zip
Properly propagate #pragma diagnostic mappings from PCH but not command-line warning flags.
Addresses rdar://8435969&8852495 llvm-svn: 123462
Diffstat (limited to 'clang/lib/Basic')
-rw-r--r--clang/lib/Basic/Diagnostic.cpp11
-rw-r--r--clang/lib/Basic/DiagnosticIDs.cpp2
2 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp
index 919ba8187ec..9a263c1d0bc 100644
--- a/clang/lib/Basic/Diagnostic.cpp
+++ b/clang/lib/Basic/Diagnostic.cpp
@@ -147,12 +147,13 @@ void Diagnostic::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map,
"Cannot map errors into warnings!");
assert(!DiagStatePoints.empty());
+ bool isPragma = L.isValid();
FullSourceLoc Loc(L, *SourceMgr);
FullSourceLoc LastStateChangePos = DiagStatePoints.back().Loc;
// Common case; setting all the diagnostics of a group in one place.
if (Loc.isInvalid() || Loc == LastStateChangePos) {
- setDiagnosticMappingInternal(Diag, Map, GetCurDiagState(), true);
+ setDiagnosticMappingInternal(Diag, Map, GetCurDiagState(), true, isPragma);
return;
}
@@ -165,7 +166,7 @@ void Diagnostic::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map,
// the new state became active.
DiagStates.push_back(*GetCurDiagState());
PushDiagStatePoint(&DiagStates.back(), Loc);
- setDiagnosticMappingInternal(Diag, Map, GetCurDiagState(), true);
+ setDiagnosticMappingInternal(Diag, Map, GetCurDiagState(), true, isPragma);
return;
}
@@ -178,12 +179,12 @@ void Diagnostic::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map,
// Update all diagnostic states that are active after the given location.
for (DiagStatePointsTy::iterator
I = Pos+1, E = DiagStatePoints.end(); I != E; ++I) {
- setDiagnosticMappingInternal(Diag, Map, I->State, true);
+ setDiagnosticMappingInternal(Diag, Map, I->State, true, isPragma);
}
// If the location corresponds to an existing point, just update its state.
if (Pos->Loc == Loc) {
- setDiagnosticMappingInternal(Diag, Map, Pos->State, true);
+ setDiagnosticMappingInternal(Diag, Map, Pos->State, true, isPragma);
return;
}
@@ -192,7 +193,7 @@ void Diagnostic::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map,
Pos->Loc.isBeforeInTranslationUnitThan(Loc);
DiagStates.push_back(*Pos->State);
DiagState *NewState = &DiagStates.back();
- setDiagnosticMappingInternal(Diag, Map, NewState, true);
+ setDiagnosticMappingInternal(Diag, Map, NewState, true, isPragma);
DiagStatePoints.insert(Pos+1, DiagStatePoint(NewState,
FullSourceLoc(Loc, *SourceMgr)));
}
diff --git a/clang/lib/Basic/DiagnosticIDs.cpp b/clang/lib/Basic/DiagnosticIDs.cpp
index df32c31ea9e..f4d7047a4b0 100644
--- a/clang/lib/Basic/DiagnosticIDs.cpp
+++ b/clang/lib/Basic/DiagnosticIDs.cpp
@@ -317,7 +317,7 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, unsigned DiagClass,
State);
if (MappingInfo == 0) {
MappingInfo = GetDefaultDiagMapping(DiagID);
- Diag.setDiagnosticMappingInternal(DiagID, MappingInfo, State, false);
+ Diag.setDiagnosticMappingInternal(DiagID, MappingInfo, State, false, false);
}
switch (MappingInfo & 7) {
OpenPOWER on IntegriCloud