[cfe-commits] r127910 - in /cfe/trunk: include/clang/Basic/LangOptions.h include/clang/Driver/CC1Options.td lib/Frontend/CompilerInvocation.cpp lib/Lex/Lexer.cpp test/Preprocessor/traditional-cpp.c
Daniel Dunbar
daniel at zuster.org
Thu Apr 7 12:59:11 PDT 2011
On Fri, Mar 18, 2011 at 6:20 PM, Chris Lattner <clattner at apple.com> wrote:
>
> On Mar 18, 2011, at 2:23 PM, Daniel Dunbar wrote:
>
>> Author: ddunbar
>> Date: Fri Mar 18 16:23:38 2011
>> New Revision: 127910
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=127910&view=rev
>> Log:
>> Lexer: Add extremely limited support for -traditional-cpp, ignoring BCPL
>> comments.
>
> Hi Daniel,
>
> Why not just have TraditionalCPP turn off LangOpts.BCPLComment?
That wouldn't do the same thing, we still lex BCPL comments in almost
all cases even with BCPLComments off -- by design, I assume, you wrote
it. :)
- Daniel
>
> -Chris
>
>>
>> Added:
>> cfe/trunk/test/Preprocessor/traditional-cpp.c
>> Modified:
>> cfe/trunk/include/clang/Basic/LangOptions.h
>> cfe/trunk/include/clang/Driver/CC1Options.td
>> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> cfe/trunk/lib/Lex/Lexer.cpp
>>
>> Modified: cfe/trunk/include/clang/Basic/LangOptions.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=127910&r1=127909&r2=127910&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/LangOptions.h (original)
>> +++ cfe/trunk/include/clang/Basic/LangOptions.h Fri Mar 18 16:23:38 2011
>> @@ -56,6 +56,7 @@
>> unsigned ObjCExceptions : 1; // Support Objective-C exceptions.
>> unsigned CXXExceptions : 1; // Support C++ exceptions.
>> unsigned SjLjExceptions : 1; // Use setjmp-longjump exception handling.
>> + unsigned TraditionalCPP : 1; /// Enable some traditional CPP emulation.
>> unsigned RTTI : 1; // Support RTTI information.
>>
>> unsigned MSBitfields : 1; // MS-compatible structure layout
>> @@ -169,7 +170,7 @@
>> C99 = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
>> CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
>> Exceptions = ObjCExceptions = CXXExceptions = SjLjExceptions = 0;
>> - Freestanding = NoBuiltin = 0;
>> + TraditionalCPP = Freestanding = NoBuiltin = 0;
>> MSBitfields = 0;
>> NeXTRuntime = 1;
>> RTTI = 1;
>>
>> Modified: cfe/trunk/include/clang/Driver/CC1Options.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=127910&r1=127909&r2=127910&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
>> +++ cfe/trunk/include/clang/Driver/CC1Options.td Fri Mar 18 16:23:38 2011
>> @@ -511,6 +511,8 @@
>> HelpText<"Store string literals as writable data">;
>> def fno_bitfield_type_align : Flag<"-fno-bitfield-type-align">,
>> HelpText<"Ignore bit-field types when aligning structures">;
>> +def traditional_cpp : Flag<"-traditional-cpp">,
>> + HelpText<"Enable some traditional CPP emulation">;
>>
>> //===----------------------------------------------------------------------===//
>> // Header Search Options
>>
>> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=127910&r1=127909&r2=127910&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
>> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Mar 18 16:23:38 2011
>> @@ -574,6 +574,8 @@
>> Res.push_back("-fcxx-exceptions");
>> if (Opts.SjLjExceptions)
>> Res.push_back("-fsjlj-exceptions");
>> + if (Opts.TraditionalCPP)
>> + Res.push_back("-traditional-cpp");
>> if (!Opts.RTTI)
>> Res.push_back("-fno-rtti");
>> if (Opts.MSBitfields)
>> @@ -1442,6 +1444,7 @@
>> Opts.ObjCExceptions = Args.hasArg(OPT_fobjc_exceptions);
>> Opts.CXXExceptions = Args.hasArg(OPT_fcxx_exceptions);
>> Opts.SjLjExceptions = Args.hasArg(OPT_fsjlj_exceptions);
>> + Opts.TraditionalCPP = Args.hasArg(OPT_traditional_cpp);
>>
>> Opts.RTTI = !Args.hasArg(OPT_fno_rtti);
>> Opts.Blocks = Args.hasArg(OPT_fblocks);
>>
>> Modified: cfe/trunk/lib/Lex/Lexer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=127910&r1=127909&r2=127910&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
>> +++ cfe/trunk/lib/Lex/Lexer.cpp Fri Mar 18 16:23:38 2011
>> @@ -2091,7 +2091,7 @@
>> // If the next token is obviously a // or /* */ comment, skip it efficiently
>> // too (without going through the big switch stmt).
>> if (CurPtr[0] == '/' && CurPtr[1] == '/' && !inKeepCommentMode() &&
>> - Features.BCPLComment) {
>> + Features.BCPLComment && !Features.TraditionalCPP) {
>> if (SkipBCPLComment(Result, CurPtr+2))
>> return; // There is a token to return.
>> goto SkipIgnoredUnits;
>> @@ -2280,8 +2280,10 @@
>> // this as "foo / bar" and langauges with BCPL comments would lex it as
>> // "foo". Check to see if the character after the second slash is a '*'.
>> // If so, we will lex that as a "/" instead of the start of a comment.
>> - if (Features.BCPLComment ||
>> - getCharAndSize(CurPtr+SizeTmp, SizeTmp2) != '*') {
>> + // However, we never do this in -traditional-cpp mode.
>> + if ((Features.BCPLComment ||
>> + getCharAndSize(CurPtr+SizeTmp, SizeTmp2) != '*') &&
>> + !Features.TraditionalCPP) {
>> if (SkipBCPLComment(Result, ConsumeChar(CurPtr, SizeTmp, Result)))
>> return; // There is a token to return.
>>
>>
>> Added: cfe/trunk/test/Preprocessor/traditional-cpp.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/traditional-cpp.c?rev=127910&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Preprocessor/traditional-cpp.c (added)
>> +++ cfe/trunk/test/Preprocessor/traditional-cpp.c Fri Mar 18 16:23:38 2011
>> @@ -0,0 +1,12 @@
>> +/* Clang supports a very limited subset of -traditional-cpp, basically we only
>> + * intend to add support for things that people actually rely on when doing
>> + * things like using /usr/bin/cpp to preprocess non-source files. */
>> +
>> +/*
>> + RUN: %clang_cc1 -traditional-cpp %s -E -o %t
>> + RUN: FileCheck < %t %s
>> +*/
>> +
>> +/* CHECK: foo // bar
>> + */
>> +foo // bar
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
More information about the cfe-commits
mailing list