r188258 - Add XCore target
Arnold Schwaighofer
aschwaighofer at apple.com
Tue Aug 13 07:55:35 PDT 2013
Fixed in r188271.
It was breaking our bots too.
http://llvm.org/docs/CommandGuide/FileCheck.html has a description of the syntax.
Thanks,
Arnold
On Aug 13, 2013, at 9:30 AM, Evgeniy Stepanov <eugeni.stepanov at gmail.com> wrote:
> I usually just omit the identifiers in tests. If they really matter,
> you can use regexps like that, but it often makes the test more
> sensitive to unrelated changes and various optimizations.
>
> In this case, there was report in the IRC with this failure:
> http://pastebin.com/RDGnH4ny
>
> On Tue, Aug 13, 2013 at 6:27 PM, Robert Lytton <robert at xmos.com> wrote:
>> Hi Evgeniy,
>>
>> Please could you elaborate on what the test should have been.
>> Is it better to replace the identifiers with regular expression matching? viz:
>> char* v1 = va_arg (ap, char*);
>> // CHECK: %{{[0-9]+}} = va_arg i8** [[AP:%arg[0-9]*]], i8*
>>
>> Robert
>>
>> ________________________________________
>> From: Evgeniy Stepanov [eugeni.stepanov at gmail.com]
>> Sent: 13 August 2013 14:16
>> To: Robert Lytton
>> Cc: cfe-commits at cs.uiuc.edu
>> Subject: Re: r188258 - Add XCore target
>>
>>> %ap
>> Please don't use named (as well as numbered) identifiers in lit tests.
>> They are fragile and can be stripped in optimized builds.
>>
>>
>> On Tue, Aug 13, 2013 at 1:43 PM, Robert Lytton <robert at xmos.com> wrote:
>>> Author: rlytton
>>> Date: Tue Aug 13 04:43:10 2013
>>> New Revision: 188258
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=188258&view=rev
>>> Log:
>>> Add XCore target
>>>
>>> Added:
>>> cfe/trunk/include/clang/Basic/BuiltinsXCore.def
>>> cfe/trunk/test/CodeGen/xcore-abi.c
>>> cfe/trunk/test/Driver/xcore-opts.c
>>> Modified:
>>> cfe/trunk/include/clang/Basic/TargetBuiltins.h
>>> cfe/trunk/lib/Basic/Targets.cpp
>>> cfe/trunk/lib/CodeGen/TargetInfo.cpp
>>> cfe/trunk/lib/Driver/Tools.cpp
>>> cfe/trunk/test/Preprocessor/init.c
>>> cfe/trunk/test/Preprocessor/stdint.c
>>>
>>> Added: cfe/trunk/include/clang/Basic/BuiltinsXCore.def
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsXCore.def?rev=188258&view=auto
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Basic/BuiltinsXCore.def (added)
>>> +++ cfe/trunk/include/clang/Basic/BuiltinsXCore.def Tue Aug 13 04:43:10 2013
>>> @@ -0,0 +1,22 @@
>>> +//===--- BuiltinsXCore.def - XCore Builtin function database ----*- C++ -*-===//
>>> +//
>>> +// The LLVM Compiler Infrastructure
>>> +//
>>> +// This file is distributed under the University of Illinois Open Source
>>> +// License. See LICENSE.TXT for details.
>>> +//
>>> +//===----------------------------------------------------------------------===//
>>> +//
>>> +// This file defines the XCore-specific builtin function database. Users of
>>> +// this file must define the BUILTIN macro to make use of this information.
>>> +//
>>> +//===----------------------------------------------------------------------===//
>>> +
>>> +// The format of this database matches clang/Basic/Builtins.def.
>>> +
>>> +BUILTIN(__builtin_bitrev, "UiUi", "nc")
>>> +BUILTIN(__builtin_getid, "Si", "nc")
>>> +BUILTIN(__builtin_getps, "UiUi", "n")
>>> +BUILTIN(__builtin_setps, "vUiUi", "n")
>>> +
>>> +#undef BUILTIN
>>>
>>> Modified: cfe/trunk/include/clang/Basic/TargetBuiltins.h
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetBuiltins.h?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Basic/TargetBuiltins.h (original)
>>> +++ cfe/trunk/include/clang/Basic/TargetBuiltins.h Tue Aug 13 04:43:10 2013
>>> @@ -131,6 +131,16 @@ namespace clang {
>>> LastTSBuiltin
>>> };
>>> }
>>> +
>>> + /// \brief XCore builtins
>>> + namespace XCore {
>>> + enum {
>>> + LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
>>> +#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
>>> +#include "clang/Basic/BuiltinsXCore.def"
>>> + LastTSBuiltin
>>> + };
>>> + }
>>> } // end namespace clang.
>>>
>>> #endif
>>>
>>> Modified: cfe/trunk/lib/Basic/Targets.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Basic/Targets.cpp (original)
>>> +++ cfe/trunk/lib/Basic/Targets.cpp Tue Aug 13 04:43:10 2013
>>> @@ -5138,6 +5138,64 @@ namespace {
>>> };
>>> }
>>>
>>> +namespace {
>>> +class XCoreTargetInfo : public TargetInfo {
>>> + static const Builtin::Info BuiltinInfo[];
>>> +public:
>>> + XCoreTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) {
>>> + BigEndian = false;
>>> + NoAsmVariants = true;
>>> + LongLongAlign = 32;
>>> + SuitableAlign = 32;
>>> + DoubleAlign = LongDoubleAlign = 32;
>>> + UseZeroLengthBitfieldAlignment = true;
>>> + DescriptionString = "e-p:32:32:32-a0:0:32-n32"
>>> + "-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32"
>>> + "-f16:16:32-f32:32:32-f64:32:32";
>>> + }
>>> + virtual void getTargetDefines(const LangOptions &Opts,
>>> + MacroBuilder &Builder) const {
>>> + Builder.defineMacro("__XS1B__");
>>> + }
>>> + virtual void getTargetBuiltins(const Builtin::Info *&Records,
>>> + unsigned &NumRecords) const {
>>> + Records = BuiltinInfo;
>>> + NumRecords = clang::XCore::LastTSBuiltin-Builtin::FirstTSBuiltin;
>>> + }
>>> + virtual BuiltinVaListKind getBuiltinVaListKind() const {
>>> + return TargetInfo::VoidPtrBuiltinVaList;
>>> + }
>>> + virtual const char *getClobbers() const {
>>> + return "";
>>> + }
>>> + virtual void getGCCRegNames(const char * const *&Names,
>>> + unsigned &NumNames) const {
>>> + static const char * const GCCRegNames[] = {
>>> + "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
>>> + "r8", "r9", "r10", "r11", "cp", "dp", "sp", "lr"
>>> + };
>>> + Names = GCCRegNames;
>>> + NumNames = llvm::array_lengthof(GCCRegNames);
>>> + }
>>> + virtual void getGCCRegAliases(const GCCRegAlias *&Aliases,
>>> + unsigned &NumAliases) const {
>>> + Aliases = NULL;
>>> + NumAliases = 0;
>>> + }
>>> + virtual bool validateAsmConstraint(const char *&Name,
>>> + TargetInfo::ConstraintInfo &Info) const {
>>> + return false;
>>> + }
>>> +};
>>> +
>>> +const Builtin::Info XCoreTargetInfo::BuiltinInfo[] = {
>>> +#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, ALL_LANGUAGES },
>>> +#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) { #ID, TYPE, ATTRS, HEADER,\
>>> + ALL_LANGUAGES },
>>> +#include "clang/Basic/BuiltinsXCore.def"
>>> +};
>>> +} // end anonymous namespace.
>>> +
>>>
>>> //===----------------------------------------------------------------------===//
>>> // Driver code
>>> @@ -5150,6 +5208,9 @@ static TargetInfo *AllocateTarget(const
>>> default:
>>> return NULL;
>>>
>>> + case llvm::Triple::xcore:
>>> + return new XCoreTargetInfo(Triple);
>>> +
>>> case llvm::Triple::hexagon:
>>> return new HexagonTargetInfo(Triple);
>>>
>>>
>>> Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
>>> +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Tue Aug 13 04:43:10 2013
>>> @@ -5366,6 +5366,22 @@ public:
>>> } // end anonymous namespace
>>>
>>>
>>> +//===----------------------------------------------------------------------===//
>>> +// Xcore ABI Implementation
>>> +//===----------------------------------------------------------------------===//
>>> +namespace {
>>> +class XcoreTargetCodeGenInfo : public TargetCodeGenInfo {
>>> +public:
>>> + XcoreTargetCodeGenInfo(CodeGenTypes &CGT)
>>> + :TargetCodeGenInfo(new DefaultABIInfo(CGT)) {}
>>> +};
>>> +} // end anonymous namespace
>>> +
>>> +
>>> +//===----------------------------------------------------------------------===//
>>> +// Driver code
>>> +//===----------------------------------------------------------------------===//
>>> +
>>> const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
>>> if (TheTargetCodeGenInfo)
>>> return *TheTargetCodeGenInfo;
>>> @@ -5474,5 +5490,8 @@ const TargetCodeGenInfo &CodeGenModule::
>>> return *(TheTargetCodeGenInfo = new HexagonTargetCodeGenInfo(Types));
>>> case llvm::Triple::sparcv9:
>>> return *(TheTargetCodeGenInfo = new SparcV9TargetCodeGenInfo(Types));
>>> + case llvm::Triple::xcore:
>>> + return *(TheTargetCodeGenInfo = new XcoreTargetCodeGenInfo(Types));
>>> +
>>> }
>>> }
>>>
>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>>> +++ cfe/trunk/lib/Driver/Tools.cpp Tue Aug 13 04:43:10 2013
>>> @@ -552,10 +552,21 @@ static bool isSignedCharDefault(const ll
>>>
>>> case llvm::Triple::ppc64le:
>>> case llvm::Triple::systemz:
>>> + case llvm::Triple::xcore:
>>> return false;
>>> }
>>> }
>>>
>>> +static bool isNoCommonDefault(const llvm::Triple &Triple) {
>>> + switch (Triple.getArch()) {
>>> + default:
>>> + return false;
>>> +
>>> + case llvm::Triple::xcore:
>>> + return true;
>>> + }
>>> +}
>>> +
>>> // Handle -mfpu=.
>>> //
>>> // FIXME: Centralize feature selection, defaulting shouldn't be also in the
>>> @@ -1761,6 +1772,9 @@ static bool shouldUseFramePointer(const
>>> return false;
>>> }
>>>
>>> + if (Triple.getArch() == llvm::Triple::xcore)
>>> + return false;
>>> +
>>> return true;
>>> }
>>>
>>> @@ -1780,6 +1794,9 @@ static bool shouldUseLeafFramePointer(co
>>> return false;
>>> }
>>>
>>> + if (Triple.getArch() == llvm::Triple::xcore)
>>> + return false;
>>> +
>>> return true;
>>> }
>>>
>>> @@ -3200,7 +3217,7 @@ void Clang::ConstructJob(Compilation &C,
>>> CmdArgs.push_back("-fpack-struct=1");
>>> }
>>>
>>> - if (KernelOrKext) {
>>> + if (KernelOrKext || isNoCommonDefault(getToolChain().getTriple())) {
>>> if (!Args.hasArg(options::OPT_fcommon))
>>> CmdArgs.push_back("-fno-common");
>>> Args.ClaimAllArgs(options::OPT_fno_common);
>>>
>>> Added: cfe/trunk/test/CodeGen/xcore-abi.c
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/xcore-abi.c?rev=188258&view=auto
>>> ==============================================================================
>>> --- cfe/trunk/test/CodeGen/xcore-abi.c (added)
>>> +++ cfe/trunk/test/CodeGen/xcore-abi.c Tue Aug 13 04:43:10 2013
>>> @@ -0,0 +1,35 @@
>>> +// RUN: %clang -target xcore -O1 -o - -emit-llvm -S %s | FileCheck %s
>>> +
>>> +// CHECK: target datalayout = "e-p:32:32:32-a0:0:32-n32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f16:16:32-f32:32:32-f64:32:32"
>>> +// CHECK: target triple = "xcore"
>>> +
>>> +#include <stdarg.h>
>>> +struct x { int a; };
>>> +void testva (int n, ...) {
>>> + va_list ap;
>>> + // CHECK: %ap = alloca i8*, align 4
>>> +
>>> + char* v1 = va_arg (ap, char*);
>>> + // CHECK: %0 = va_arg i8** %ap, i8*
>>> +
>>> + int v2 = va_arg (ap, int);
>>> + // CHECK: %1 = va_arg i8** %ap, i32
>>> +
>>> + long long int v3 = va_arg (ap, long long int);
>>> + // CHECK: %2 = va_arg i8** %ap, i64
>>> +
>>> + //struct x t = va_arg (ap, struct x);
>>> + //cannot compile aggregate va_arg expressions yet
>>> +}
>>> +
>>> +void testbuiltin (void) {
>>> +// CHECK: %0 = tail call i32 @llvm.xcore.getid()
>>> +// CHECK: %1 = tail call i32 @llvm.xcore.getps(i32 %0)
>>> +// CHECK: %2 = tail call i32 @llvm.xcore.bitrev(i32 %1)
>>> +// CHECK: tail call void @llvm.xcore.setps(i32 %0, i32 %2)
>>> + int i = __builtin_getid();
>>> + unsigned int ui = __builtin_getps(i);
>>> + ui = __builtin_bitrev(ui);
>>> + __builtin_setps(i,ui);
>>> +
>>> +}
>>>
>>> Added: cfe/trunk/test/Driver/xcore-opts.c
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/xcore-opts.c?rev=188258&view=auto
>>> ==============================================================================
>>> --- cfe/trunk/test/Driver/xcore-opts.c (added)
>>> +++ cfe/trunk/test/Driver/xcore-opts.c Tue Aug 13 04:43:10 2013
>>> @@ -0,0 +1,15 @@
>>> +// RUN: %clang -target xcore -O1 -o - -emit-llvm -S %s | FileCheck %s
>>> +
>>> +// CHECK: @g1 = global
>>> +int g1;
>>> +// CHECK: @g2 = common global i32 0, align 4
>>> +int g2 __attribute__((common));
>>> +
>>> +// CHECK: define zeroext i8 @testchar()
>>> +// CHECK: ret i8 -1
>>> +char testchar (void) {
>>> + return (char)-1;
>>> +}
>>> +
>>> +// CHECK: "no-frame-pointer-elim"="false"
>>> +// CHECK: "no-frame-pointer-elim-non-leaf"="false"
>>>
>>> Modified: cfe/trunk/test/Preprocessor/init.c
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/test/Preprocessor/init.c (original)
>>> +++ cfe/trunk/test/Preprocessor/init.c Tue Aug 13 04:43:10 2013
>>> @@ -2946,3 +2946,6 @@
>>> // ANDROID: __ANDROID__ 1
>>> // RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc64-unknown-freebsd < /dev/null | FileCheck -check-prefix PPC64-FREEBSD %s
>>> // PPC64-FREEBSD-NOT: #define __LONG_DOUBLE_128__ 1
>>> +//
>>> +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=xcore-none-none < /dev/null | FileCheck -check-prefix XCORE %s
>>> +// XCORE:#define __XS1B__ 1
>>>
>>> Modified: cfe/trunk/test/Preprocessor/stdint.c
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/stdint.c?rev=188258&r1=188257&r2=188258&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/test/Preprocessor/stdint.c (original)
>>> +++ cfe/trunk/test/Preprocessor/stdint.c Tue Aug 13 04:43:10 2013
>>> @@ -963,6 +963,114 @@
>>> // I386_MINGW32:WCHAR_MIN_ 0U
>>> //
>>> //
>>> +// RUN: %clang_cc1 -E -ffreestanding -triple=xcore-none-none %s | FileCheck -check-prefix XCORE %s
>>> +//
>>> +// XCORE:typedef signed long long int int64_t;
>>> +// XCORE:typedef unsigned long long int uint64_t;
>>> +// XCORE:typedef int64_t int_least64_t;
>>> +// XCORE:typedef uint64_t uint_least64_t;
>>> +// XCORE:typedef int64_t int_fast64_t;
>>> +// XCORE:typedef uint64_t uint_fast64_t;
>>> +//
>>> +// XCORE:typedef signed int int32_t;
>>> +// XCORE:typedef unsigned int uint32_t;
>>> +// XCORE:typedef int32_t int_least32_t;
>>> +// XCORE:typedef uint32_t uint_least32_t;
>>> +// XCORE:typedef int32_t int_fast32_t;
>>> +// XCORE:typedef uint32_t uint_fast32_t;
>>> +//
>>> +// XCORE:typedef signed short int16_t;
>>> +// XCORE:typedef unsigned short uint16_t;
>>> +// XCORE:typedef int16_t int_least16_t;
>>> +// XCORE:typedef uint16_t uint_least16_t;
>>> +// XCORE:typedef int16_t int_fast16_t;
>>> +// XCORE:typedef uint16_t uint_fast16_t;
>>> +//
>>> +// XCORE:typedef signed char int8_t;
>>> +// XCORE:typedef unsigned char uint8_t;
>>> +// XCORE:typedef int8_t int_least8_t;
>>> +// XCORE:typedef uint8_t uint_least8_t;
>>> +// XCORE:typedef int8_t int_fast8_t;
>>> +// XCORE:typedef uint8_t uint_fast8_t;
>>> +//
>>> +// XCORE:typedef int32_t intptr_t;
>>> +// XCORE:typedef uint32_t uintptr_t;
>>> +//
>>> +// XCORE:typedef long long int intmax_t;
>>> +// XCORE:typedef long long unsigned int uintmax_t;
>>> +//
>>> +// XCORE:INT8_MAX_ 127
>>> +// XCORE:INT8_MIN_ (-127 -1)
>>> +// XCORE:UINT8_MAX_ 255
>>> +// XCORE:INT_LEAST8_MIN_ (-127 -1)
>>> +// XCORE:INT_LEAST8_MAX_ 127
>>> +// XCORE:UINT_LEAST8_MAX_ 255
>>> +// XCORE:INT_FAST8_MIN_ (-127 -1)
>>> +// XCORE:INT_FAST8_MAX_ 127
>>> +// XCORE:UINT_FAST8_MAX_ 255
>>> +//
>>> +// XCORE:INT16_MAX_ 32767
>>> +// XCORE:INT16_MIN_ (-32767 -1)
>>> +// XCORE:UINT16_MAX_ 65535
>>> +// XCORE:INT_LEAST16_MIN_ (-32767 -1)
>>> +// XCORE:INT_LEAST16_MAX_ 32767
>>> +// XCORE:UINT_LEAST16_MAX_ 65535
>>> +// XCORE:INT_FAST16_MIN_ (-32767 -1)
>>> +// XCORE:INT_FAST16_MAX_ 32767
>>> +// XCORE:UINT_FAST16_MAX_ 65535
>>> +//
>>> +// XCORE:INT32_MAX_ 2147483647
>>> +// XCORE:INT32_MIN_ (-2147483647 -1)
>>> +// XCORE:UINT32_MAX_ 4294967295U
>>> +// XCORE:INT_LEAST32_MIN_ (-2147483647 -1)
>>> +// XCORE:INT_LEAST32_MAX_ 2147483647
>>> +// XCORE:UINT_LEAST32_MAX_ 4294967295U
>>> +// XCORE:INT_FAST32_MIN_ (-2147483647 -1)
>>> +// XCORE:INT_FAST32_MAX_ 2147483647
>>> +// XCORE:UINT_FAST32_MAX_ 4294967295U
>>> +//
>>> +// XCORE:INT64_MAX_ 9223372036854775807LL
>>> +// XCORE:INT64_MIN_ (-9223372036854775807LL -1)
>>> +// XCORE:UINT64_MAX_ 18446744073709551615ULL
>>> +// XCORE:INT_LEAST64_MIN_ (-9223372036854775807LL -1)
>>> +// XCORE:INT_LEAST64_MAX_ 9223372036854775807LL
>>> +// XCORE:UINT_LEAST64_MAX_ 18446744073709551615ULL
>>> +// XCORE:INT_FAST64_MIN_ (-9223372036854775807LL -1)
>>> +// XCORE:INT_FAST64_MAX_ 9223372036854775807LL
>>> +// XCORE:UINT_FAST64_MAX_ 18446744073709551615ULL
>>> +//
>>> +// XCORE:INTPTR_MIN_ (-2147483647 -1)
>>> +// XCORE:INTPTR_MAX_ 2147483647
>>> +// XCORE:UINTPTR_MAX_ 4294967295U
>>> +// XCORE:PTRDIFF_MIN_ (-2147483647 -1)
>>> +// XCORE:PTRDIFF_MAX_ 2147483647
>>> +// XCORE:SIZE_MAX_ 4294967295U
>>> +//
>>> +// XCORE:INTMAX_MIN_ (-9223372036854775807LL -1)
>>> +// XCORE:INTMAX_MAX_ 9223372036854775807LL
>>> +// XCORE:UINTMAX_MAX_ 18446744073709551615ULL
>>> +//
>>> +// XCORE:SIG_ATOMIC_MIN_ (-2147483647 -1)
>>> +// XCORE:SIG_ATOMIC_MAX_ 2147483647
>>> +// XCORE:WINT_MIN_ (-2147483647 -1)
>>> +// XCORE:WINT_MAX_ 2147483647
>>> +//
>>> +// XCORE:WCHAR_MAX_ 2147483647
>>> +// XCORE:WCHAR_MIN_ (-2147483647 -1)
>>> +//
>>> +// XCORE:INT8_C_(0) 0
>>> +// XCORE:UINT8_C_(0) 0U
>>> +// XCORE:INT16_C_(0) 0
>>> +// XCORE:UINT16_C_(0) 0U
>>> +// XCORE:INT32_C_(0) 0
>>> +// XCORE:UINT32_C_(0) 0U
>>> +// XCORE:INT64_C_(0) 0LL
>>> +// XCORE:UINT64_C_(0) 0ULL
>>> +//
>>> +// XCORE:INTMAX_C_(0) 0LL
>>> +// XCORE:UINTMAX_C_(0) 0ULL
>>> +//
>>> +//
>>> // stdint.h forms several macro definitions by pasting together identifiers
>>> // to form names (eg. int32_t is formed from int ## 32 ## _t). The following
>>> // case tests that these joining operations are performed correctly even if
>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> _______________________________________________
> 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