[cfe-dev] RFC: Clang driver redesign (round 2)

Chris Lattner clattner at apple.com
Wed Nov 9 09:33:19 PST 2011


Yes, I also think that is really annoying and should be fixed.  Why does fixing it require a new driver?

-Chris

On Nov 9, 2011, at 7:02 AM, Christopher Jefferson <chris at bubblescope.net> wrote:

> 
> On 8 Nov 2011, at 21:48, Chris Lattner wrote:
> 
>> On Nov 8, 2011, at 3:23 AM, James Molloy wrote:
>>> Thanks for all the replies. I've kind of summarised the main points of
>>> contest so far below and tried to group supporters and opponents. If
>>> I've grouped you incorrectly, please don't take it slanderously :)
>> 
>> Just MHO:
>> 
>>> "To GCC or not to GCC, that is the question"
>>> ============================================
>>> 
>>> +Doug Gregor, Miles Bader
>>> -Sean Hunt, Christopher Jefferson, Andrew Trick
>>> 
>>> There is differing opinion on the amount of GCC compatability clang
>>> should offer. A lot of examples and arguments have been given, but I
>>> see one conclusion - the driver should not be pinned to anything.
>> 
>> This is an absolute must-have.  I guess I'm not opposed to having a *second* driver that is "nicer" somehow than the existing one, but we cannot give up GCC compatibility in the main clang driver.
>> 
>> However, the challenge then becomes "why would anyone use the 'nice' one"?
> 
> Ease of use.
> 
> I see stories like this over and over again when teaching students.
> 
> $ cat test.cc
> #include <iostream>
> 
> int main(void)
> { 
>  int i;
>  std::cout << i;
> }
> $ clang test.cc
> Undefined symbols for architecture x86_64:
>  "std::ios_base::Init::Init()", referenced from:
>      ___cxx_global_var_init in t-vtk1TB.o
>  "std::ios_base::Init::~Init()", referenced from:
>      ___cxx_global_var_init in t-vtk1TB.o
>  "std::cout", referenced from:
>      _main in t-vtk1TB.o
>  "std::ostream::operator<<(int)", referenced from:
>      _main in t-vtk1TB.o
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see invocation)
> < wander off and ask someone why the code isn't compiling >
> $ clang++ test.cc
> $ ./a.out
> 1872097369
> < wander off to ask why the code isn't working. Get told to enable warnings >
> $ clang++ test.cc -Wall
> t.cc:6:16: warning: variable 'i' is uninitialized when used here
>      [-Wuninitialized]
>  std::cout << i;
>               ^
> t.cc:5:8: note: initialize the variable 'i' to silence this warning
>  int i;
>       ^
>        = 0
> 1 warning generated.
> < grumbles, add the initialisation, code works>
> 
> I think it would be worth trying to reduce the pain here, for a beginner programmer. I'll admit I don't know the best way of doing that.
> 
> 
> Chris



More information about the cfe-dev mailing list