Author: hans Date: Thu Jul 28 18:06:58 2016 New Revision: 277075 URL: http://llvm.org/viewvc/llvm-project?rev=277075&view=rev Log: Merging r276653: ------------------------------------------------------------------------ r276653 | ssrivastava | 2016-07-25 10:17:06 -0700 (Mon, 25 Jul 2016) | 11 lines
Support '#pragma once' in headers when using PCH The '#pragma once' directive was erroneously ignored when encountered in the header-file specified in generate-PCH-mode. This resulted in compile-time errors in some cases with legal code, and also a misleading warning being produced. Patch by Warren Ristow! Differential Revision: http://reviews.llvm.org/D19815 ------------------------------------------------------------------------ Added: cfe/branches/release_39/test/PCH/Inputs/pragma-once.h - copied unchanged from r276653, cfe/trunk/test/PCH/Inputs/pragma-once.h cfe/branches/release_39/test/PCH/pragma-once.c - copied unchanged from r276653, cfe/trunk/test/PCH/pragma-once.c Modified: cfe/branches/release_39/ (props changed) cfe/branches/release_39/lib/Lex/Pragma.cpp Propchange: cfe/branches/release_39/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Thu Jul 28 18:06:58 2016 @@ -1,4 +1,4 @@ /cfe/branches/type-system-rewrite:134693-134817 -/cfe/trunk:275880,275967,276102,276350,276361,276473,276716,276887,276891,276979 +/cfe/trunk:275880,275967,276102,276350,276361,276473,276653,276716,276887,276891,276979 /cfe/trunk/test:170344 /cfe/trunk/test/SemaTemplate:126920 Modified: cfe/branches/release_39/lib/Lex/Pragma.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_39/lib/Lex/Pragma.cpp?rev=277075&r1=277074&r2=277075&view=diff ============================================================================== --- cfe/branches/release_39/lib/Lex/Pragma.cpp (original) +++ cfe/branches/release_39/lib/Lex/Pragma.cpp Thu Jul 28 18:06:58 2016 @@ -354,7 +354,9 @@ void Preprocessor::HandleMicrosoft__prag /// HandlePragmaOnce - Handle \#pragma once. OnceTok is the 'once'. /// void Preprocessor::HandlePragmaOnce(Token &OnceTok) { - if (isInPrimaryFile()) { + // Don't honor the 'once' when handling the primary source file, unless + // this is a prefix to a TU, which indicates we're generating a PCH file. + if (isInPrimaryFile() && TUKind != TU_Prefix) { Diag(OnceTok, diag::pp_pragma_once_in_main_file); return; } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits