[PATCH] D31241: [Modules][PCH] Serialize #pragma pack
This revision was automatically updated to reflect the committed changes. Closed by commit rL299226: [Modules][PCH] Serialize #pragma pack (authored by arphaman). Changed prior to commit: https://reviews.llvm.org/D31241?vs=92638=93650#toc Repository: rL LLVM https://reviews.llvm.org/D31241 Files: cfe/trunk/include/clang/Serialization/ASTBitCodes.h cfe/trunk/include/clang/Serialization/ASTReader.h cfe/trunk/include/clang/Serialization/ASTWriter.h cfe/trunk/lib/Sema/SemaAttr.cpp cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp cfe/trunk/test/Modules/Inputs/module.map cfe/trunk/test/Modules/Inputs/pragma_pack_push.h cfe/trunk/test/Modules/Inputs/pragma_pack_reset_push.h cfe/trunk/test/Modules/Inputs/pragma_pack_set.h cfe/trunk/test/Modules/pragma-pack.c cfe/trunk/test/PCH/pragma-pack.c Index: cfe/trunk/test/PCH/pragma-pack.c === --- cfe/trunk/test/PCH/pragma-pack.c +++ cfe/trunk/test/PCH/pragma-pack.c @@ -0,0 +1,90 @@ +// Test this without pch. +// 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 -DRESET +// 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 -DPUSH_POP +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DPUSH_POP_LABEL + +// Test with pch. +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -verify -include-pch %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -verify -include-pch %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -verify -include-pch %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 -DPUSH_POP -verify -include-pch %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 -DPUSH_POP_LABEL -verify -include-pch %t + +#ifndef HEADER +#define HEADER + +#ifdef SET +#pragma pack(1) +#endif + +#ifdef RESET +#pragma pack(2) +#pragma pack () +#endif + +#ifdef PUSH +#pragma pack(1) +#pragma pack (push, 2) +#endif + +#ifdef PUSH_POP +#pragma pack (push, 4) +#pragma pack (push, 2) +#pragma pack (pop) +#endif + +#ifdef PUSH_POP_LABEL +#pragma pack (push, a, 4) +#pragma pack (push, b, 1) +#pragma pack (push, c, 2) +#pragma pack (pop, b) +#endif + +#else + +#ifdef SET +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 1}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef RESET +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma () +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#endif + +#ifdef PUSH +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 2}} +#pragma pack(pop) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 1}} +#pragma pack () +#pragma pack (show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef PUSH_POP +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef PUSH_POP_LABEL +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop, c) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop, a) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#pragma pack(pop, b) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#endif + +#endif Index: cfe/trunk/test/Modules/Inputs/pragma_pack_set.h === --- cfe/trunk/test/Modules/Inputs/pragma_pack_set.h +++ cfe/trunk/test/Modules/Inputs/pragma_pack_set.h @@ -0,0 +1,3 @@ + +#pragma pack (1) + Index: cfe/trunk/test/Modules/Inputs/pragma_pack_push.h === --- cfe/trunk/test/Modules/Inputs/pragma_pack_push.h +++ cfe/trunk/test/Modules/Inputs/pragma_pack_push.h @@ -0,0 +1,6 @@ + +#pragma pack
[PATCH] D31241: [Modules][PCH] Serialize #pragma pack
bruno accepted this revision. bruno added a comment. This revision is now accepted and ready to land. Thanks Alex. LGTM Repository: rL LLVM https://reviews.llvm.org/D31241 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D31241: [Modules][PCH] Serialize #pragma pack
arphaman created this revision. This patch serializes the state of `#pragma pack`. It preserves the state of the pragma from a PCH/from modules in a file that uses that PCH/those modules. Repository: rL LLVM https://reviews.llvm.org/D31241 Files: include/clang/Serialization/ASTBitCodes.h include/clang/Serialization/ASTReader.h include/clang/Serialization/ASTWriter.h lib/Sema/SemaAttr.cpp lib/Serialization/ASTReader.cpp lib/Serialization/ASTWriter.cpp test/Modules/Inputs/module.map test/Modules/Inputs/pragma_pack_push.h test/Modules/Inputs/pragma_pack_reset_push.h test/Modules/Inputs/pragma_pack_set.h test/Modules/pragma-pack.c test/PCH/pragma-pack.c Index: test/PCH/pragma-pack.c === --- /dev/null +++ test/PCH/pragma-pack.c @@ -0,0 +1,90 @@ +// Test this without pch. +// 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 -DRESET +// 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 -DPUSH_POP +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -include %s -verify -fsyntax-only -DPUSH_POP_LABEL + +// Test with pch. +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DSET -verify -include-pch %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DRESET -verify -include-pch %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -emit-pch -o %t +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 %s -DPUSH -verify -include-pch %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 -DPUSH_POP -verify -include-pch %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 -DPUSH_POP_LABEL -verify -include-pch %t + +#ifndef HEADER +#define HEADER + +#ifdef SET +#pragma pack(1) +#endif + +#ifdef RESET +#pragma pack(2) +#pragma pack () +#endif + +#ifdef PUSH +#pragma pack(1) +#pragma pack (push, 2) +#endif + +#ifdef PUSH_POP +#pragma pack (push, 4) +#pragma pack (push, 2) +#pragma pack (pop) +#endif + +#ifdef PUSH_POP_LABEL +#pragma pack (push, a, 4) +#pragma pack (push, b, 1) +#pragma pack (push, c, 2) +#pragma pack (pop, b) +#endif + +#else + +#ifdef SET +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 1}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef RESET +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma () +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#endif + +#ifdef PUSH +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 2}} +#pragma pack(pop) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 1}} +#pragma pack () +#pragma pack (show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef PUSH_POP +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#endif + +#ifdef PUSH_POP_LABEL +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop, c) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 4}} +#pragma pack(pop, a) +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#pragma pack(pop) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#pragma pack(pop, b) // expected-warning {{#pragma pack(pop, ...) failed: stack empty}} +#pragma pack(show) // expected-warning {{value of #pragma pack(show) == 8}} +#endif + +#endif Index: test/Modules/pragma-pack.c === --- /dev/null +++ test/Modules/pragma-pack.c @@ -0,0 +1,35 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=pragma_pack_set %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=pragma_pack_push %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=pragma_pack_empty %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -x objective-c -emit-module