diff options
author | Hans Wennborg <hans@hanshq.net> | 2017-07-26 21:29:24 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2017-07-26 21:29:24 +0000 |
commit | b4ece98a3493c67f5a4959c0c7143b82fad13906 (patch) | |
tree | efbf7ab7a8fdeda9fd698ece6b9159d8afbb36ce /clang/lib/Sema/SemaAttr.cpp | |
parent | 3197eb69812f9ff1c0ef4b2a7b894397dec3de24 (diff) | |
download | bcm5719-llvm-b4ece98a3493c67f5a4959c0c7143b82fad13906.tar.gz bcm5719-llvm-b4ece98a3493c67f5a4959c0c7143b82fad13906.zip |
Revert r309106 "Recommit r308327 2nd time: Add a warning for missing"
The warning fires on non-suspicious code in Chromium. Reverting until a
solution is figured out.
> Recommit r308327 2nd time: Add a warning for missing
> '#pragma pack (pop)' and suspicious uses of '#pragma pack' in included files
>
> The first recommit (r308441) caused a "non-default #pragma pack value might
> change the alignment of struct or union members in the included file" warning
> in LLVM itself. This recommit tweaks the added warning to avoid warnings for
> #includes that don't have any records that are affected by the non-default
> alignment. This tweak avoids the previously emitted warning in LLVM.
>
> Original message:
>
> This commit adds a new -Wpragma-pack warning. It warns in the following cases:
>
> - When a translation unit is missing terminating #pragma pack (pop) directives.
> - When entering an included file if the current alignment value as determined
> by '#pragma pack' directives is different from the default alignment value.
> - When leaving an included file that changed the state of the current alignment
> value.
>
> rdar://10184173
>
> Differential Revision: https://reviews.llvm.org/D35484
llvm-svn: 309186
Diffstat (limited to 'clang/lib/Sema/SemaAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaAttr.cpp | 55 |
1 files changed, 1 insertions, 54 deletions
diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index f7f1f618739..8c13ead6445 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -61,17 +61,6 @@ void Sema::AddAlignmentAttributesForRecord(RecordDecl *RD) { RD->addAttr(MaxFieldAlignmentAttr::CreateImplicit(Context, Alignment * 8)); } - if (PackIncludeStack.empty()) - return; - // The #pragma pack affected a record in an included file, so Clang should - // warn when that pragma was written in a file that included the included - // file. - for (auto &PackedInclude : llvm::reverse(PackIncludeStack)) { - if (PackedInclude.CurrentPragmaLocation != PackStack.CurrentPragmaLocation) - break; - if (PackedInclude.HasNonDefaultValue) - PackedInclude.ShouldWarnOnInclude = true; - } } void Sema::AddMsStructLayoutForRecord(RecordDecl *RD) { @@ -213,47 +202,6 @@ void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, PackStack.Act(PragmaLoc, Action, SlotLabel, AlignmentVal); } -void Sema::DiagnoseNonDefaultPragmaPack(PragmaPackDiagnoseKind Kind, - SourceLocation IncludeLoc) { - if (Kind == PragmaPackDiagnoseKind::NonDefaultStateAtInclude) { - SourceLocation PrevLocation = PackStack.CurrentPragmaLocation; - // Warn about non-default alignment at #includes (without redundant - // warnings for the same directive in nested includes). - // The warning is delayed until the end of the file to avoid warnings - // for files that don't have any records that are affected by the modified - // alignment. - bool HasNonDefaultValue = - PackStack.hasValue() && - (PackIncludeStack.empty() || - PackIncludeStack.back().CurrentPragmaLocation != PrevLocation); - PackIncludeStack.push_back( - {PackStack.CurrentValue, - PackStack.hasValue() ? PrevLocation : SourceLocation(), - HasNonDefaultValue, /*ShouldWarnOnInclude*/ false}); - return; - } - - assert(Kind == PragmaPackDiagnoseKind::ChangedStateAtExit && "invalid kind"); - PackIncludeState PrevPackState = PackIncludeStack.pop_back_val(); - if (PrevPackState.ShouldWarnOnInclude) { - // Emit the delayed non-default alignment at #include warning. - Diag(IncludeLoc, diag::warn_pragma_pack_non_default_at_include); - Diag(PrevPackState.CurrentPragmaLocation, diag::note_pragma_pack_here); - } - // Warn about modified alignment after #includes. - if (PrevPackState.CurrentValue != PackStack.CurrentValue) { - Diag(IncludeLoc, diag::warn_pragma_pack_modified_after_include); - Diag(PackStack.CurrentPragmaLocation, diag::note_pragma_pack_here); - } -} - -void Sema::DiagnoseUnterminatedPragmaPack() { - if (PackStack.Stack.empty()) - return; - for (const auto &StackSlot : llvm::reverse(PackStack.Stack)) - Diag(StackSlot.PragmaPushLocation, diag::warn_pragma_pack_no_pop_eof); -} - void Sema::ActOnPragmaMSStruct(PragmaMSStructKind Kind) { MSStructPragmaOn = (Kind == PMSST_ON); } @@ -301,8 +249,7 @@ void Sema::PragmaStack<ValueType>::Act(SourceLocation PragmaLocation, return; } if (Action & PSK_Push) - Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation, - PragmaLocation); + Stack.push_back(Slot(StackSlotLabel, CurrentValue, CurrentPragmaLocation)); else if (Action & PSK_Pop) { if (!StackSlotLabel.empty()) { // If we've got a label, try to find it and jump there. |