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