Revert r308327

I forgot to test clang-tools-extra which is now failing.

llvm-svn: 308328
This commit is contained in:
Alex Lorenz 2017-07-18 17:36:42 +00:00
parent ad273341a4
commit aa61922157
21 changed files with 30 additions and 253 deletions

View File

@ -467,9 +467,8 @@ def IgnoredPragmaIntrinsic : DiagGroup<"ignored-pragma-intrinsic">;
def UnknownPragmas : DiagGroup<"unknown-pragmas">; def UnknownPragmas : DiagGroup<"unknown-pragmas">;
def IgnoredPragmas : DiagGroup<"ignored-pragmas", [IgnoredPragmaIntrinsic]>; def IgnoredPragmas : DiagGroup<"ignored-pragmas", [IgnoredPragmaIntrinsic]>;
def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">; def PragmaClangAttribute : DiagGroup<"pragma-clang-attribute">;
def PragmaPack : DiagGroup<"pragma-pack">;
def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas, def Pragmas : DiagGroup<"pragmas", [UnknownPragmas, IgnoredPragmas,
PragmaClangAttribute, PragmaPack]>; PragmaClangAttribute]>;
def UnknownWarningOption : DiagGroup<"unknown-warning-option">; def UnknownWarningOption : DiagGroup<"unknown-warning-option">;
def NSobjectAttribute : DiagGroup<"NSObject-attribute">; def NSobjectAttribute : DiagGroup<"NSObject-attribute">;
def IndependentClassAttribute : DiagGroup<"IndependentClass-attribute">; def IndependentClassAttribute : DiagGroup<"IndependentClass-attribute">;

View File

@ -712,16 +712,6 @@ def err_pragma_options_align_mac68k_target_unsupported : Error<
def warn_pragma_pack_invalid_alignment : Warning< def warn_pragma_pack_invalid_alignment : Warning<
"expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'">,
InGroup<IgnoredPragmas>; InGroup<IgnoredPragmas>;
def warn_pragma_pack_non_default_at_include : Warning<
"non-default #pragma pack value might change the alignment of struct or "
"union members in the included file">, InGroup<PragmaPack>;
def warn_pragma_pack_modified_after_include : Warning<
"the current #pragma pack aligment value is modified in the included "
"file">, InGroup<PragmaPack>;
def warn_pragma_pack_no_pop_eof : Warning<"unterminated "
"'#pragma pack (push, ...)' at end of file">, InGroup<PragmaPack>;
def note_pragma_pack_here : Note<
"previous '#pragma pack' directive that modifies alignment is here">;
// Follow the Microsoft implementation. // Follow the Microsoft implementation.
def warn_pragma_pack_show : Warning<"value of #pragma pack(show) == %0">; def warn_pragma_pack_show : Warning<"value of #pragma pack(show) == %0">;
def warn_pragma_pack_pop_identifer_and_alignment : Warning< def warn_pragma_pack_pop_identifer_and_alignment : Warning<

View File

@ -208,7 +208,6 @@ namespace sema {
class FunctionScopeInfo; class FunctionScopeInfo;
class LambdaScopeInfo; class LambdaScopeInfo;
class PossiblyUnreachableDiag; class PossiblyUnreachableDiag;
class SemaPPCallbacks;
class TemplateDeductionInfo; class TemplateDeductionInfo;
} }
@ -382,12 +381,11 @@ public:
llvm::StringRef StackSlotLabel; llvm::StringRef StackSlotLabel;
ValueType Value; ValueType Value;
SourceLocation PragmaLocation; SourceLocation PragmaLocation;
SourceLocation PragmaPushLocation; Slot(llvm::StringRef StackSlotLabel,
Slot(llvm::StringRef StackSlotLabel, ValueType Value, ValueType Value,
SourceLocation PragmaLocation, SourceLocation PragmaPushLocation) SourceLocation PragmaLocation)
: StackSlotLabel(StackSlotLabel), Value(Value), : StackSlotLabel(StackSlotLabel), Value(Value),
PragmaLocation(PragmaLocation), PragmaLocation(PragmaLocation) {}
PragmaPushLocation(PragmaPushLocation) {}
}; };
void Act(SourceLocation PragmaLocation, void Act(SourceLocation PragmaLocation,
PragmaMsStackAction Action, PragmaMsStackAction Action,
@ -418,8 +416,6 @@ public:
explicit PragmaStack(const ValueType &Default) explicit PragmaStack(const ValueType &Default)
: DefaultValue(Default), CurrentValue(Default) {} : DefaultValue(Default), CurrentValue(Default) {}
bool hasValue() const { return CurrentValue != DefaultValue; }
SmallVector<Slot, 2> Stack; SmallVector<Slot, 2> Stack;
ValueType DefaultValue; // Value used for PSK_Reset action. ValueType DefaultValue; // Value used for PSK_Reset action.
ValueType CurrentValue; ValueType CurrentValue;
@ -441,8 +437,6 @@ public:
// Sentinel to represent when the stack is set to mac68k alignment. // Sentinel to represent when the stack is set to mac68k alignment.
static const unsigned kMac68kAlignmentSentinel = ~0U; static const unsigned kMac68kAlignmentSentinel = ~0U;
PragmaStack<unsigned> PackStack; PragmaStack<unsigned> PackStack;
// The current #pragma pack values and locations at each #include.
SmallVector<std::pair<unsigned, SourceLocation>, 8> PackIncludeStack;
// Segment #pragmas. // Segment #pragmas.
PragmaStack<StringLiteral *> DataSegStack; PragmaStack<StringLiteral *> DataSegStack;
PragmaStack<StringLiteral *> BSSSegStack; PragmaStack<StringLiteral *> BSSSegStack;
@ -8191,15 +8185,6 @@ public:
void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, void ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
StringRef SlotLabel, Expr *Alignment); StringRef SlotLabel, Expr *Alignment);
enum class PragmaPackDiagnoseKind {
NonDefaultStateAtInclude,
ChangedStateAtExit
};
void DiagnoseNonDefaultPragmaPack(PragmaPackDiagnoseKind Kind,
SourceLocation IncludeLoc);
void DiagnoseUnterminatedPragmaPack();
/// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off]. /// ActOnPragmaMSStruct - Called on well formed \#pragma ms_struct [on|off].
void ActOnPragmaMSStruct(PragmaMSStructKind Kind); void ActOnPragmaMSStruct(PragmaMSStructKind Kind);
@ -10393,12 +10378,6 @@ private:
IdentifierInfo *Ident_NSError = nullptr; IdentifierInfo *Ident_NSError = nullptr;
/// \brief The handler for the FileChanged preprocessor events.
///
/// Used for diagnostics that implement custom semantic analysis for #include
/// directives, like -Wpragma-pack.
sema::SemaPPCallbacks *SemaPPCallbackHandler;
protected: protected:
friend class Parser; friend class Parser;
friend class InitializationSequence; friend class InitializationSequence;

View File

@ -825,7 +825,6 @@ private:
struct PragmaPackStackEntry { struct PragmaPackStackEntry {
unsigned Value; unsigned Value;
SourceLocation Location; SourceLocation Location;
SourceLocation PushLocation;
StringRef SlotLabel; StringRef SlotLabel;
}; };
llvm::SmallVector<PragmaPackStackEntry, 2> PragmaPackStack; llvm::SmallVector<PragmaPackStackEntry, 2> PragmaPackStack;

View File

@ -422,20 +422,15 @@ void Parser::HandlePragmaPack() {
assert(Tok.is(tok::annot_pragma_pack)); assert(Tok.is(tok::annot_pragma_pack));
PragmaPackInfo *Info = PragmaPackInfo *Info =
static_cast<PragmaPackInfo *>(Tok.getAnnotationValue()); static_cast<PragmaPackInfo *>(Tok.getAnnotationValue());
SourceLocation PragmaLoc = Tok.getLocation(); SourceLocation PragmaLoc = ConsumeAnnotationToken();
ExprResult Alignment; ExprResult Alignment;
if (Info->Alignment.is(tok::numeric_constant)) { if (Info->Alignment.is(tok::numeric_constant)) {
Alignment = Actions.ActOnNumericConstant(Info->Alignment); Alignment = Actions.ActOnNumericConstant(Info->Alignment);
if (Alignment.isInvalid()) { if (Alignment.isInvalid())
ConsumeAnnotationToken();
return; return;
}
} }
Actions.ActOnPragmaPack(PragmaLoc, Info->Action, Info->SlotLabel, Actions.ActOnPragmaPack(PragmaLoc, Info->Action, Info->SlotLabel,
Alignment.get()); Alignment.get());
// Consume the token after processing the pragma to enable pragma-specific
// #include warnings.
ConsumeAnnotationToken();
} }
void Parser::HandlePragmaMSStruct() { void Parser::HandlePragmaMSStruct() {

View File

@ -70,49 +70,6 @@ void Sema::ActOnTranslationUnitScope(Scope *S) {
PushDeclContext(S, Context.getTranslationUnitDecl()); PushDeclContext(S, Context.getTranslationUnitDecl());
} }
namespace clang {
namespace sema {
class SemaPPCallbacks : public PPCallbacks {
Sema *S = nullptr;
llvm::SmallVector<SourceLocation, 8> IncludeStack;
public:
void set(Sema &S) { this->S = &S; }
void reset() { S = nullptr; }
virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
SrcMgr::CharacteristicKind FileType,
FileID PrevFID) override {
if (!S)
return;
switch (Reason) {
case EnterFile: {
SourceManager &SM = S->getSourceManager();
SourceLocation IncludeLoc = SM.getIncludeLoc(SM.getFileID(Loc));
if (IncludeLoc.isValid()) {
IncludeStack.push_back(IncludeLoc);
S->DiagnoseNonDefaultPragmaPack(
Sema::PragmaPackDiagnoseKind::NonDefaultStateAtInclude, IncludeLoc);
}
break;
}
case ExitFile:
if (!IncludeStack.empty())
S->DiagnoseNonDefaultPragmaPack(
Sema::PragmaPackDiagnoseKind::ChangedStateAtExit,
IncludeStack.pop_back_val());
break;
default:
break;
}
}
};
} // end namespace sema
} // end namespace clang
Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer, Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter) TranslationUnitKind TUKind, CodeCompleteConsumer *CodeCompleter)
: ExternalSource(nullptr), isMultiplexExternalSource(false), : ExternalSource(nullptr), isMultiplexExternalSource(false),
@ -165,12 +122,6 @@ Sema::Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
// Initilization of data sharing attributes stack for OpenMP // Initilization of data sharing attributes stack for OpenMP
InitDataSharingAttributesStack(); InitDataSharingAttributesStack();
std::unique_ptr<sema::SemaPPCallbacks> Callbacks =
llvm::make_unique<sema::SemaPPCallbacks>();
SemaPPCallbackHandler = Callbacks.get();
PP.addPPCallbacks(std::move(Callbacks));
SemaPPCallbackHandler->set(*this);
} }
void Sema::addImplicitTypedef(StringRef Name, QualType T) { void Sema::addImplicitTypedef(StringRef Name, QualType T) {
@ -355,10 +306,6 @@ Sema::~Sema() {
// Destroys data sharing attributes stack for OpenMP // Destroys data sharing attributes stack for OpenMP
DestroyDataSharingAttributesStack(); DestroyDataSharingAttributesStack();
// Detach from the PP callback handler which outlives Sema since it's owned
// by the preprocessor.
SemaPPCallbackHandler->reset();
assert(DelayedTypos.empty() && "Uncorrected typos!"); assert(DelayedTypos.empty() && "Uncorrected typos!");
} }
@ -819,7 +766,6 @@ void Sema::ActOnEndOfTranslationUnit() {
CheckDelayedMemberExceptionSpecs(); CheckDelayedMemberExceptionSpecs();
} }
DiagnoseUnterminatedPragmaPack();
DiagnoseUnterminatedPragmaAttribute(); DiagnoseUnterminatedPragmaAttribute();
// All delayed member exception specs should be checked or we end up accepting // All delayed member exception specs should be checked or we end up accepting

View File

@ -202,40 +202,6 @@ void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action,
PackStack.Act(PragmaLoc, Action, SlotLabel, AlignmentVal); 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).
if (PackStack.hasValue() &&
(PackIncludeStack.empty() ||
PackIncludeStack.back().second != PrevLocation)) {
Diag(IncludeLoc, diag::warn_pragma_pack_non_default_at_include);
Diag(PrevLocation, diag::note_pragma_pack_here);
}
PackIncludeStack.push_back(
{PackStack.CurrentValue,
PackStack.hasValue() ? PrevLocation : SourceLocation()});
return;
}
assert(Kind == PragmaPackDiagnoseKind::ChangedStateAtExit && "invalid kind");
unsigned PreviousValue = PackIncludeStack.pop_back_val().first;
// Warn about modified alignment after #includes.
if (PreviousValue != 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) { void Sema::ActOnPragmaMSStruct(PragmaMSStructKind Kind) {
MSStructPragmaOn = (Kind == PMSST_ON); MSStructPragmaOn = (Kind == PMSST_ON);
} }
@ -283,8 +249,7 @@ void Sema::PragmaStack<ValueType>::Act(SourceLocation PragmaLocation,
return; return;
} }
if (Action & PSK_Push) if (Action & PSK_Push)
Stack.emplace_back(StackSlotLabel, CurrentValue, CurrentPragmaLocation, Stack.push_back(Slot(StackSlotLabel, CurrentValue, CurrentPragmaLocation));
PragmaLocation);
else if (Action & PSK_Pop) { else if (Action & PSK_Pop) {
if (!StackSlotLabel.empty()) { if (!StackSlotLabel.empty()) {
// If we've got a label, try to find it and jump there. // If we've got a label, try to find it and jump there.

View File

@ -3384,7 +3384,6 @@ ASTReader::ReadASTBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {
PragmaPackStackEntry Entry; PragmaPackStackEntry Entry;
Entry.Value = Record[Idx++]; Entry.Value = Record[Idx++];
Entry.Location = ReadSourceLocation(F, Record[Idx++]); Entry.Location = ReadSourceLocation(F, Record[Idx++]);
Entry.PushLocation = ReadSourceLocation(F, Record[Idx++]);
PragmaPackStrings.push_back(ReadString(Record, Idx)); PragmaPackStrings.push_back(ReadString(Record, Idx));
Entry.SlotLabel = PragmaPackStrings.back(); Entry.SlotLabel = PragmaPackStrings.back();
PragmaPackStack.push_back(Entry); PragmaPackStack.push_back(Entry);
@ -7580,14 +7579,13 @@ void ASTReader::UpdateSema() {
"Expected a default alignment value"); "Expected a default alignment value");
SemaObj->PackStack.Stack.emplace_back( SemaObj->PackStack.Stack.emplace_back(
PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue, PragmaPackStack.front().SlotLabel, SemaObj->PackStack.CurrentValue,
SemaObj->PackStack.CurrentPragmaLocation, SemaObj->PackStack.CurrentPragmaLocation);
PragmaPackStack.front().PushLocation);
DropFirst = true; DropFirst = true;
} }
for (const auto &Entry : for (const auto &Entry :
llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0)) llvm::makeArrayRef(PragmaPackStack).drop_front(DropFirst ? 1 : 0))
SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value, SemaObj->PackStack.Stack.emplace_back(Entry.SlotLabel, Entry.Value,
Entry.Location, Entry.PushLocation); Entry.Location);
if (PragmaPackCurrentLocation.isInvalid()) { if (PragmaPackCurrentLocation.isInvalid()) {
assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue && assert(*PragmaPackCurrentValue == SemaObj->PackStack.DefaultValue &&
"Expected a default alignment value"); "Expected a default alignment value");

View File

@ -4295,7 +4295,6 @@ void ASTWriter::WritePackPragmaOptions(Sema &SemaRef) {
for (const auto &StackEntry : SemaRef.PackStack.Stack) { for (const auto &StackEntry : SemaRef.PackStack.Stack) {
Record.push_back(StackEntry.Value); Record.push_back(StackEntry.Value);
AddSourceLocation(StackEntry.PragmaLocation, Record); AddSourceLocation(StackEntry.PragmaLocation, Record);
AddSourceLocation(StackEntry.PragmaPushLocation, Record);
AddString(StackEntry.StackSlotLabel, Record); AddString(StackEntry.StackSlotLabel, Record);
} }
Stream.EmitRecord(PACK_PRAGMA_OPTIONS, Record); Stream.EmitRecord(PACK_PRAGMA_OPTIONS, Record);

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp -x c++ -std=c++11 -fms-extensions -Wno-pragma-pack %s // RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp -x c++ -std=c++11 -fms-extensions %s
// expected-error@+1 {{expected an OpenMP directive}} // expected-error@+1 {{expected an OpenMP directive}}
#pragma omp declare #pragma omp declare

View File

@ -1,21 +1,21 @@
// Test this without pch. // Test this without pch.
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -Wno-pragma-pack -DSET // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DSET
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -Wno-pragma-pack -DRESET // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DRESET
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -Wno-pragma-pack -DPUSH // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DPUSH
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -Wno-pragma-pack -DPUSH_POP // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DPUSH_POP
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -Wno-pragma-pack -DPUSH_POP_LABEL // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DPUSH_POP_LABEL
// Test with pch. // Test with pch.
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DSET -emit-pch -o %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DSET -verify -include-pch %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -verify -include-pch %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DRESET -emit-pch -o %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DRESET -verify -include-pch %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -verify -include-pch %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH -emit-pch -o %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH -verify -include-pch %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -verify -include-pch %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH_POP -emit-pch -o %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH_POP -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH_POP -verify -include-pch %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH_POP -verify -include-pch %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH_POP_LABEL -emit-pch -o %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH_POP_LABEL -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -Wno-pragma-pack -DPUSH_POP_LABEL -verify -include-pch %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH_POP_LABEL -verify -include-pch %t
#ifndef HEADER #ifndef HEADER
#define HEADER #define HEADER

View File

@ -1,8 +0,0 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -verify -emit-pch -o %t
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -verify -include-pch %t
#ifndef HEADER
#define HEADER
#pragma pack (push, 1)
#endif
// expected-warning@-2 {{unterminated '#pragma pack (push, ...)' at end of file}}

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -triple i386-apple-darwin9 -Wno-pragma-pack -fsyntax-only -verify %s // RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
/* expected-warning {{expected 'align' following '#pragma options'}} */ #pragma options /* expected-warning {{expected 'align' following '#pragma options'}} */ #pragma options
/* expected-warning {{expected '=' following '#pragma options align'}} */ #pragma options align /* expected-warning {{expected '=' following '#pragma options align'}} */ #pragma options align

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -triple i386-apple-darwin9 -Wno-pragma-pack -fsyntax-only -verify %s // RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
// expected-no-diagnostics // expected-no-diagnostics
class C { class C {

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -fsyntax-only -Wno-pragma-pack -verify %s // RUN: %clang_cc1 -fsyntax-only -verify %s
// Note that this puts the expected lines before the directives to work around // Note that this puts the expected lines before the directives to work around
// limitations in the -verify mode. // limitations in the -verify mode.

View File

@ -1,23 +0,0 @@
#ifdef SET_FIRST_HEADER
#pragma pack (16)
#ifndef SET_SECOND_HEADER
// expected-note@-2 2 {{previous '#pragma pack' directive that modifies alignment is here}}
#else
// expected-note@-4 1 {{previous '#pragma pack' directive that modifies alignment is here}}
#endif
// expected-warning@+3 {{non-default #pragma pack value might change the alignment of struct or union members in the included file}}
#endif
#include "pragma-pack2.h"
#ifdef SET_SECOND_HEADER
// expected-warning@-3 {{the current #pragma pack aligment value is modified in the included file}}
#endif
#ifdef PUSH_POP_FIRST_HEADER
// This is fine, we don't change the current value.
#pragma pack (push, 4)
#pragma pack (pop)
#endif

View File

@ -1,6 +0,0 @@
#ifdef SET_SECOND_HEADER
#pragma pack (8) // expected-note 2 {{previous '#pragma pack' directive that modifies alignment is here}}
#endif
struct S { int x; };

View File

@ -25,8 +25,3 @@
#pragma pack(pop, 16) #pragma pack(pop, 16)
/* expected-warning {{value of #pragma pack(show) == 16}} */ #pragma pack(show) /* expected-warning {{value of #pragma pack(show) == 16}} */ #pragma pack(show)
// Warn about unbalanced pushes.
#pragma pack (push,4) // expected-warning {{unterminated '#pragma pack (push, ...)' at end of file}}
#pragma pack (push) // expected-warning {{unterminated '#pragma pack (push, ...)' at end of file}}
#pragma pack ()

View File

@ -1,44 +0,0 @@
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DSAFE -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DSAFE -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DPUSH_SET_HERE -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DRESET_HERE -DSAFE -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DSET_FIRST_HEADER -DWARN_MODIFIED_HEADER -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DRESET_HERE -DSET_FIRST_HEADER -DWARN_MODIFIED_HEADER -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DPUSH_SET_HERE -DSET_FIRST_HEADER -DWARN_MODIFIED_HEADER -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DPUSH_SET_HERE -DSET_SECOND_HEADER -DWARN_MODIFIED_HEADER -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_HERE -DPUSH_SET_HERE -DSET_FIRST_HEADER -DSET_SECOND_HEADER -DWARN_MODIFIED_HEADER -verify %s
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I %S/Inputs -DPUSH_POP_FIRST_HEADER -DSAFE -verify %s
#ifdef SAFE
// expected-no-diagnostics
#endif
#ifdef PUSH_HERE
#pragma pack (push)
#endif
#ifdef PUSH_SET_HERE
#pragma pack (push, 4) // expected-note {{previous '#pragma pack' directive that modifies alignment is here}}
// expected-warning@+8 {{non-default #pragma pack value might change the alignment of struct or union members in the included file}}
#endif
#ifdef RESET_HERE
#pragma pack (4)
#pragma pack () // no warning after reset as the value is default.
#endif
#include "pragma-pack1.h"
#ifdef WARN_MODIFIED_HEADER
// expected-warning@-3 {{the current #pragma pack aligment value is modified in the included file}}
#endif
#ifdef PUSH_SET_HERE
#pragma pack (pop)
#endif
#ifdef PUSH_HERE
#pragma pack (pop)
#endif

View File

@ -1 +0,0 @@
// empty

View File

@ -1,6 +0,0 @@
// RUN: %clang_cc1 -triple i686-apple-darwin9 -fsyntax-only -I%S/Inputs -verify %s
#pragma pack (push, 1) // expected-note {{previous '#pragma pack' directive that modifies alignment is here}}
#import "empty.h" // expected-warning {{non-default #pragma pack value might change the alignment of struct or union members in the included file}}
#pragma pack (pop)