diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-01-14 20:54:07 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-01-14 20:54:07 +0000 |
commit | 243aedb6ece5e3a4c354d81f9a34c528938241bf (patch) | |
tree | f58a30d28c2f8cfc3a13c24b5136c809ce4c5217 /clang/lib/Basic | |
parent | d43e208bb489391e922fcf28d7ff40cb71eb4ae6 (diff) | |
download | bcm5719-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.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Basic/DiagnosticIDs.cpp | 2 |
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) { |