Thanks for checking, Nick!
+Roland, FYI (recent changes in clang break compilation of all of the
glibc),
similar to https://llvm.org/bugs/show_bug.cgi?id=22830#c1

On Mon, Jan 4, 2016 at 3:21 PM, Nick Lewycky <nicho...@mxc.ca> wrote:

> On 01/04/2016 01:40 PM, Kostya Serebryany wrote:
>
>>
>>
>> On Thu, Dec 17, 2015 at 5:03 PM, Richard Smith <rich...@metafoo.co.uk
>> <mailto:rich...@metafoo.co.uk>> wrote:
>>
>>     On Thu, Dec 17, 2015 at 3:59 PM, Nick Lewycky via cfe-commits
>>     <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>>
>> wrote:
>>
>>         On 12/17/2015 10:47 AM, Kostya Serebryany wrote:
>>
>>             I am now observing this error message when building glibc
>>             with clang
>>             (from trunk):
>>             ../include/string.h:101:28: error: cannot apply asm label to
>>             function
>>             after its first use
>>             libc_hidden_builtin_proto (memcpy)
>>             (many more instances)
>>
>>
>>             Do you think this is a bug in glibc code, or the error
>>             message could be
>>             more relaxed?
>>
>>
>>         Could you email me a .i copy of a failing build? That will help
>>         me decide whether it's a bug in the error or in glibc.
>>
>>
>> [sorry for delay,]
>> here is the preprocessed source file from glibc:
>> % clang      ~/tmp/a.i 2>&1 | grep error:
>> ../include/sys/stat.h:16:28: error: cannot apply asm label to function
>> after its first use
>> ../include/sys/stat.h:17:30: error: cannot apply asm label to function
>> after its first use
>> ../include/sys/stat.h:18:28: error: cannot apply asm label to function
>> after its first use
>> ../include/sys/stat.h:19:30: error: cannot apply asm label to function
>> after its first use
>> ...
>>
>>
>>     Also PR22830 comment 1 seems relevant here.
>>
>>
>> Probably, but since this is a very recent regression in clang I thought
>> I should report it.
>>
>
> This looks like it's WAI:
>
> 3783    extern int __fxstat (int __ver, int __fildes, struct stat
> *__stat_buf)
> 3784         __attribute__ ((__nothrow__ )) ;
> ...
> 3827    extern __inline int
> 3828    __attribute__ ((__nothrow__ )) fstat (int __fd, struct stat
> *__statbuf)
> 3829    {
> 3830      return __fxstat (1, __fd, __statbuf);
> 3831    }
> ...
> 3910    extern __typeof (__fxstat) __fxstat __asm__ ("" "__GI___fxstat")
> __attribute__ ((visibility ("hidden")));
>
> This is exactly the situation where GCC and Clang will emit a different .o
> file.
>
> Nick
>
>             On Fri, Dec 11, 2015 at 1:28 PM, Nick Lewycky via cfe-commits
>>             <cfe-commits@lists.llvm.org
>>             <mailto:cfe-commits@lists.llvm.org>
>>             <mailto:cfe-commits@lists.llvm.org
>>
>>             <mailto:cfe-commits@lists.llvm.org>>> wrote:
>>
>>                  Author: nicholas
>>                  Date: Fri Dec 11 15:28:55 2015
>>                  New Revision: 255371
>>
>>                  URL:
>>             http://llvm.org/viewvc/llvm-project?rev=255371&view=rev
>>                  Log:
>>                  Error on redeclaring with a conflicting asm label and
>>             on redeclaring
>>                  with an asm label after the first ODR-use. Detects
>>             problems like the
>>                  one in PR22830 where gcc and clang both compiled the
>>             file but with
>>                  different behaviour.
>>
>>                  Added:
>>                       cfe/trunk/test/Sema/asm-label.c
>>                  Modified:
>>                       cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>>                       cfe/trunk/lib/Sema/SemaDecl.cpp
>>
>>                  Modified:
>>             cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>>                  URL:
>>
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=255371&r1=255370&r2=255371&view=diff
>>
>>
>> ==============================================================================
>>                  ---
>>             cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> (original)
>>                  +++
>>             cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Fri Dec
>> 11
>>                  15:28:55 2015
>>                  @@ -4259,6 +4259,9 @@ def err_tag_definition_of_typedef
>>             : Erro
>>                    def err_conflicting_types : Error<"conflicting types
>>             for %0">;
>>                    def err_different_pass_object_size_params : Error<
>>                      "conflicting pass_object_size attributes on
>>             parameters">;
>>                  +def err_late_asm_label_name : Error<
>>                  +  "cannot apply asm label to
>>             %select{variable|function}0 after its
>>                  first use">;
>>                  +def err_different_asm_label : Error<"conflicting asm
>>             label">;
>>                    def err_nested_redefinition : Error<"nested
>>             redefinition of %0">;
>>                    def err_use_with_wrong_tag : Error<
>>                      "use of %0 with tag type that does not match
>>             previous declaration">;
>>
>>                  Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
>>                  URL:
>>
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=255371&r1=255370&r2=255371&view=diff
>>
>>
>> ==============================================================================
>>                  --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
>>                  +++ cfe/trunk/lib/Sema/SemaDecl.cpp Fri Dec 11 15:28:55
>>             2015
>>                  @@ -2379,9 +2379,24 @@ void
>>             Sema::mergeDeclAttributes(NamedDecl
>>                      if (!Old->hasAttrs() && !New->hasAttrs())
>>                        return;
>>
>>                  -  // attributes declared post-definition are currently
>>             ignored
>>                  +  // Attributes declared post-definition are currently
>>             ignored.
>>                      checkNewAttributesAfterDef(*this, New, Old);
>>
>>                  +  if (AsmLabelAttr *NewA =
>> New->getAttr<AsmLabelAttr>()) {
>>                  +    if (AsmLabelAttr *OldA =
>>             Old->getAttr<AsmLabelAttr>()) {
>>                  +      if (OldA->getLabel() != NewA->getLabel()) {
>>                  +        // This redeclaration changes __asm__ label.
>>                  +        Diag(New->getLocation(),
>>             diag::err_different_asm_label);
>>                  +        Diag(OldA->getLocation(),
>>             diag::note_previous_declaration);
>>                  +      }
>>                  +    } else if (Old->isUsed()) {
>>                  +      // This redeclaration adds an __asm__ label to a
>>             declaration
>>                  that has
>>                  +      // already been ODR-used.
>>                  +      Diag(New->getLocation(),
>>             diag::err_late_asm_label_name)
>>                  +        << isa<FunctionDecl>(Old) <<
>>                  New->getAttr<AsmLabelAttr>()->getRange();
>>                  +    }
>>                  +  }
>>                  +
>>                      if (!Old->hasAttrs())
>>                        return;
>>
>>
>>                  Added: cfe/trunk/test/Sema/asm-label.c
>>                  URL:
>>
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/asm-label.c?rev=255371&view=auto
>>
>>
>> ==============================================================================
>>                  --- cfe/trunk/test/Sema/asm-label.c (added)
>>                  +++ cfe/trunk/test/Sema/asm-label.c Fri Dec 11 15:28:55
>>             2015
>>                  @@ -0,0 +1,30 @@
>>                  +// RUN: %clang_cc1 -verify %s
>>                  +
>>                  +void f();
>>                  +void f() __asm__("fish");
>>                  +void g();
>>                  +
>>                  +void f() {
>>                  +  g();
>>                  +}
>>                  +void g() __asm__("gold");  // expected-error{{cannot
>>             apply asm
>>                  label to function after its first use}}
>>                  +
>>                  +void h() __asm__("hose");  // expected-note{{previous
>>             declaration
>>                  is here}}
>>                  +void h() __asm__("hair");  //
>>             expected-error{{conflicting asm label}}
>>                  +
>>                  +int x;
>>                  +int x __asm__("xenon");
>>                  +int y;
>>                  +
>>                  +int test() { return y; }
>>                  +
>>                  +int y __asm__("yacht");  // expected-error{{cannot
>>             apply asm label
>>                  to variable after its first use}}
>>                  +
>>                  +int z __asm__("zebra");  // expected-note{{previous
>>             declaration is
>>                  here}}
>>                  +int z __asm__("zooms");  //
>>             expected-error{{conflicting asm label}}
>>                  +
>>                  +
>>                  +// No diagnostics on the following.
>>                  +void __real_readlink() __asm("readlink");
>>                  +void readlink() __asm("__protected_readlink");
>>                  +void readlink() { __real_readlink(); }
>>
>>
>>                  _______________________________________________
>>                  cfe-commits mailing list
>>             cfe-commits@lists.llvm.org
>>             <mailto:cfe-commits@lists.llvm.org>
>>             <mailto:cfe-commits@lists.llvm.org
>>             <mailto:cfe-commits@lists.llvm.org>>
>>             http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>>
>>
>>         _______________________________________________
>>         cfe-commits mailing list
>>         cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>>
>>
>>
>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to