/usr/lib/gcc/x86_64-linux-gnu/5/include/d/core/stdc/config.d is in libphobos-5-dev 5.5.0-12ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /**
* D header file for C99.
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* License: Distributed under the
* $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
* (See accompanying file LICENSE)
* Authors: Sean Kelly
* Source: $(DRUNTIMESRC core/stdc/_config.d)
* Standards: ISO/IEC 9899:1999 (E)
*/
/* NOTE: This file has been patched from the original DMD distribution to
* work with the GDC compiler.
*/
module core.stdc.config;
extern (C):
@trusted: // Types only.
nothrow:
@nogc:
version( GNU )
{
import gcc.builtins;
alias __builtin_clong c_long;
alias __builtin_culong c_ulong;
}
else version( Windows )
{
struct __c_long
{
pure nothrow @nogc @safe:
this(int x) { lng = x; }
int lng;
alias lng this;
}
struct __c_ulong
{
pure nothrow @nogc @safe:
this(uint x) { lng = x; }
uint lng;
alias lng this;
}
/*
* This is cpp_long instead of c_long because:
* 1. Implicit casting of an int to __c_long doesn't happen, because D doesn't
* allow constructor calls in implicit conversions.
* 2. long lng;
* cast(__c_long)lng;
* does not work because lng has to be implicitly cast to an int in the constructor,
* and since that truncates it is not done.
* Both of these break existing code, so until we find a resolution the types are named
* cpp_xxxx.
*/
alias __c_long cpp_long;
alias __c_ulong cpp_ulong;
alias int c_long;
alias uint c_ulong;
}
else version( Posix )
{
static if( (void*).sizeof > int.sizeof )
{
alias long c_long;
alias ulong c_ulong;
}
else
{
struct __c_long
{
pure nothrow @nogc @safe:
this(int x) { lng = x; }
int lng;
alias lng this;
}
struct __c_ulong
{
pure nothrow @nogc @safe:
this(uint x) { lng = x; }
uint lng;
alias lng this;
}
alias __c_long cpp_long;
alias __c_ulong cpp_ulong;
alias int c_long;
alias uint c_ulong;
}
}
version( DigitalMars )
{
version( CRuntime_Microsoft )
{
/* long double is 64 bits, not 80 bits, but is mangled differently
* than double. To distinguish double from long double, create a wrapper to represent
* long double, then recognize that wrapper specially in the compiler
* to generate the correct name mangling and correct function call/return
* ABI conformance.
*/
struct __c_long_double
{
pure nothrow @nogc @safe:
this(double d) { ld = d; }
double ld;
alias ld this;
}
alias __c_long_double c_long_double;
}
else version( X86 )
{
alias real c_long_double;
}
else version( X86_64 )
{
version( linux )
alias real c_long_double;
else version( FreeBSD )
alias real c_long_double;
else version( Solaris )
alias real c_long_double;
else version( OSX )
alias real c_long_double;
}
}
else version( GNU )
alias real c_long_double;
else version( LDC )
{
version( X86 )
alias real c_long_double;
else version( X86_64 )
alias real c_long_double;
}
else version( SDC )
{
version( X86 )
alias real c_long_double;
else version( X86_64 )
alias real c_long_double;
}
static assert(is(c_long_double), "c_long_double needs to be declared for this platform/architecture.");
|